2

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は、色ではなく1ピクセルの高さのpngであることに注意してください。これは、色に設定するとバグがあるように見えるためです)

これは、アイコンが垂直方向に引き伸ばされていることを除いて、機能します。25x25のアイコンを作成し、最高のものを期待していたので、それは理にかなっています。ネイティブアイコンの寸法を一致させて一致させようとしていますが、そこで問題が発生します。

ソースコード(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()がありますが、これはプライベートであるため、どちらにもアクセスできません。

私はプラットフォームのソースコードに飛び込むのはまったく初めてで、その画像を追跡する他の方法がわかりません。誰かが私を助けることができますか?

編集: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」は、デフォルトのアイコンに歪みの問題がない理由を説明しています。パッチ9のグラフィックです。アイコンの密度に依存しないバージョンは、34pxx38pxです。

4

1 に答える 1

8

base.gitはとしてcore/res/res/values/styles.xml定義されます。これは、SDKのリソースのコピーに含まれています。基になるPNGは、密度に基づいてさまざまなサイズになっています。com.android.internal.R.styleable.ExpandableListView_groupIndicatorandroid:drawable/expander_groupStateListDrawable

于 2011-01-14T01:44:12.313 に答える