筆記107--去除自定義AlertDialog黑邊
阿新 • • 發佈:2019-02-05
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()後呼叫,否則無效。