我有小图标的组指示,我使用groupIndicator来调用选择器来绘制它但是我看到android默认情况下拉伸该图标以适合文本大小
我该如何防止这种行为,并显示带有原始尺寸的图标?
答案 0 :(得分:25)
无论您使用哪种图像作为组指示器,都要将其设为9个补丁(xxx.9.png)图像,并将其可伸展区域设置为边框像素周围(可能是透明的)。它将防止图像从中间拉伸。
答案 1 :(得分:6)
您可以通过 setGroupIndicator 方法添加组指标。但默认情况下,Android拉伸指标的高度以适合组项的高度。 (宽度可以通过 setIndicatorBounds 方法调整。) 因此,您应该使组指示器的高度与组项目的高度完全相同。 (见ExpandableListView)
否则,您可以使用 onGroupCollapsed 和 onGroupExpanded 方法制作完全自定义的群组指标。只需使用某些状态创建视图,并在调用这些方法时,更改视图的状态。 (见ExpandableListAdapter)
答案 2 :(得分:6)
<ExpandableListView
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:id="@+id/elv_store_info_Expandlist"
android:cacheColorHint="#FFFFFF"
android:overScrollMode="never"
android:fastScrollEnabled="false"
android:fastScrollAlwaysVisible="false"
android:indicatorRight="20dp"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:groupIndicator="@drawable/store_info_expandabellist_indicator"
/>
@ store_info_expandabellist_indicator.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_empty="true" android:drawable="@drawable/bitmap_btn_arraw_right_dark_small">
</item>
<item android:state_expanded="true" android:drawable="@drawable/bitmap_btn_arraw_bottom_white_small">
</item>
<item android:drawable="@drawable/bitmap_btn_arraw_right_dark_small">
</item>
</selector>
@bitmap_btn_arraw_right_dark_small
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:left="11dp"
android:right="11dp"
android:top="12dp"
android:bottom="12dp"
android:drawable="@drawable/btn_arrowright_dark">
</item>
</layer-list>
答案 3 :(得分:4)
我认为在这种情况下最简单的做法是在行组视图中包含指示器(作为imageView),并根据组是否展开来更改其选择状态。您需要确保ImageView使用具有选定状态drawable的选择器。
这样的事情:
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent)
{
View row;
if (convertView != null)
{
row = convertView;
}
else
{
row = LayoutInflater.from(getContext()).inflate(R.layout.group_row, null));
}
final ImageView indicator = (ImageView)row.findViewById(R.id.indicator);
indicator.setSelected(isExpanded);
return row;
}
答案 4 :(得分:1)
chitacan感谢您的评论。非常有帮助!
但是如果你试图在像我这样的onGroupExpanded和onGroupCollapsed方法的组视图中更改视图(例如指标),你最终会发现它们会回到原来的状态。原因:exp.listview在扩展和折叠后调用getGroupView。如果你在那里生成视图而不是在某处保存它们,那么一切都将从头开始生成。因此,您只需使用isExpanded参数更改getGroupView方法中的视图(指示符)即可。希望这会有所帮助,你不会像我这样浪费那么多时间。在这种情况下,您不需要onGroupCollapsed和onGroupExpanded方法。
答案 5 :(得分:1)
首先谢谢你的代码。你的回答对我很有帮助。我最近想到了如何解决拉伸问题,以及当groupItem的高度比drawable更大时drawable与bottom / top对齐的问题。我刚刚改变了9patch。此图像也适用于所有屏幕密度(您不必为每个drawable文件夹(hdpi,mdpi,...)创建缩放的9patch)。希望有所帮助;)
答案 6 :(得分:1)
它是可扩展列表视图中右侧指示器图标的实现。 它对我有用。
<ExpandableListView
android:id="@+id/expandlv"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:dividerHeight="2dp"
android:groupIndicator="@drawable/group_indicator"
android:divider="@andorid:color/white"/>
group_indicator.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!--<item android:state_empty="true" android:drawable="@drawable/expanded_icon" />-->
<!--<item android:state_expanded="true" android:drawable="@drawable/collapsed_icon" />-->
<!--<item android:drawable="@drawable/expanded_icon"/>-->
<item android:state_empty="true">
<layer-list>
<item
android:left="0dp"
android:right="3dp"
android:top="20dp"
android:bottom="20dp"
android:drawable="@drawable/expanded_icon">
</item>
</layer-list>
</item>
<item android:state_expanded="true">
<layer-list>
<item
android:left="0dp"
android:right="3dp"
android:top="20dp"
android:bottom="20dp"
android:drawable="@drawable/collapsed_icon">
</item>
</layer-list>
</item>
</selector>
在java源代码中,
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int width = metrics.widthPixels;
expListView.setIndicatorBounds(width - GetDipsFromPixel(30), width - GetDipsFromPixel(6));
expListView.setAdapter(listAdapter);