Android GridVIew根据方向更改列数

sri*_*lli 15 android gridview android-layout

我想以网格的形式显示6个图像,如下所示.

纵向,2个coumns,3行,并在土地保育方向3列,2行

通过使用Android GridView并在layout-port和layout-land目录中定义不同的网格布局,我能够实现这种效果.

后来根据我的活动要求,我在manifest.xml中添加了一个参数

android:configChanges = "mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|fontScale|screenSize"`
Run Code Online (Sandbox Code Playgroud)

一旦屏幕方向改变,停止我的活动重新创建.

添加此参数后,我的网格视图不按预期方式运行.它有时显示1列,有时2列,有时3列.

我根据设备的方向在我的网格适配器的get view方法中放置gridView.setNumberOfColumns(2)gridView.setNumberOfColumns(3)方法.

请帮助我在不删除android:configChangesManifest.xml中的参数的情况下实现此效果

urS*_*Sus 38

使用强大的资源系统.

在xml布局中,将列数设置为整​​数资源,然后/values/integers.xml将其设置为2表示纵向,/values-land/integers.xml并将其设置为3表示横向

//好吧,如果你在清单中执行configChanges,则必须在onConfogurationChanged中更改java中的列数


Jin*_*n35 11

@Override
public void onConfigurationChanged(Configuration newConfig) {
    grid.setNumColumns(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE ? 3 : 2);
    super.onConfigurationChanged(newConfig);
}
Run Code Online (Sandbox Code Playgroud)


Pra*_*ani 6

您可以使用编程方式设置列数

float scalefactor = getResources().getDisplayMetrics().density * 100;
int number = getWindowManager().getDefaultDisplay().getWidth();
int columns = (int) ((float) number / (float) scalefactor);
gridView.setNumColumns(columns);
Run Code Online (Sandbox Code Playgroud)


Kri*_*lal 1

当您在清单中使用 android:configChanges = "orientation" 时,您的活动不会在方向更改时重新创建(横向到纵向或反之亦然)。如果您不想从清单中删除此标记,则必须重写 onConfigchanged 并在那里放置一些代码逻辑。