在我的Android App中,我使用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扩展ImageView enter code here
public void setIsSelected(boolean bSelected)
{
if (m_bSelected = bSelected)
setBackgroundColor(SELECTED_BACKCOLOR);
else setBackgroundDrawable(m_background);
}
答案 0 :(得分: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>
正如你所看到的,这个解决方案使用的是drawables而不是color,但是,如果你的图标是固定的大小,这是一个微不足道的差异(也许类似的东西可以用颜色完成 - 你必须研究它)。这种方法的缺点是你现在已经硬编码了背景颜色。但至少这些定义在您的资源中。
您可以通过在图标定义中引用Android样式来构建上述内容,如下所示:
<JIconImageView
android:id=...
android:background="@drawable/jicon_background_selector />