如何确定扩展级别的群组指示图标的适当维度?
-
11-10-2019 - |
题
我正在研究一个涉及和扩展的应用程序。我们希望用自己的选择替换组指标。
我为指标创建了一个规格,该规范会根据选择器的状态(扩展或不扩展)显示不同的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,而不是颜色,因为将其设置为颜色似乎是错误的)
这起作用了,除了我们的图标垂直伸展。这是有道理的,因为我们刚刚创建了一个25x25的图标,并希望获得最好的。我正在尝试找出本机图标的尺寸,以便可以匹配它,但这就是我遇到麻烦的地方。
浏览源代码(explablelistview.java),我发现,默认情况下,该类将使用com.android.internal.r.stylable.stylable.stylable.stypandablelistview_groupindicator。所以我有一个ID,但还没有图标。
我很想能够做:
Bitmap image = BitmapFactory.decodeResource(this.getResources(), com.android.internal.R.styleable.ExpandableListView_groupIndicator);
imWidth = image.getWidth();
imHeight = image.getHeight();
但是,正如“内部”所建议的那样,在用户空间中我看不到它。
我还在explableListView.java中找到了getIndicate(),但是它是私人的,所以我也无法做到这一点。
我很陌生地研究平台源代码,我不知道该如何跟踪该图像。谁能帮我吗?
编辑:谢谢Commonsware。为其他人看剩下的东西:
Android:drawable/extander_group在/frameworks/base/core/res/res/res/drawable/expander/expander_group.xml中定义。
expander_group.xml提到它使用 @drawable/expander_ic_maximized和 @drawable/expander_ic_minimized。可以在/frameworks/base/core/res/res/res/expander_ic_maximized.9.9.png和/frameworks/base/base/core/core/core/res/res/res/res/res/expander/expander/expander/expander_minimized.9.png中找到那些可绘制的物品。这样。 “ 9”解释了为什么默认图标没有失真问题 - 它们是Patch -9图形。图标的密度不平衡版本为34px x 38px。
解决方案
base.git
' core/res/res/values/styles.xml
定义 com.android.internal.R.styleable.ExpandableListView_groupIndicator
作为 android:drawable/expander_group
. 。这是一个 StateListDrawable
在您的SDK的资源副本中。基于密度,基础的PNG具有不同大小的不同尺寸。