【问题标题】:Getting ListView drawables and applying it manually获取 ListView 可绘制对象并手动应用它
【发布时间】:2011-09-08 12:01:12
【问题描述】:

我正在尝试将列表项在被选中时的样式应用于视图(在我的情况下为 TextView)

Example

这里应该是橙色的风格。我发现这个外观是由一个可绘制对象定义的。所以我尝试了,所以获取可绘制对象并将其应用到我的视图中

TextView tv = new TextView(this);     

tv.setText("Hello, Android");
tv.setBackgroundDrawable(new ListView(this).getSelector());
setContentView(tv);

但它不起作用。 有人知道怎么做吗?


好的,我想出了如何做到这一点。我发现帽子 ListView 使用了在 android.R.drawable 中定义的 ColorStateList list_selector_background。使用 ResourceBrowser 我知道第四种颜色是选定的可绘制对象,所以我将以下内容添加到我的代码中

StateListDrawable listDrawables= (StateListDrawable)getResources().getDrawable(android.R.drawable.list_selector_background);
listDrawables.selectDrawable(3);
Drawable highlightDrawable = listDrawables.getCurrent();

现在我可以使用 higlightDrawable 设置背景。我不知道是否可以访问 xml 中的 drawable 我还没有尝试过。感谢您的帮助!

【问题讨论】:

    标签: android listview drawable


    【解决方案1】:

    用代码来做会很痛苦。

    您需要实现一个selector 并让android 知道当视图被按下、启用或聚焦时需要使用哪个资源。

    这里是示例example,了解如何实现相同目标。

    【讨论】:

    • 感谢您的回复。我看到这如何帮助定义我想要实现的外观。但是我如何在 ListView drawable 中引用提到的颜色?
    • 你检查了第二个链接底部的例子吗,他改变了按钮中文本的颜色,所以只需将你的 backgrounddrawable 设置为选择器。
    • 我意识到该怎么做。问题是我不知道选择器使用的资源。我怎样才能找出资源ID?
    • 您需要定义选择器使用的资源。例如在这种情况下 它使用名为testcolor1
    • 我知道了。谢谢你的帮助。如果我已经被允许这样做,我会投票赞成你的答案
    猜你喜欢
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    相关资源
    最近更新 更多