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;
}

并从公共最终类 JIconImageView 扩展 ImageViewenter code here

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

1 回答 1

0

据我所知,没有简单的方法来获取当前的主题背景颜色。

一种可靠的方法是在 getView 期间将原始背景颜色保存在成员变量中(或者您可以更早地通过创建一次性 JIconImageView 来执行此操作)。例如,在您绑定适配器的位置:

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

然后,在 setIsSelected() 中引用 imageView.getBackground()。


另一种方法是使用 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 回答