1. 程式人生 > >去除自定義AlertDialog黑邊

去除自定義AlertDialog黑邊

http://blog.csdn.net/mwj_88/article/details/45482421
1、現象描述
  1. View _view = LayoutInflater.from(getActivity()).inflate(R.layout.alertdialog_schoolcourse, null);  
  2. AlertDialog _ad = new AlertDialog.setView(_view).Builder(getActivity()).create();                 
  3. _ad.requestWindowFeature(Window.FEATURE_NO_TITLE);  
  4. _ad.show();  
效果圖:

看到黑邊了吧,真醜。

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

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

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

樣式任選其一即可:

  1. <stylename="Theme_Transparent"parent="@android:Theme.DeviceDefault.Light.Dialog">
  2.         <itemname="android:windowIsTranslucent">true</item>
  3.         <itemname="android:windowBackground">@android:color/transparent</item>
  4.         <itemname="android:windowContentOverlay">@null</item>
  5.         <itemname="android:windowNoTitle">true</item>
  6. </style>
  1. </style>
  2.   <itemname="android:windowFrame">@null</item>
  3. </style>

效果圖:


4、Perfect解決方案

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

其實你只需要瞭解一點:

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

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

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