我想更改ExpandableListView的组视图中显示的默认箭头的位置.我希望它是向右而不是向左.
如何才能做到这一点 ?
Ben*_*fez 29
实际上有一个简单的方法.
编辑与组视图相关的XML,如下所示:
<?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>
Run Code Online (Sandbox Code Playgroud)
看看它ImageView是如何在右边的TextView.
编辑您的ExpandableListAdapter如下:
@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;
}
Run Code Online (Sandbox Code Playgroud)
如您所见,您可以轻松设置与组状态对应的drawable.
我知道很久以前就问过这个问题,但这可能对某些人有所帮助.
试试这个
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));
Run Code Online (Sandbox Code Playgroud)
而GetDipsFromPixel就在这里
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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20245 次 |
| 最近记录: |