2014-12-31 12 views
7

Tôi đã đặt GridView trong tệp bố cục XML của mình.Lỗi GridView ở khoảng cách ngang

Nó được hiển thị như tôi muốn bằng tiếng Anh (LTR) trên cả hai API 17-21 Nhưng khi tôi phù hợp ngôn ngữ với tiếng Ả Rập (RTL) thì HorizontalSpacing bị bỏ qua trên API 17-19 nhưng trên API 21 nó được hiển thị như tôi muốn.

Hành vi tương tự đã xảy ra trên trình mô phỏng và thiết bị Android thực.

mã 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> 

mã XML cho các hạng mục:

<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" /> 

Dưới đây là ảnh chụp màn hình của tôi về tiếng Ả Rập (RTL) UI:

Chú ý khoảng cách ngang trong ảnh chụp màn hình đầu tiên

enter image description here

Trả lời

3

tôi đã cùng một vấn đề và tôi đã cố gắng để giải quyết nó nhưng nó chỉ không hoạt động như mong đợi. Nếu bạn có RTL bộ trong biểu hiện của bạn sau đó thiết lập theo hướng bố trí của GridView để LRT và rotateY bởi 180.

Dưới đây là một lời giải thích chi tiết: android grid view place items from right to left

+0

Điều này sẽ làm việc cho GridView với hình ảnh chỉ nhưng nếu có văn bản quá nó có thể được nhân đôi. Vì vậy, mục Lưới cũng cần phải được xoay 180. – darshanz

+0

Tôi chỉ cần đặt hướng đến 'grid.setLayoutDirection (View.LAYOUT_DIRECTION_LTR)' và nó hoạt động. –

4

thử này, tôi không biết tại sao nhưng làm việc cho tôi

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

Cũng làm việc cho tôi .....;) – karan

+0

Nhưng đó là không đúng ... nó hoạt động dưới 21 nhưng không hoạt động từ 21 trở lên. nó tạo ra vấn đề cho 21 và ở trên, cố gắng để giải quyết với kiểm tra thiết bị api – karan

+0

Tôi cũng gặp vấn đề này khi tôi thiết lập khoảng cách ngang trong GridView cho hướng RTL. Kiểm tra hướng bố trí và kiểm tra Api dường như hoạt động :). – box

0

Vấn đề này có thể được cố định bằng cách thiết lập android: layoutDirection = "ltr" trong cách bố trí có chứa GridView và sau đó, bạn cần phải tạo ra 2 bố trí, một cho RTL và một cho LTR, và kiểm tra trong bộ chuyển đổi của bạn mà gõ bạn nên sử dụng.

-1

tôi đã cố gắng mã này

trong xml:

android:horizontalSpacing="4dp" 

trong 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); 
    } 
} 
Các vấn đề liên quan