Android:程序化“允许重定向”首选项仅适用一次

Android:程序化“允许重定向”首选项仅适用一次,第1张

概述我有一个带有键“allow_reorientation”的CheckBoxPreference.如果启用,则我的主要活动应在设备旋转时重新定向,如果禁用,则应保持其当前方向.我在manifest.xml中设置了’ android:configChanges =“orientation”’,以允许自定义处理方向更改. 从我的主要活动课: @Override public void onCon @H_404_2@ 我有一个带有键“allow_reorIEntation”的CheckBoxPreference.如果启用,则我的主要活动应在设备旋转时重新定向,如果禁用,则应保持其当前方向.我在manifest.xml中设置了’ android:configChanges =“orIEntation”’,以允许自定义处理方向更改.

从我的主要活动课:

@OverrIDe    public voID onConfigurationChanged(Configuration newConfig) {        super.onConfigurationChanged(newConfig);        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);        if (preferences.getBoolean("allow_reorIEntation",true)) {            switch(newConfig.orIEntation) {                case Configuration.ORIENTATION_PORTRAIT:                    setRequestedOrIEntation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);                    break;                case Configuration.ORIENTATION_LANDSCAPE:                    setRequestedOrIEntation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);                    break;                default:                    setRequestedOrIEntation(ActivityInfo.SCREEN_ORIENTATION_UnspecIFIED);                    break;            }        }    }

如果我以纵向方式启动应用程序,然后将设备旋转到横向,则调用上面的代码并按照需要运行.但是,当旋转回到肖像时,根本不调用该方法,当然视图仍保持在横向中.

我的第一个猜测是因为我没有将’newConfig.orIEntation’存储在任何地方,所以第二次重新定位回到肖像是将最新的方向值与仍然显示纵向方向的预先存在的值进行比较,因此未检测到配置更改.但是,如果这是真的,那么当我尝试第二次定向到景观时,我在上述方法中设置的断点将被激活,但在这种情况下从不调用该方法.

有人可以澄清一下发生了什么,并提供补救措施吗?

非常感谢.

解决方案 – 谢谢下面的马修威利斯

在YourApp中扩展应用程序:

public voID updateOrIEntationConfiguration(Activity activity) {    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);    if (preferences.getBoolean("allow_reorIEntation",true)) {        activity.setRequestedOrIEntation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);    } else {        if (activity.getResources().getConfiguration().orIEntation == Configuration.ORIENTATION_LANDSCAPE) {            activity.setRequestedOrIEntation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);        }        if (activity.getResources().getConfiguration().orIEntation == Configuration.ORIENTATION_PORTRAIT) {            activity.setRequestedOrIEntation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);        }    }}

在YourActivity中扩展Activity:

public voID onResume() {        super.onResume();        YourApp app = (YourApp)this.getApplication();        app.updateOrIEntationConfiguration(this);    }
解决方法 另一种方法是使用 ActivityInfo.SCREEN_ORIENTATION_SENSOR和 ActivityInfo.SCREEN_ORIENTATION_NOSENSOR.

您基本上可以根据您的偏好设置其中一个,然后您不必实现onConfigurationChanged(或在清单中设置configChanges).

一个示例活动:

public class Main extends Activity {    private static boolean locked = false;    @OverrIDe    public voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.main);        dolock();    }    public voID dolock() {        if (locked) {            if (getResources().getConfiguration().orIEntation == Configuration.ORIENTATION_LANDSCAPE) {                setRequestedOrIEntation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);            }            if (getResources().getConfiguration().orIEntation == Configuration.ORIENTATION_PORTRAIT) {                setRequestedOrIEntation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);            }        } else {            setRequestedOrIEntation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);        }    }    public voID toggle(VIEw v) {        locked = !locked;        dolock();    }}

在测试中,我注意到SCREEN_ORIENTATION_NOSENSOR也会导致旋转到默认方向,因此必须明确使用_LANDSCAPE和_PORTRAIT.

@H_404_2@ 总结

以上是内存溢出为你收集整理的Android:程序化“允许重定向首选项仅适用一次全部内容,希望文章能够帮你解决Android:程序化“允许重定向”首选项仅适用一次所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1121784.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存