GridView水平间距错误

我已经在我的XML布局文件中放置了一个GridView。

它在API 17-21上显示为我想要的英文(LTR)。但是,当我把语言翻译成阿拉伯文(RTL)时,horizo​​ntalSpacing在API 17-19上被忽略,但在API 21上被显示为我想要的。

模拟器和真正的Android设备上也出现了相同的行为。

XML代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/services_home_main_layout" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:id="@+id/services_home_contents" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentTop="true" android:layout_above="@+id/services_home_bottom_layout"> <GridView android:id="@+id/services_home_services_gridview" android:layout_width="match_parent" android:layout_height="match_parent" android:numColumns="3" android:horizontalSpacing="4dp" android:verticalSpacing="4dp" android:layout_margin="4dp" android:gravity="center" android:choiceMode="singleChoice" /> </LinearLayout> <LinearLayout android:id="@id/services_home_bottom_layout" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" /> </RelativeLayout> 

项目的XML代码:

 <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/services_drawer_item_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:padding="4dp" android:background="@color/Gray_CC" android:drawableTop="@drawable/tall4" android:text="@string/app_name" /> 

这是我的阿拉伯语(RTL)用户界面截图:

注意第一个屏幕截图中的水平间距

在这里输入图像说明

Solutions Collecting From Web of "GridView水平间距错误"

我有同样的问题,我试图解决它,但它只是没有按预期工作。 如果在清单中设置了RTL,则将GridView的布局方向设置为LRT并将其旋转180°。

这里是一个详细的解释: android网格视图的地方项目从右到左

试试这个,我不知道为什么,但为我工作

 if(activity.getWindow().getDecorView().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) gridView.setHorizontalSpacing((int) -padding); else gridView.setHorizontalSpacing((int) padding); 

这个问题可以通过在包含GridView的布局中设置android:layoutDirection =“ltr”来解决,然后,您需要创build2个布局,一个用于RTL ,另一个用于LTR ,并检查您的适配器应使用哪种types。

我试过这个代码

在xml中:

 android:horizontalSpacing="4dp" 

在java中:

 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1)//V.17 { gView.setLayoutDirection(View.LAYOUT_DIRECTION_RTL); if(Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP){ //V.21 gView.setHorizontalSpacing((int) -4); } }