4

私はExpandableListView自分のアプリで使用していますが、ユーザーからの不満の1つは、Listアイテムが展開されると、子アイテムが終了し、次のグループアイテムが開始する場所を視覚的に区別するのが難しいということです。

Listそこで、子アイテムの背景を別の色合いに変更したいと思います。

私がこれまでに行った残忍な試みは、子Viewアイテム内の要素の背景色とテキストを直接変更することに基づいていましたが、それはホバーとハイライトの喪失につながります。だから私の質問は-上記を達成するための良い戦略は何ですか?

試しましたが、子アイテムの背景を変更した場合、フォーカス/有効化などのすべての組み合わせを追加する必要があります。すべてを実行しようとすると、1つのものを上書きしようとしますstylesselectorsselectors

親を継承し、フォーカスされていない有効な子アイテムのみをstyle設定し、他のアイテムを保持する方法はありますか?backgroundstyles

4

3 に答える 3

5

上手。これが私のために働いたものです:

  1. res/drawableプロジェクトのディレクトリにlist_background.xmlを作成します
  2. 子アイテムの最上位レイアウトの背景値を上のドローアブルに設定します。この時点で頭を悩ませている場合-拡張可能リストの子ビューを作成するときに使用されるxmlレイアウトファイルを参照していますExpandableListAdapter#getChildView

これが完全なドローアブルファイルです

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:state_enabled="true"
        android:drawable="@drawable/list_highlight_active" />
    <item android:state_enabled="true" android:state_selected="true" 
        android:state_window_focused="true"
    android:drawable="@drawable/list_highlight_inactive" />
    <item android:state_enabled="true" android:state_window_focused="true" 
        android:drawable="@color/item_body" />
    <item android:drawable="@color/item_body" />
</selector>

プロジェクトのドローアブルディレクトリにコピーlist_highlight_active.xmlしてlist_highlight_inactive.xmlからコピーする必要がありました。ただの灰色の陰です/android-sdk-windows-1.6_r1/platforms/android-1.5/data/res/drawable@color/item_body

于 2009-12-15T19:02:48.240 に答える
0

セレクターフープを飛び越えずに背景色を「ある程度」設定する方法を発見しました。

お気づきのとおり、背景を単色に設定すると、新しい背景色によってセレクターのハイライトが不明瞭になるため、セレクターのハイライトが消去されます。Droidinには、通常の解決策があります。必要な正確な色を独自の背景セレクターに提供します。控えめに言っても苦痛です。

しかし、必要なのが少し色の違いだけである場合は、より簡単な方法があります。アルファブレンドです。背景色をアルファ値で設定します。たとえば、背景を「#BBFFFFFF」に設定します。最初の2桁は、アルファレベルを示します。すべてがブレンドされるため、背景は真っ白ではなく、選択範囲のハイライトは通常の明るいオレンジ色にはなりませんが、子は別の色になり、ハイライトは引き続き機能します。ウィンウィン。

于 2010-04-06T02:56:49.890 に答える
0

私は同様の解決策を探しています。アダプタメソッドgetChieldViewで親ビューを取得してみてください。この親はあなたのすべての子守唄の親の見方だと思います。そして、リソースからこの親に背景を設定します。私はそれをこのようにします:

@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild,  View convertView, ViewGroup parent) {
    if (convertView == null) {
        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.fa_report_sub_item, null);
        View parentGroup=(View) convertView.getParent();
        parentGroup.setBackgroundResource(R.drawable.fa_summ_report_main_item);
    }
于 2014-03-13T12:52:23.250 に答える