用例:我正在Tablet和Android TV中开发android应用程序,其中每个屏幕都包含“旋转屏幕”选项。我的查询是,如果用户点击旋转屏幕选项,我想在整个应用程序中更改屏幕方向。即所有屏幕都应将其默认设置更改为该选择的屏幕方向。
Hold the flag to change the orientation and verify it at onCreate(); and change it.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(isLandScape)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
else
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.activity_main);
}
我可以为您提供一种解决方法:
android:configChanges = "orientation"
onConfigurationChanged(Configuration new)
按钮时从Android系统获取回调Rotation
Override
onConfigurationChanged()
您的活动中的回调onConfigurationChanged(Configuration newConfig)
中获得新的配置对象作为参数。集中存储它,以便所有应用程序都可以访问它。在所有活动中编写代码以首先检查集中存储的configuration
值,如果它为空(如最初那样,则可以根据应用程序的需要从default
以纵向或横向开始
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Make getCurrentConfig() method available centrally via Interface or
Application level, depends on our logic
if (getCurrentConfig() == LANDSCAPE) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} else if (getCurrentConfig() == PORTRAIT) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
setContentView(R.layout.activity_main);
}
这样,您可以集中管理所有活动的当前轮换变化希望对您有所帮助
单击旋转屏幕选项时,设置变量值。在每个活动的onCreate()方法中检查此变量,并按如下所示设置方向:-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Check the value of variable in if condition
if (value.equals("landscape")) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
但是请确保对应用程序中的所有活动都执行此操作。您可能不得不重新启动该应用程序也达不到效果。