Стиль кнопки, чтобы выглядеть как EditText (но по-прежнему вести себя как кнопка) - PullRequest
7 голосов
/ 29 ноября 2011

Я понимаю, что это довольно странно, но у меня есть кнопка, которая должна выглядеть как EditText, но при этом вести себя как кнопка.Мой макет XML в настоящее время выглядит следующим образом:

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

Это придает ему вид EditText, но также немного портит поведение, предотвращая запуск события onClick, если кнопка не имеет фокуса (эффективночтобы сделать это нужно два клика).Есть ли способ сохранить стиль без изменения поведения кнопки?

Я думал о том, чтобы просто сделать фон из девяти патчей, который выглядит как EditText, но с таким большим количеством различных версий и оболочек для Android, я былучше использовать стиль системы, если это возможно.

Ответы [ 3 ]

28 голосов
/ 29 ноября 2011

Как насчет 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 голос
/ 29 ноября 2011

Если это просто кнопка, вы можете добавить слушателя фокуса к вашей кнопке, который запускает щелчок, когда кнопка получает фокус.

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" />
0 голосов
/ 05 июля 2016

Принятый ответ позволяет стилизовать 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"/>
...