5

在 Android 视图上,我想要一些可点击的文本,其工作方式类似于网页超链接。

它看起来就像普通文本(没有按钮边框),但是当被触摸时,我希望文本颜色发生变化,并且我可能还希望它的背景变成相反的颜色。

使用具有透明背景的按钮还是 TextView 更好。我什么时候应该选择一个而不是另一个?

非常感谢

4

5 回答 5

3

您可以使用 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" />
于 2012-06-12T03:54:04.443 回答
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>

然后是以下 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"
    />

感谢大家的帮助!

于 2012-06-14T20:17:54.897 回答
1

添加字符串喜欢

  <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" />  
于 2012-06-12T03:54:20.860 回答
1

您可以使用 linkify 类链接您的文本。用几个例子来看看这个和这个

于 2012-06-12T04:05:49.583 回答
1

为了谷歌的缘故:

与其让按钮看起来像一个链接,为什么不让 TextView 可点击呢?这实际上是我想要并为我使用而工作的东西。我希望文本可以点击以产生意图。

TextView.setOnClickListener(new View.OnClickListener()
于 2013-05-22T17:13:20.847 回答