在網(wǎng)上找了許久也沒找到對應(yīng)的有效方法灯谣。網(wǎng)上的通常是說getWindow胞谭、或者View對象修改LayoutParams。但試了一系列均是無效符衔,能指定寬高找前,但還是無法自適應(yīng)。最后想起以前的一個處理button邊距判族。一些系統(tǒng)控件/UI會有默認的邊距等屬性躺盛。之前分析過button是通過theme預(yù)設(shè)了邊距的。那么AlertDialog的寬度是是否如此呢形帮?一步一步進入系統(tǒng)源碼發(fā)現(xiàn)AlertDialog是有默認theme——R.attr.alertDialogTheme的槽惫。
①android.app.AlertDialog.Builder#Builder(android.content.Context)
②public Builder(Context context) {
his(context, resolveDialogTheme(context, Resources.ID_NULL));
}
③static @StyleRes int resolveDialogTheme(Context context, @StyleRes int themeResId) {
if (themeResId == THEME_TRADITIONAL) {
return R.style.Theme_Dialog_Alert;
} else if (themeResId == THEME_HOLO_DARK) {
return R.style.Theme_Holo_Dialog_Alert;
} else if (themeResId == THEME_HOLO_LIGHT) {
return R.style.Theme_Holo_Light_Dialog_Alert;
} else if (themeResId == THEME_DEVICE_DEFAULT_DARK) {
return R.style.Theme_DeviceDefault_Dialog_Alert;
} else if (themeResId == THEME_DEVICE_DEFAULT_LIGHT) {
return R.style.Theme_DeviceDefault_Light_Dialog_Alert;
} else if (ResourceId.isValid(themeResId)) {
// start of real resource IDs.
return themeResId;
} else {
final TypedValue outValue = new TypedValue();
context.getTheme().resolveAttribute(R.attr.alertDialogTheme, outValue, true);
return outValue.resourceId;
}
}
由于我的電腦內(nèi)存小沒下載源碼深層源碼無法看到具體屬性,但也是可以佐證了我的猜想辩撑。然后找了一個以前自定義Dialog的主題界斜,去創(chuàng)建AlertDialog 。一時即中合冀。在創(chuàng)建AlertDialog時傳入不同的主題即可做到寬度自適應(yīng)各薇。如:R.style.Theme_AppCompat_Dialog
AlertDialog.Builder exitBuilder = new AlertDialog.Builder(this, R.style.Theme_AppCompat_Dialog);