dialog横竖屏切换不适配

dialog横竖屏切换不适配

工作中有一个出现个问题:横竖屏切换要求dialog宽填充屏幕

因为横竖屏切换会重新走activity的生命周期,所以可以在创建一个类继承activity

private void modifyDialogStyle() {
        getWindow().setLayout(
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.WRAP_CONTENT);
WindowManager.LayoutParams params = getWindow().getAttributes();
        params.gravity = Gravity.BOTTOM;
        WindowManager manager = getWindowManager();
        Display display = manager.getDefaultDisplay();
        params.width = display.getWidth();
        getWindow().setAttributes(params);
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    protected void setupAlert() {
        modifyDialogStyle();
    }

然后指定dialog在绑定了该activity的onCreate()中调用setupAlert()方法,动态改变dialog的宽度。

或者在该activity的清单文件中,设置configChanges属性,配置了这个属性,当我们横竖屏切换的时候会直接调用onCreate方法中的onConfigurationChanged()方法,而不会重新执行onCreate()方法。

android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|screenSize|smallestScreenSize"
mcc:IMSI(国际移动用户识别码)发生改变,检测到SIM卡,或者更新MCC
mnc:IMSI网络发生改变,检测到SIM卡,或者更新MCC
touchscreen:触摸屏发生改变,这通常是不应该发生的
navigation:导航发生改变,(这通常不应该发生) 举例:连接蓝牙键盘,连接后确实导致了navigation的类型发生变化。因为连接蓝牙键盘后,我可以使用方向键来navigate了

locale:语言发生改变,用户选择了一个新的语言,文字应该重新显示
keyboard:键盘类型发生改变,例如,用户使用了外部键盘
keyboardHidden:键盘发生改变,例如,用户使用了硬件键盘
screenLayout:屏幕的布局发生改变,这可能导致激活不同的显示
fontScale:全局字体大小缩放发生改变
orientation:横向显示和竖向显示模式切换。
screenSize: 屏幕大小改变了
smallestScreenSize: 屏幕的物理大小改变了,如:连接到一个外部的屏幕上

android4.2增加LTR模式(针对阿拉伯语、波斯语之类从右到左的布局习惯),configChanges也增加一个layoutDirection属性,当改变语言设置后,该属性也会成newConfig中的一个mask位。所以ActivityManagerService(实际在ActivityStack)在决定是否重启Activity的时候总是判断为重启。
需要在android:configChanges 中同时添加locale和layoutDirection。
在不退出应用的情况下切换到Settings里切换语言,Activity也会重启

你可能感兴趣的:(开发学习)