我想防止Android活动使用android:configChanges
重新启动,同时仍将布局从纵向视图更改为横向视图。这可能吗?
这是configChanges
中的活动AndroidManifest.xml
设置:
<activity
android:name=".Main"
android:configChanges="keyboardHidden|orientation|screenSize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
这是用于相应更改布局的代码:
View itemView = null;
int orientation = context.getResources().getConfiguration().orientation;
switch (orientation){
case Configuration.ORIENTATION_LANDSCAPE:
itemView = LayoutInflater.from(parent.getContext()).
inflate((R.layout.user_row_land), parent, false);
break;
case Configuration.ORIENTATION_PORTRAIT:
itemView = LayoutInflater.from(parent.getContext()).
inflate((R.layout.user_row), parent, false);
break;
}
return new ViewHolder(itemView);
答案 0 :(得分:0)
如果要完全禁用横向模式,则可以在AndroidManifest.xml本身中定义它。同样在这种情况下,如果配置更改也不会发生任何事情。您可以通过添加screenOrientation属性来实现。
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" />
您可以相应地处理配置更改。请参阅https://developer.android.com/guide/topics/resources/runtime-changes
该活动的onConfigurationChanged方法被调用。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
}
}