将Button设置为类似EditText(但仍然像Button一样)

时间:2011-11-28 22:25:17

标签: android android-edittext android-button

我意识到这有点奇怪,但我有一个按钮需要看起来像一样的EditText但仍然像按钮一样。我的布局XML目前看起来像这样:

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    style="?android:attr/editTextStyle" />

这给了它一个EditText的外观,但是由于阻止了onClick事件被触发,除非按钮具有焦点(有效地使它需要两次点击),所以还会稍微混淆行为。有没有办法保持风格而不改变按钮的行为?

我考虑过制作一个看起来像EditText的9补丁背景,但是有很多不同的Android版本和皮肤,如果可能的话,我宁愿使用系统风格。

3 个答案:

答案 0 :(得分:28)

一个行为类似于按钮的EditText怎么样?

<EditText android:id="@+id/Edit"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:clickable="true"/>

您也可以为它定义OnClickListener。它不会成为焦点。

答案 1 :(得分:1)

如果它绝对需要是一个按钮,你可以在你的按钮上添加一个焦点监听器,当按钮获得焦点时,它会触发onclick。

weirdoButton.setOnFocusChangeListener(new OnFocusChangeListener() {

  @Override
  public void onFocusChange(View view, boolean hasFocus) {
    if(hasFocus) {
      weirdoButton.performClick();
    }
  }
});

缺点是当按钮通过轨迹球或d-pad获得焦点时,点击将会激活。使其在布局文件中无法聚焦:

<Button
    android:id="@+id/weirdoButton"
    android:layout_width="match_parent"
    android:layout_height="50dip"
    android:focusable="false"
    style="?android:attr/editTextStyle" />

答案 2 :(得分:0)

接受的答案确实让你将EditText设为一个按钮,但我发现它有差异;当你长按它时,它可以让你将文字粘贴到它上面,这在UX方面很糟糕。

这是我应用的方式,将其设计为EditText。

<Button
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:textSize="16sp"
    android:focusable="false"
    android:id="@+id/btnAddMember"
    style="?android:attr/editTextStyle"
    android:focusableInTouchMode="false"
    android:clickable="true"
    android:hint="Button Content"/>