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

时间:2012-06-12 03:50:12

标签: java android

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

它看起来就像普通文本(没有按钮边框),但触摸后,我想要更改文本颜色,我可能还希望它的背景变成反色。

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

非常感谢

5 个答案:

答案 0 :(得分:3)

您可以使用Button并将selector作为背景和文字。

textselector.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>

buttonselector.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" />

答案 1 :(得分:2)

hotveryspicy给出了一个很好的答案,真正指出了我正确的方向。谢谢,但我对回复有一些问题。

我想要的是一个按钮,其正常状态为黑色文本和灰色背景,红色背景为白色文本,处于选定状态。像这样:

enter image description here

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

  1. 尝试将drawable分配给textColor时出错。有趣但我看到其他参考做这种事情。也许XML验证现在更严格了?

  2. 如果我没有在buttonselector.xml中定义android:drawable,我也会收到错误。看来你可以在选择器eiter中设置drawable的颜色,你需要实际创建一个drawable。

  3. 无论如何这就是我所做的:

    我创建了一个Color State Resource,如下所示:

    文件: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个drawables:

    我的按钮背景处于正常状态,使用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>
    

    然后我创建了一个Drawable Selector,在两个形状之间进行选择。 文件: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"
        />
    

    感谢大家的帮助!

答案 2 :(得分: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" />  

答案 3 :(得分:1)

您可以使用linkify类链接文本。 请查看thisthis with few examples

答案 4 :(得分:1)

出于Google的考虑:

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

TextView.setOnClickListener(new View.OnClickListener()