水平间距中的GridView错误

时间:2014-12-31 10:16:39

标签: android android-layout gridview

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

它在API 17-21上以英语(LTR)显示 但是,当我将语言转换为阿拉伯语(RTL)时,在API 17-19中忽略了horizo​​ntalSpacing,但在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)用户界面的截图:

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

enter image description here

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

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

以下是详细说明:android grid view place items from right to left

答案 2 :(得分:0)

可以通过在包含 GridView 的布局中设置 android:layoutDirection =&#34; ltr&#34; 来修复此问题然后,您需要创建2个布局,一个用于 RTL ,另一个用于 LTR ,并检查您的适配器应使用哪种类型。

答案 3 :(得分:-1)

我试过这段代码

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);
    }
}