Khotmanish,
我不知道你的意思通过最有效办法。有很多方法非常快速,但它往往取决于你事先知道的事情和你不知道的事情。还必须了解的是,尽管流行的神话,动态视图属性被严重误解,但高效。谷歌的人员在UI开发方面做得非常出色。
如果你知道它的时间提前,你可以简单地创建一个StateListDrawable为每个视图,并将其应用到每个你通过你的适配器中运行。
要构建StateListDrawable,创建一个:
StateListDrawable _drawStates;
然后,对于每个状态,添加您需要的绘制:
_drawStates.add(new int[] {android.R.attr.state_pressed}, _newImage);
这是你在getView以下行一样简单( )方法:
v.setBackgroundDrawable(_drawStates);
或者,您可以动态更改背景根据选择。这可以在OnListItemClick()
中完成。你看,OnListItemClick()
会给你点击的确切视图。一旦你有了这个,你会发现它的id
孩子,并改变其性质和invalidate()
它。我使用这个技巧很多。为我节省了大量的内存,但我没有做任何真正的处理器密集型任务。几乎没有任何处理,你可以在这里改变几乎所有的房产这里有一个例子:
@Override protected void onListItemClick(final ListView inList, final View v, final int atPos, final long rowID)
{//Get the Child, set the properties
ImageView _img = (ImageView)(v.findViewById(R.id.app_package));
_img.setBackgroundColor(myClickedColor);
_img.invalidate(); // <---- BEST Option
// ... OR ...
v.invalidate(); // <---- 2nd Best Option
// ... OR ...
inList.invalidate(); // <---- Last resort or specialized implementation
}
重要的是要注意,这样做动态有一些注意事项,当涉及到背景颜色是很重要的。你必须从点击的视图中获取子...不是ListView。其次,当改变背景颜色时,你实际上正在改变背景Drawables。这意味着所有其他“有状态”属性都会消失,并且您必须手动将其更改回来(如果您希望以此开始)。现在
,更受欢迎,但少了几分灵活的方法是建立你StateListDrawable XML格式。有许多资源可以学习如何在Android开发者网站上执行此操作。
希望这有助于 FuzzicalLogic
”AFAIK我们不能在选择器中应用样式,有没有更好的方法来处理这个问题而不是处理java代码?如果你不能在选择器中做到这一点,除Java之外还可以做什么?也许你可以重写默认选择器引用的样式属性? – nmr 2012-03-15 03:21:56
样式可用于更改背景颜色/ drawable.It无助于更改字体大小。我也需要为每个子视图指定选择器吗?在java代码中,在getView()中。 – 2012-03-16 03:22:50