0

私の Android アプリでは、AlertBox を使用してアイコンを選択しています。これは、カスタム アダプターを使用して行います。古い選択されたアイコンの背景色を変更する ImageView からのクラスがあります。

アダプターで変換されたビューの背景色をリセットする必要があることを期待して、すべて正常に機能します。getBackGroundDrawable は常に null を返しますか? 何か案が ???

public View getView(int position, View convertView, ViewGroup parent)
{
    JIconImageView imageView = ((convertView == null) ? new JIconImageView(m_context) : (JIconImageView)convertView);

    imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
    imageView.setPadding(2, 2, 2, 2);
    imageView.setIsSelected(m_selected == position);
    imageView.setImageResource(JEntryIconHelper.getIconFromIndex(position));

    return imageView;
}

そして public final クラスから JIconImageView は ImageView を拡張しますenter code here

public void setIsSelected(boolean bSelected)
{
    if (m_bSelected = bSelected)
        setBackgroundColor(SELECTED_BACKCOLOR);
    else setBackgroundDrawable(m_background);
}
4

1 に答える 1

0

私の知る限り、現在のテーマの背景色を取得する簡単な方法はありません。

必要なことを行うための信頼できる方法の 1 つは、getView 中にメンバー変数に元の背景色を保存することです (または、使い捨ての JIconImageView を作成することで、以前にこれを行うことができます)。たとえば、アダプターをバインドする時点で、次のようにします。

JIconImageView imageView = new JIconImageView (...);
Drawable origBackground = imageView.getBackground();
imageView = null;

次に、setIsSelected() で imageView.getBackground() を参照します。


もう 1 つの方法は、xml セレクターを使用することです。これは「drawables」フォルダーに入れられます。

<selector 
  xmlns:android="http://schemas.android.com/apk/res/android">

  <item 
    android:state_selected="true"
    android:drawable="@drawable/your_selected_drawable" />

  <item 
    android:drawable="@drawable/your_unselected_drawable" />
</selector>

ご覧のとおり、このソリューションは色ではなくドローアブルを使用しますが、アイコンが固定サイズの場合、それは些細な違いです (色で同様のことができる可能性があります。調査する必要があります)。この方法の欠点は、背景色をハードコーディングしていることです。ただし、少なくとも定義はリソースにあります。


アイコン定義でAndroidスタイルを参照することで、上記に基づいて構築できます。次のようになります。

<JIconImageView
  android:id=...
  android:background="@drawable/jicon_background_selector />
于 2013-11-15T15:11:33.723 に答える