在我的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”布局。
答案 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">