如果纵向模式下如何在RecyclerView中显示垂直滚动内容列表,横向模式下如何显示水平滚动内容列表?

时间:2019-11-21 08:26:40

标签: android android-recyclerview

在我的Android应用中,我正在使用RecyclerView来显示内容列表。但要求是,如果“屏幕模式”为“纵向”,则列表应垂直滚动;如果“屏幕模式”为“横向”,则列表应水平滚动。为此,我在“ main / res”目录的“ layout-land”目录中创建了横向布局。下面是“ res / layout”和“ res / layout-land”目录的xml代码-

res / layout / activity_media

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:app="http://schemas.android.com/apk/res-auto"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/media_bg_color"
                tools:context=".Activities.MediaActivity">

    <include
            android:id="@+id/tool_bar"
            layout="@layout/media_actionbar_layout"/>

    <TextView
            android:id="@+id/tvAppInfo"
            android:layout_width="match_parent"
            android:textSize="16dp"
            android:gravity="left"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:lineSpacingExtra="2sp"
            android:layout_marginTop="10dp"
            android:textColor="@android:color/white"
            android:text="@string/app_info"
            android:layout_below="@+id/tool_bar"
            android:layout_height="wrap_content"/>

    <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/rvMediaList"
            android:layout_width="match_parent"
            android:layout_below="@+id/tvAppInfo"
            android:layout_marginLeft="20dp"
            android:scrollbars="vertical"
            android:layout_marginRight="20dp"
            android:layout_marginTop="20dp"
            android:layout_height="match_parent">

    </androidx.recyclerview.widget.RecyclerView>
</RelativeLayout>

res / lay-land / activity_media

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:app="http://schemas.android.com/apk/res-auto"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/media_bg_color"
                tools:context=".Activities.MediaActivity">

    <include
            android:id="@+id/tool_bar"
            layout="@layout/media_actionbar_layout"/>

    <LinearLayout
            android:id="@+id/llParent"
            android:layout_width="match_parent"
            android:orientation="horizontal"
            android:weightSum="100"
            android:layout_marginTop="10dp"
            android:layout_below="@+id/tool_bar"
            android:layout_height="match_parent">

        <TextView
                android:id="@+id/tvAppInfo"
                android:layout_width="0dp"
                android:textSize="16dp"
                android:gravity="left"
                android:layout_marginLeft="20dp"
                android:layout_weight="35"
                android:lineSpacingExtra="2sp"
                android:textColor="@android:color/white"
                android:text="@string/app_info"
                android:layout_height="wrap_content"/>

        <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/rvMediaList"
                android:layout_width="0dp"
                android:layout_weight="65"
                android:scrollbars="horizontal"
                android:layout_marginLeft="30dp"
                android:layout_marginRight="20dp"
                android:layout_height="match_parent">

        </androidx.recyclerview.widget.RecyclerView>
    </LinearLayout>
</RelativeLayout>

下面是我在manifest.xml文件中提到我的“ MediaActivity”条目的方式

<activity
            android:name=".Activities.MediaActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:screenOrientation="sensor">
    </activity>

然后,如果“屏幕”模式为“横向”且在我的“ onConfigurationChanged()”方法代码下方,则我在“ MediaActivity.java”类中重写“ onConfigurationChanged()”方法以将水平布局设置为RecyclerView。

@Override
    public void onConfigurationChanged(Configuration newConfig)
    {
        super.onConfigurationChanged(newConfig);
        orientationLand = (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE ? true : false);

        if(orientationLand)
        {
            rvMediaList.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true));
        }
    }

现在的问题是,RecyclerView以水平方式滚动列表,但即使在横向模式下也仅考虑“ res / layout / activity_media”布局,而不考虑“ res / layout-land / activity_media”布局。

1 个答案:

答案 0 :(得分:0)

尝试

 @Override
 public void onConfigurationChanged(Configuration newConfig) {
                        super.onConfigurationChanged(newConfig);
                        // Checks the orientation of the screen
                        if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
                            mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
                            madapter = new YourAdapter(this, arrList);
                            mRecyclerView.setAdapter(madapter);
                        } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){

                            LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL,false);
                            mRecyclerView.setLayoutManager(layoutManager);
                            madapter = new YourAdapter(this, arrList);// for your adapter
                            mRecyclerView.setAdapter(madapter);
                        }

也在清单文件中包含android:configChanges

 <activity android:name=".YourActivity"
      android:configChanges="orientation|keyboardHidden"
      android:label="@string/app_name">