2012-07-10 10 views
8

Tôi đang tạo một ứng dụng mà tôi muốn chế độ xem lưới được điền từ phải sang trái "để sử dụng nó cho các ngôn ngữ từ phải sang trái", tôi đã cố gắng đặt trọng tâm GridView thành phải nhưng nó không hoạt động ... bố trí GridView của tôi là dưới đây.Bắt đầu các yếu tố GridView từ bên phải

Cảm ơn trước

<RelativeLayout 
    android:id="@+id/grid_layout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_below="@+id/show_info" 
    android:gravity="right" > 

    <GridView 
     android:id="@+id/channel_grid" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_centerHorizontal="true" 
     android:columnWidth="90dp" 
     android:gravity="right" 
     android:horizontalSpacing="10dp" 
     android:numColumns="auto_fit" 
     android:stretchMode="columnWidth" 
     android:verticalSpacing="10dp" > 
    </GridView> 
</RelativeLayout> 

Trả lời

4

Tôi không nghĩ GridView được thiết kế có tiếng trong tâm trí. Nó là một thành phần trực quan hơn để sắp xếp hình ảnh thu nhỏ.

Bạn có thể giải quyết vấn đề đó bằng cách sửa đổi bộ điều hợp của mình và để nó đảo ngược thứ tự của từng mục trên mỗi hàng. Tuy nhiên, bạn cần phải nói cho bộ điều hợp của bạn số lượng các mục trên mỗi hàng để thực hiện công việc đó.

Trên hết, nếu hàng cuối cùng có ít mặt hàng hơn có thể, thì bạn cần phải giới thiệu các mặt hàng giả trống để lấp đầy trái.

+1

Thực tế, tính toán 'layoutDirection' vào tài khoản là 4,2. Tôi đã cập nhật câu trả lời của mình với một số liên kết bổ sung cho nguồn. – Jelle

+0

Đây là một gợi ý tốt, cảm ơn. Trong ứng dụng của tôi GridView có một số cột cố định và theo cách này tôi có thể mô phỏng hướng rtl. –

2

Bạn có thể thử

android:layoutDirection="rtl" 

Nó thường cho văn bản và tôi không biết tác dụng trên GridView là những gì. (ref)

Một điều để thử là

android:stackFromBottom="true" 

Nhưng nó sẽ không hoạt động nếu bạn cần để đặt hàng các mặt hàng từ trên xuống dưới và từ phải sang trái (ref)

+0

stackFromBottom là điều đầu tiên tôi đã suy nghĩ về, nhưng nó đã không giúp đỡ. – user1940676

+0

lỗi: Không tìm thấy mã định danh tài nguyên cho thuộc tính 'layoutDirection' trong gói 'android' –

+0

xóa câu trả lời –

5

Tôi nghĩ dự đoán tốt nhất của bạn là sao chép mã từ GridView source và thay đổi đo/bố cục để sử dụng từ phải sang trái.

CẬP NHẬT: Hướng bố cục cho chế độ xem chỉ được giới thiệu trong API cấp 17 (4.2). Nếu bạn so sánh GridView.java trong 4.24.1, bạn có thể thấy rằng ví dụ trong phương thức makeRow(), layoutDirection được tính đến kể từ 4.2, do đó sẽ hoạt động!

Bạn đã cố gắng thực thi mã của mình với android:layoutDirection="rtl" trên API cấp 17 chưa?

+0

Có Tôi đã thử rtl trên api 17 nó đã không thực hiện thủ thuật. – user1940676

3

Bạn có thể thử điều này. Có GridView của bạn trong file layout của bạn có thuộc tính sau

android:layoutAnimation="@anim/layout_grid_right_to_left" 

Tạo một thư mục anim trong đó bạn thêm layout_grid_right_to_left.xml với cotents

<gridLayoutAnimation xmlns:android="http://schemas.android.com/apk/res/android" 
    android:columnDelay="0.5" 
    android:directionPriority="row" 
    android:direction="right_to_left" 
    android:animation="@anim/fade" /> 

Ngoài ra thêm fade.xml trong cùng một thư mục anim với nội dung

<alpha xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/accelerate_interpolator" 
    android:fromAlpha="0.0" android:toAlpha="1.0" 
    android:duration="@android:integer/config_longAnimTime" /> 

Đây chỉ là để bạn tham khảo. Vui lòng thêm/xóa thuộc tính phù hợp với nhu cầu/yêu cầu của bạn.

2

Bạn có thể thử điều này cho GridView của bạn và tất cả các mặt hàng của nó trong XML:

android:rotationY="180" 

Bạn cũng có thể sử dụng android:layoutDirection="rtl".Nó có thể giải quyết vấn đề của bạn.

+1

ans.thanks hoàn hảo :) – Jas

1

Có cách ngớ ngẩn để làm điều này nhưng nó hoạt động hoàn hảo.

chỉ cần thực hiện android:ScaleX=-1 trong chế độ xem lưới và trong mục chứa (chế độ xem tùy chỉnh của bạn cho ô xem lưới), do đó bố cục của bạn bắt đầu từ Phải sang trái!

hy vọng sự trợ giúp này

+0

lol. nó hoạt động, nó là android: ScaleX = "- 1". –