如何在不重启活动的情况下处理Android中的方向更改

时间:2019-05-06 10:00:40

标签: android

我想防止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);

1 个答案:

答案 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();
}
}