在我的片段中,我通过以下方式设置我的GridLayout:mRecycler.setLayoutManager(new GridLayoutManager(rootView.getContext(), 2));
所以,我只想在用户旋转手机/平板电脑时,将< code>2改为< code>4。我已经了解了< code > onConfigurationChanged ,并尝试让它为我的情况工作,但它并没有以正确的方式进行。当我旋转手机时,应用程序崩溃了...
你能告诉我如何解决这个问题吗?
以下是我找到解决方案的方法,但效果不佳:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
int orientation = newConfig.orientation;
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
mRecycler.setLayoutManager(new GridLayoutManager(mContext, 2));
} else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
mRecycler.setLayoutManager(new GridLayoutManager(mContext, 4));
}
}
提前感谢!
除了答案。也可以仅使用XML属性完成。下面是代码。
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/pax_seat_map_rv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:spanCount="3"
android:orientation="vertical"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" />
请尝试在onCreateView方法中处理此问题,因为每次方向发生变化时都会调用它:
if(getActivity().getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT){
mRecycler.setLayoutManager(new GridLayoutManager(mContext, 2));
}
else{
mRecycler.setLayoutManager(new GridLayoutManager(mContext, 4));
}
如果您有多个条件或在多个地方使用该值,这可能会很快失控。我建议创建以下结构:
res
- values
- dimens.xml
- values-land
- dimens.xml
与 res/values/dimens.xml
是:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<integer name="gallery_columns">2</integer>
</resources>
和res/value-land/dimens.xml
是:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<integer name="gallery_columns">4</integer>
</resources>
然后代码变成(并永远保持)如下:
final int columns = getResources().getInteger(R.integer.gallery_columns);
mRecycler.setLayoutManager(new GridLayoutManager(mContext, columns));
您可以很容易地看到添加确定列计数的新方法是多么容易,例如使用-w500dp
/-w600dp
/-w700dp
资源文件夹而不是-land
。
将这些文件夹分组到单独的资源文件夹中也很容易,以防您不想弄乱其他(更相关)的资源:
android {
sourceSets.main.res.srcDir 'src/main/res-overrides' // add alongside src/main/res
}
我正在参加在线android工作室课程,我坚持这项任务。 将RecyclerView的layoutManager属性更改为GridLayoutManager https://github.com/google-developer-training/android-basics-kotlin-affirmations-app-solution
我使用的是,它用于根据中的当前查询筛选中的数据,如如何使用SearchView筛选RecyclerView中所述。 问题是项目的顺序也必须能够改变。通过具有方法的类与交互。如果用户更改了项目的排序方式,我需要更改它,但我不确定如何做到这一点。 当前的情况只需要颠倒顺序,所以这个问题可以通过和来解决,但我想知道如何提供一种完全不同的方式来排序中的项目。
我知道我可以用跨越两列: 但是我怎样才能使第一个项目也跨越2行呢? 我曾尝试通过将其他项目的高度增加一倍来设置第一个项目的高度,但这导致与第一个项目相同行的每个项目也被拉伸到该高度:
如何使用网格布局管理器水平显示三行三列的循环视图项目,增加垂直增加的价值,类似于下图
为电视应用程序创建了双向滚动网格布局 从布局文件查看结构 所以我使用了gridlayoutmanager(方向垂直)和spancount 49(24小时*2)1来显示列中的图像。第一行显示分为半小时时段的时间线,第一列显示频道,每个频道都有自己的节目在不同的时段运行。现在我实现了双向滚动gridlayout,现在我还有两件事要做。 1)当水平滚动时,通道列(第一列)也会滚动,因此会被隐藏(但它必须
我正尝试在中为每一行水平居中所有项目 我尝试了很多东西:作为父级的RelativeLayout,然后使用layout_centerInParent,使用基本的Android:layout_gravity=“center”,尝试添加一些space元素,使用权重和....在 中,但我没有成功:( 我所拥有的 活动中 item_row.xml 我在谷歌上搜索了很多,找到了这个答案,但实际上我不知道如何为