Android -ExpandAbleListViewチャイルドアイテムの背景を変更します
-
19-09-2019 - |
質問
私は使用しています ExpandableListView
私のアプリと私がユーザーから得た苦情の1つでは、 List
アイテムが拡張されているのは、子アイテムが終了し、次のグループアイテムが始まる場所を視覚的に区別することは困難です。
だから私は子供の背景を変えたい List
別の色合いのアイテム。
私がこれまでに作った残忍な試みは、子供の内部の要素の背景色とテキストを直接変えることに基づいていました View
アイテムですが、それはホーバーとハイライトの損失につながります。だから私の質問は - 上記を達成するための良い戦略は何ですか?
私は試した styles
と selectors
しかし、私が本当に私を悩ませているのは、私が子供のアイテムの背景を変更した場合、私は追加する必要があります selectors
フォーカス/有効化などのすべての組み合わせについて。私がそれをやろうとしているときに、単一のことを上書きしようとしています。
親を継承する方法はありますか style
とセット background
焦点を絞った、有効化された子どものアイテムのみが他の人と styles
保持しましたか?
解決
良い。これが私のために働いたものです:
- プロジェクトでList_background.xmlを作成します
res/drawable
ディレクトリ - 子アイテムのトップレベルのレイアウトの背景値を上記の描画可能に設定します。この時点で頭をかき回している場合 - 拡張可能なリストの子ビューを作成するときに使用される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
灰色の色合いです
他のヒント
セレクターフープを飛び越えることなく、「やや」背景色を設定する方法を発見しました。
ご存知のように、新しい背景色がそれを曖昧にするため、背景をソリッドカラーに設定するセレクターのハイライトを一掃します。 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);
}