android - 如何确定 ExpandableListView groupIndicator 图标的适当尺寸?

标签 android expandablelistview

我正在开发一个涉及 ExpandableListView 的应用程序。我们希望用我们自己选择的一个替换 groupIndicator。

我为指标创建了一个规范,它会根据选择器的状态(展开或未展开)显示不同的 png

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/arrow_down" android:state_expanded="true"/>
    <item android:drawable="@drawable/arrow_right"/>    
</selector>

然后我设置我的布局 xml 以使用:

(请注意,childDivider 是一个像素高的 png 而不是颜色,因为将其设置为颜色似乎会被窃听)

这是有效的,除了我们的图标是垂直拉伸(stretch)的。这是有道理的,因为我们刚刚创建了一个 25x25 的图标,并希望一切顺利。我试图弄清楚 native 图标的尺寸以便我可以匹配它,但这正是我遇到麻烦的地方。

挖掘源代码 (ExpandableListView.java) 我发现,默认情况下,该类将使用 com.android.internal.R.styleable.ExpandableListView_groupIndicator。所以我有一个 ID,但还没有图标。

我希望能够做到:

Bitmap image = BitmapFactory.decodeResource(this.getResources(), com.android.internal.R.styleable.ExpandableListView_groupIndicator);
        imWidth = image.getWidth();
        imHeight = image.getHeight();

但正如“内部”所暗示的那样,它在用户空间中对我来说是不可见的。

我还在 ExpandableListView.java 中找到了 getIndicate(),但它是私有(private)的,所以我也无法访问它。

我对深入了解平台源代码还很陌生,我不知道还有什么方法可以找到该图像。谁能帮我吗?

编辑:感谢 CommonsWare。为其他人拼出其余部分:

android:drawable/expander_group 定义在/frameworks/base/core/res/res/drawable/expander_group.xml.
expander_group.xml 提到它使用@drawable/expander_ic_maximized 和@drawable/expander_ic_minimized。 这些可绘制对象可以在/frameworks/base/core/res/res/drawable/expander_ic_maximized.9.png 和/frameworks/base/core/res/res/drawable/expander_ic_minimized.9.png 以及特定密度的其他地方找到等等。 “9”解释了为什么默认图标没有失真问题——它们是 patch-9 图形。图标的密度不可知版本为 34 像素 x 38 像素。

最佳答案

base.gitcore/res/res/values/styles.xml定义了com.android.internal.R.styleable.ExpandableListView_groupIndicator 作为 android:drawable/expander_group。这是您的 SDK 资源副本中的 StateListDrawable。底层 PNG 具有不同的大小,具体取决于密度。

关于android - 如何确定 ExpandableListView groupIndicator 图标的适当尺寸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4686840/

相关文章:

Android 手势指示

android - token 不是来自此身份池的受支持提供商 Amazon Mobile Hub Android

Android ExpandableListView 分隔符是不可见的

android - 如何将页脚 View 添加到 ExpandableListActivity 中的子列表?

android - 如何在可扩展 ListView 中获取子级和父级的ID?

java - 添加日期选择器后时间选择器停止工作

java - CookieHandler 还是 org.apache.http.cookie 哪种方式更好?

android - 当我的 View 滚动出可见区域时如何收听

Android ExpandableListView 隐藏组

Android 可扩展列表子布局未正确展开?