如何使TextView看起来像Button?

时间:2011-04-29 17:43:02

标签: android user-interface

我在Android中有一个ListActivity。每行只是一个用一些资源启动另一个活动的项目。默认情况下,这当然是TextView。

我想(和“我想要”,我的意思是“客户坚持”)TextView看起来像一个按钮。如果我实际上使它们成为按钮,则默认列表单击处理程序不再起作用 - 即使它们不可聚焦 - 所以我必须编写代码来手动膨胀包含按钮的视图并设置单击处理程序。

是否有某种方法可以让TextView看起来像一个Button而没有任何Button的行为?

4 个答案:

答案 0 :(得分:10)

您应该只能在布局XML文件中设置样式。

有关内置平台样式的列表,请参阅http://developer.android.com/reference/android/R.style.html。不确定它的效果如何,但它相当容易做到。试试这个:

<TextView android:layout_height="wrap_content" style="@android:style/Widget.Button" android:layout_marginRight="5sp" android:text="" android:layout_width="fill_parent"></TextView>

编辑:问题是默认按钮样式设置android:clickable属性。尝试添加android:clickable属性并将其设置为false:

<TextView android:layout_height="wrap_content" style="@android:style/Widget.Button" android:layout_marginRight="5sp" android:text="" android:clickable="false" android:layout_width="fill_parent"></TextView>

答案 1 :(得分:6)

您应该能够创建Drawable按钮,并使用TextView上的setBackgroundDrawable()

或者,您可以使用android:background XML属性。

答案 2 :(得分:1)

从我的项目中获取完整的布局:

<?xml version="1.0" encoding="utf-8"?>

<!-- Solution 1: New Button appearance -->
<!--TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    style="@android:style/Widget.DeviceDefault.Button"
    android:textAllCaps="false"
    android:focusable="false"
    android:clickable="false" /-->

<!-- Solution 2: Old Button appearance -->
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:background="@android:drawable/btn_default"
      android:gravity="center_vertical|center_horizontal" />

没有clickable = false onItemClick()不会在ListView / GridView等中触发。

没有focusable = false按下TextView按钮时没有按下按钮效果。

答案 3 :(得分:0)

在XML textview中:

android:clickable="true"

并在java文件集中:

TextView youtTextView=(TextView)findViewById(R.id.yourTxt);

youtTextView.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {
       //code your button click action/event
    }
});