2011-02-27 34 views

Trả lời

9

Sử dụng setIndicatorBounds:

Thiết lập giới hạn bản vẽ cho các chỉ số (ở mức tối thiểu, chỉ số nhóm bị ảnh hưởng bởi điều này; chỉ số trẻ bị ảnh hưởng bởi này nếu giới hạn chỉ số trẻ em được thiết lập để kế thừa).

-4

Không có cách nào trực tiếp để thực hiện việc này.

mIndicatorLeft and mIndicatorRight là hai trường trong lớp ExpandableListView xử lý vị trí của biểu tượng chỉ báo và chúng là các trường riêng tư. Thật không may vị trí của chỉ số không được thiết lập trong một Layout được định nghĩa gọn gàng như mong đợi, nhưng được xác định trên dispatchDraw() trong ExpandableListView. Một hình chữ nhật được vẽ bằng cách sử dụng các giá trị trên cùng/dưới cùng và mIndicatorRight và mIndicatorLeft, biểu tượng chỉ báo được vẽ trong Rect này. Bạn phải thay đổi vị trí của obj Rect này có tên 'indicatorRect' để di chuyển biểu tượng chỉ báo của bạn.

Để biết ý tưởng về những điều bạn có thể xem ví dụ này http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList1.html Thay đổi giá trị của đệm văn bản thành 0 trong getGenericView() trong ví dụ, bạn sẽ thấy chỉ báo sẽ chồng chéo văn bản.

Tùy chọn duy nhất của bạn là lấy mã nguồn của ExpandableListView và đặt các giá trị mIndicatorRight và mIndicatorLeft này bằng cách đặt mIndicatorRight là item.getRight() và mIndicatorLeft làm item.getRight() - 'kích thước biểu tượng của bạn'.

+0

không ai trong số này là chính xác. – moonlightcheese

29

Thực ra có một cách đơn giản.

  1. Sửa XML của bạn liên quan đến giao diện nhóm như thế này:

    <?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginRight="35dp" 
    android:orientation="horizontal" > 
    
    <TextView 
        android:id="@+id/videos_explist_groupname" 
        android:layout_width="match_parent" 
        android:layout_height="?android:attr/listPreferredItemHeight" 
        android:layout_alignParentLeft="true" 
        android:layout_alignParentTop="true" 
        android:layout_toLeftOf="@+id/videos_group_indicator" 
        android:gravity="center" 
        android:paddingLeft="?android:attr/expandableListPreferredItemPaddingLeft" 
        android:textAppearance="?android:attr/textAppearanceListItem" /> 
    
    <ImageView 
        android:id="@+id/videos_group_indicator" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_alignParentRight="true" 
        android:layout_centerVertical="true" 
        android:src="@drawable/videos_chevron_collapsed" /> 
    
    </RelativeLayout> 
    

    Xem cách ImageView là trên bên phải của TextView.

  2. Chỉnh sửa của bạn ExpandableListAdapter như sau:

    @Override 
    public View getGroupView(final int groupPosition, final boolean isExpanded, final View convertView, final ViewGroup parent) { 
        View v; 
        if (convertView == null) { 
         v = newGroupView(isExpanded, parent); 
        } else { 
         v = convertView; 
        } 
        bindView(v, mGroupData.get(groupPosition), mGroupFrom, mGroupTo); 
        ((ImageView) v.findViewById(R.id.videos_group_indicator)) 
         .setImageResource(isExpanded?R.drawable.videos_chevron_expanded:R.drawable.videos_chevron_collapsed); 
        return v; 
    } 
    

    Như bạn thấy, bạn có thể dễ dàng thiết lập các drawable tương ứng với trạng thái nhóm.

Tôi biết câu hỏi đã được hỏi từ lâu rồi, nhưng điều này có thể giúp ai đó.

+0

Bạn đặt gì vào thẻ chỉ báo bên trong expandablelistview? – Maxrunner

+5

'android: groupIndicator =" @ null "' –

+0

@Bạn phải đối mặt với lỗi từ 'isExpanded?' ... – NagarjunaReddy

5

Hãy thử điều này

expList = getExpandableListView(); 
metrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(metrics); 
width = metrics.widthPixels; 
//this code for adjusting the group indicator into right side of the view 
expList.setIndicatorBounds(width - GetDipsFromPixel(50), width - GetDipsFromPixel(10)); 

GetDipsFromPixel là ở đây

public int GetDipsFromPixel(float pixels) 
{ 
    // Get the screen's density scale 
    final float scale = getResources().getDisplayMetrics().density; 
    // Convert the dps to pixels, based on density scale 
    return (int) (pixels * scale + 0.5f); 
} 
+0

nó chắc chắn đã giúp tôi, hoạt động như một sự quyến rũ – dariusiv

Các vấn đề liên quan