質問

私は使用しています ExpandableListView 私のアプリと私がユーザーから得た苦情の1つでは、 List アイテムが拡張されているのは、子アイテムが終了し、次のグループアイテムが始まる場所を視覚的に区別することは困難です。

だから私は子供の背景を変えたい List 別の色合いのアイテム。

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

私は試した stylesselectors しかし、私が本当に私を悩ませているのは、私が子供のアイテムの背景を変更した場合、私は追加する必要があります selectors フォーカス/有効化などのすべての組み合わせについて。私がそれをやろうとしているときに、単一のことを上書きしようとしています。

親を継承する方法はありますか style とセット background 焦点を絞った、有効化された子どものアイテムのみが他の人と styles 保持しましたか?

役に立ちましたか?

解決

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

  1. プロジェクトでList_background.xmlを作成します res/drawable ディレクトリ
  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.xmllist_highlight_inactive.xml から /android-sdk-windows-1.6_r1/platforms/android-1.5/data/res/drawable 私のプロジェクトの描画可能なディレクトリに。 @color/item_body 灰色の色合いです

他のヒント

セレクターフープを飛び越えることなく、「やや」背景色を設定する方法を発見しました。

ご存知のように、新しい背景色がそれを曖昧にするため、背景をソリッドカラーに設定するセレクターのハイライトを一掃します。 Droidinには通常のソリューションがあります。独自のバックグラウンドセレクターに必要な色を提供します。控えめに言っても苦痛です。

しかし、あなたが望むのがちょっとした色差だけであるなら、より簡単な方法があります:アルファブレンド。アルファ値で背景色を設定します。たとえば、背景を「#bbffffff」に設定します。最初の2桁は、アルファレベルを示します。それはすべてブレンドされるので、背景は純粋な白ではなく、選択のハイライトは通常の明るいオレンジではありませんが、子供たちは別の色になり、ハイライトはまだ機能します。 win-win。

同様のソリューションを検索します。 Adapterメソッド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);
    }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top