Android Button vs TextView - 类似超链接的行为

awi*_*bra 5 java android

在Android视图上,我希望有一些可点击的文本与网页超链接类似.

它看起来就像普通文本(没有按钮边框),但是当触摸时,我希望文本颜色改变,我可能也希望它的背景变成反色.

使用具有透明背景的Button或TextView是否更好?我什么时候应该选择其中一个?

非常感谢

awi*_*bra 2

hotveryspicy 给出了很好的答案,确实为我指明了正确的方向。谢谢您,但我对您的回复有一些疑问。

我想要的是一个在正常状态下具有黑色文本和灰色背景的按钮,在选定状态下具有红色背景和白色文本的按钮。像这样:

在此输入图像描述

使用 hotveryspicy 的建议我遇到了以下问题:

  1. 尝试将可绘制对象分配给 textColor 时出现错误。很有趣,但我看到其他关于做这类事情的参考文献。也许 XML 验证现在更严格了?

  2. 如果我没有在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>
Run Code Online (Sandbox Code Playgroud)

然后是以下 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>
Run Code Online (Sandbox Code Playgroud)

我的按钮背景处于选定状态,也是一个可绘制形状:文件: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>
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个可绘制选择器,可以在这两个形状之间进行选择。文件: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>
Run Code Online (Sandbox Code Playgroud)

然后在我的布局中我的按钮如下所示:

<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"
    />
Run Code Online (Sandbox Code Playgroud)

感谢大家的帮助!