在 Android 视图上,我想要一些可点击的文本,其工作方式类似于网页超链接。
它看起来就像普通文本(没有按钮边框),但是当被触摸时,我希望文本颜色发生变化,并且我可能还希望它的背景变成相反的颜色。
使用具有透明背景的按钮还是 TextView 更好。我什么时候应该选择一个而不是另一个?
非常感谢
您可以使用 Button 并制作selector
背景和文本。
文本选择器.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="#0000ff"/> <!-- pressed -->
<item android:state_focused="true" android:color="@android:color/white"/> <!-- focused -->
<item android:color="@android:color/white"/> <!-- default -->
</selector>
按钮选择器.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="@android:color/white"/> <!-- pressed -->
<item android:state_focused="true" android:color="#0000ff"/> <!-- focused -->
<item android:color="#0000ff"/> <!-- default -->
</selector>
在你的布局 xml
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/buttonselector"
android:text="some text"
android:textColor="@drawable/textselector" />
hotveryspicy 给出了一个很好的答案,并真正为我指明了正确的方向。谢谢,但我在回复中遇到了一些问题。
我想要的是一个按钮,在其正常状态下具有黑色文本和灰色背景,在其选定状态下具有白色文本的红色背景。像这样:
使用 hotveryspicy 的建议,我遇到了以下问题:
尝试将可绘制对象分配给 textColor 时出现错误。有趣,但我看到其他关于做这种事情的参考。也许 XML 验证现在更严格了?
如果我没有在 buttonselector.xml 中定义一个 android:drawable,我也会得到一个错误。似乎您可以在选择器中设置可绘制对象的颜色,您需要实际创建可绘制对象。
无论如何,这就是我所做的:
我创建了一个颜色状态资源,如下所示:
文件:res/colors/link_button.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="#ffffff"/>
<item android:color="#000000"/>
</selector>
然后是以下 3 个可绘制对象:
我的按钮背景使用Shape Drawable处于正常状态:文件:res/drawable/link_button.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#cccccc"/>
</shape>
我的按钮背景处于选中状态,也是一个Shape Drawable:文件:res/drawable/link_button_selected.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#ff0000"/>
</shape>
然后我创建了一个可在 2 个形状之间进行选择的可绘制选择器。文件:res/drawable/link_button_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/link_button_selected"
android:state_pressed="true" />
<item
android:drawable="@drawable/link_button" />
</selector>
然后在我的布局中,我的按钮如下所示:
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="Button"
android:textColor="@color/link_button"
android:background="@drawable/link_button_selector"
/>
感谢大家的帮助!
添加字符串喜欢
<string name="link">'<a href="http://www.google.com" rel="nofollow">Google</a>'</string>
在您的布局中
<TextView
android:id="@+id/link"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:autoLink="all"
android:linksClickable="true"
android:text="@string/link" />
为了谷歌的缘故:
与其让按钮看起来像一个链接,为什么不让 TextView 可点击呢?这实际上是我想要并为我使用而工作的东西。我希望文本可以点击以产生意图。
TextView.setOnClickListener(new View.OnClickListener()