1. 程式人生 > >筆記107--去除自定義AlertDialog黑邊

筆記107--去除自定義AlertDialog黑邊

1、現象描述
View _view = LayoutInflater.from(getActivity()).inflate(R.layout.alertdialog_schoolcourse, null);
AlertDialog _ad = new AlertDialog.setView(_view).Builder(getActivity()).create();				
_ad.requestWindowFeature(Window.FEATURE_NO_TITLE);
_ad.show();
效果圖:

看到黑邊了吧,真醜。

2、將就的解決方案
View _view = LayoutInflater.from(getActivity()).inflate(R.layout.alertdialog_schoolcourse, null);
AlertDialog _ad = new AlertDialog.Builder(getActivity()).create();				
_ad.requestWindowFeature(Window.FEATURE_NO_TITLE);
_ad.setView(_view, 0, 0, 0, 0);
_ad.show();
效果圖:
雖然上下的黑邊不見了,但是四周仍有個黑框。
3、更好的解決方案

通過樣式檔案把背景設定為透明。

View _view = LayoutInflater.from(getActivity()).inflate(R.layout.alertdialog_schoolcourse, null);
AlertDialog _ad = new AlertDialog.Builder(new ContextThemeWrapper(getActivity(), R.style.Theme_Transparent)).create();				
_ad.requestWindowFeature(Window.FEATURE_NO_TITLE);
_ad.setView(_view);
_ad.show();

樣式任選其一即可:

<style name="Theme_Transparent" parent="@android:Theme.DeviceDefault.Light.Dialog">
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowNoTitle">true</item>
</style>        
</style>
  <item name="android:windowFrame">@null</item>
</style>

效果圖:


4、Perfect解決方案

上面的解決方案會導致AlertDialog無故變寬,而且如果你想加個圓角背景,會發現根本沒效果~

其實你只需要瞭解一點:

setView()和setContentView()的區別:setView()只會覆蓋AlertDialog的Title和Button之間的部分,而setContentView()則會全部覆蓋。

注意:setContentView()必須在show()後面呼叫。

要改變AlertDialog的尺寸:只需呼叫ad.getWindow().setLayout(200, 250);此方法同樣也需要在show()後呼叫,否則無效。