更改可扩展列表用于导航的android:change指示器图标和大小

6

我正在制作一个应用程序,其中需要使用给定的图像来构建可扩展列表。实际上,我说的是指示器图标及其大小,它们用于导航路径。有人可以告诉我如何更改那个图像吗?任何帮助将不胜感激。

6个回答

35
你可以使用以下代码:
<ExpandableListView android:id="@+id/android:list"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:layout_marginTop="10dp"
    android:groupIndicator="@drawable/settings_selector" />

...其中setting_selector为:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:drawable="@drawable/up_arrow" 
         android:state_empty="true" />
   <item android:drawable="@drawable/down_arrow" 
         android:state_expanded="true" />
</selector>

10
我尝试使用类似于您的选择器,但它不起作用 - 什么也没有出现。我不得不删除:android:state_empty="true",并将那一行移到另一行下面。我使用的是ICS系统。 - aleb
2
完美。但状态描述有点误导。state_empty 不仅表示为空,也表示已关闭。 - Leo
我也尝试了你的选择器,但它没有起作用。我将state_empty=true更改为state_expanded=false,然后它就起作用了。Google文档没有描述state_empty与“关闭”状态有任何关系。我提交了一个编辑来反映这一点。 - Bob Liberatore
2
我认为这段代码存在错误。<item android:drawable="@drawable/up_arrow" android:state_empty="true" /> 应该改为 android:state_expanded=false - Yasin Yaqoobi
如果down_arrow/up_arrow是图像(而不是xml,即形状/层列表),不要忘记缩放图像(即使用层列表,设置项目宽度和高度)。否则,什么也不会显示。 - MD TAREQ HASSAN
我需要将箭头向下更改为展开false,将箭头向上更改为展开true。android:state_empty对我没有起作用。 - Jcorretjer

16
<ExpandableListView android:id="@+id/android:list"
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent"
       android:layout_marginTop="10dp"
       android:groupIndicator="@drawable/settings_selector"
   />

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:drawable="@drawable/up_arrow" android:state_expanded="true"/>
   <item android:drawable="@drawable/down_arrow" android:state_expanded="false"/>
</selector>
他忘记放了。
<item android:drawable="@drawable/down_arrow" android:state_expanded="false"/>

对我来说,android:state_empty没有起作用。


7

这是设置组指示器的有效方法

<selector xmlns:android="http://schemas.android.com/apk/res/android" >

<item android:state_empty="true">
    <layer-list>
        <item
            android:left="20dp"
            android:right="-30dp"
            android:top="120dp"
            android:bottom="10dp"
            android:drawable="@drawable/panier_plus">
        </item>
    </layer-list>
</item>

<item android:state_expanded="true">
    <layer-list>
        <item
            android:left="20dp"
            android:right="-30dp"
            android:top="120dp"
            android:bottom="10dp"
            android:drawable="@drawable/panier_minus"
             >
        </item>
    </layer-list>
</item>


1

如果您指的是展开/折叠组图标,则

Drawable d = getResources().getDrawable(R.drawable.settings_selector);
//position it in the group layout by setting the bounds
//params are left and right bounds
myExpandableList.setIndicatorBounds(345,375);

myExpandableList.setGroupIndicator(d);

我对指示器的大小不太确定,设置指示器边界可以影响指示器的宽度但不影响高度。

您可以将可绘制设置为 null 来移除指示器,然后在 ExpandableAdapter 的 getGroupView() 中填充一个包含图像视图的自定义布局。

public View getGroupView(int groupPosition, boolean isExpanded, View convertView,     ViewGroup parent) {
    View convertView = null;
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    convertView = inflater.inflate(R.layout.customLayout, null);

    return convertView;
}

虽然这种方法需要额外的工作来让指示器在组被展开时改变,比如监听器告诉我们特定的组是否被展开,并相应地改变图像。


triggs,我想改变指示器图像的大小。你能帮我吗? - user1025050
不太确定大小,您可以始终为组使用自定义视图。在ExpandableAdapter中,在getGroupView方法中返回自定义视图。我会编辑我的答案。 - triggs
但我仍然无法设置指示器的大小。 - user881928
自定义视图不会使用内置的指示器,您需要创建自己的指示器,这样您就可以更好地控制UI元素。您可以在自定义布局中放置一个ImageView并在那里指定其大小。我不知道改变大小的简单方法,也许其他人有比自定义视图更好的想法。 - triggs

0
尝试使用这个:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:drawable="@drawable/ic_up_arrow" android:state_expanded="true" />
  <item android:drawable="@drawable/ic_down_arrow" android:state_pressed="false"/>
</selector>

0

没错,检查一下我的应用程序

<ExpandableListView
            android:id="@+id/expandableListView"
            android:layout_height="match_parent"
            android:layout_width="match_parent"
            android:indicatorLeft="?android:attr/expandableListPreferredItemIndicatorLeft"
            android:divider="@android:color/darker_gray"
            android:groupIndicator="@drawable/select_next"
            android:dividerHeight="0.5dp" />

使用以下方式进行操作...

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
       <item android:drawable="@drawable/ic_add_black_24dp"
             android:state_empty="true" />
       <item android:drawable="@drawable/ic_remove_black_24dp"
             android:state_expanded="false" />
    </selector>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接