手机旋转后 LinearLayoutManager setOrientation 不起作用

Posted

技术标签:

【中文标题】手机旋转后 LinearLayoutManager setOrientation 不起作用【英文标题】:LinearLayoutManager setOrientation after phone rotation not working 【发布时间】:2014-08-31 14:14:03 【问题描述】:

我正在尝试新的RecyclerViewLayoutManager 的标准实现@LinearLayoutManager。我的目标是让LayoutManager 在设备处于纵向时水平绘制我的项目,并在设备处于横向时垂直绘制它们。为此,我在活动的onCreate 中使用以下代码:

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.nextColors);
recyclerView.setAdapter(myAdapter = new MyAdapter(getBaseContext(), myData, myLayout);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) 
   linearLayoutManager.setOrientation(LinearLayout.HORIZONTAL);
 else 
    linearLayoutManager.setOrientation(LinearLayout.VERTICAL);

recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());

如果我在设备处于横向或纵向模式时启动 Activity,这可以正常工作。但是,当我在此活动中更改方向时,项目始终水平或垂直绘制,具体取决于活动首次启动时设备的方向。这对我来说没有意义,因为在设备旋转后重新创建了活动,LayoutManager 应该采用正确的方向。

有人知道如何让setOrientation 适应设备方向的变化吗?

【问题讨论】:

您没有显示足够的代码来诊断您的问题。显示您用于创建布局的代码。 什么意思?支持 RecyclerView 的适配器? @Squonk 我添加了更多关于 recyclerview 及其适配器的代码。 能否检查一下旋转时.orientation是否正确,这样我们就知道是线性布局问题还是layoutmanager问题了? @sbaar 设备旋转后方向值正确,问题一定出在LinearLayoutManager 【参考方案1】:

这是因为您在 RecyclerView 中恢复保存状态之前设置方向。

尝试在Activity#onPostCreateActivity#onResume 上设置方向(换句话说,在保存的状态恢复后),这样保存的状态就不会覆盖您的方向值。

更新 从版本 21 开始,LLM 将不会保留配置更改的方向,因此您的代码应该按原样工作。您无需关心已保存的状态。

进行此更改是因为保存状态应该负责保存变量状态,而方向是我们可以期望开发人员在每次创建时设置的配置。

【讨论】:

以上是关于手机旋转后 LinearLayoutManager setOrientation 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Android:如何在手机旋转后阻止创建新线程

[ARCore][SceneForm] 手机旋转后的世界位置

ios系统 竖屏拍照 canvas处理后 图片旋转(利用exif.js解决ios手机上传竖拍照片旋转90度问题)

iOS和小米手机拍照上传后,在web端显示旋转

部分Android或IOS手机拍照后照片被旋转的问题

我的手机开启了屏幕旋转但是玩王者荣耀的时候还是不能旋转屏幕其他游戏也试过都不行