android#activity横竖屏分别对应不同xml布局?#

横竖屏切换后,界面效果错乱的问题,android已经为我们提供了较完美的解决方案,那就是新建备选资源,让横竖屏切换后的activity分别对应不同的xml文件(但资源id相同)。

备选资源

如果对于横屏屏有着不同的布局要求,那么就需要新建一个备选资源,首先在res目录下新建一个文件夹并命名为layout-land,随后在layout-land目录下新建一个相同名字的xml布局,一个技巧就是可以直接将activity_summary.xml布局从layout目录下复制到layout-land目录之下,随后再根据需求更改xml布局,本例中src目录结构如下:

这里写图片描述
这是layout目录下activity_summary.xml的普通布局。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/tv_hw"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="我在中间位置"
        android:textSize="18sp"
        android:textColor="#787878"
         />
</RelativeLayout>

而这是layout-land目录下的activity_summary.xml的布局,注意横屏和竖屏的两个布局文件名字必须一致,这样才能保证它们能以同一个资源ID被引用

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/tv_hw"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:text="我来顶部哈"
        android:textSize="18sp"
        android:textColor="#787878"
         />
</RelativeLayout>

运行看下效果,效果图1是正常居中布局,而图2是我们适配的横向居中效果。

这里写图片描述

关闭横竖屏自动切换

第一种方法就是在清单中在相应的activity中指定特定方向,其中portrait为竖向,landscape为横向

	    <activity android:name=".ActivitySummary2"
            android:screenOrientation="portrait"
            />

第二种方法就是可以在代码中动态添加

    @Override protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        //竖屏
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        //横屏
        setContentView(R.layout.activity_summary);
    }

如果你不想关闭横竖屏切换功能,但又不想Activity在屏幕旋转的时候重新创建,那么我们可以给Activity指定configChanges属性

        android:configChanges="orientation|keyboardHidden|screenSize"

其中orientation表示屏幕方向发生了改变;keyboardHidden表示键盘的可访问性发生了改变,比如用户调出了键盘;screenSize表示当编译时minSdkVersion和targetSdkVersion不低于或不全低于13时,当屏幕的尺寸信息发生了改变时,会导致Activity重建。

mjzuo博客列表传送阵

发布了63 篇原创文章 · 获赞 191 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/MingJieZuo/article/details/97643494