2011-11-28 13 views
7

Zdaję sobie sprawę, że to dziwna rzecz do zrobienia, ale mam przycisk, który musi wyglądać jak , wyglądać na jak tekst EditText, ale nadal zachowywać się jak przycisk. Mój układ XML obecnie wygląda następująco:Styl przycisku wyglądającego jak EditText (ale nadal zachowującego się jak przycisk)

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

To nadaje mu wygląd z EditText, ale także bałagan z zachowaniem trochę zapobiegając zdarzenie onClick z wyrzuceniu chyba że przycisk ma koncentrować się (skutecznie czyniąc go wymaga dwóch kliknięć). Czy istnieje sposób na zachowanie stylu bez zmiany zachowania przycisku?

Myślałem o zrobieniu dziewięciu łatek, które wyglądają jak EditText, ale przy tak wielu różnych wersjach Androida i skórkach wolałbym używać stylu systemowego, jeśli to możliwe.

Odpowiedz

28

Co powiesz na EditText, który zachowuje się jak przycisk?

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

Możesz również zdefiniować OnClickListener. I nie skupi się.

+1

Pójdę po to, jeśli to ja. – dmon

+1

Dzięki, miał tę samą potrzebę ... to, co nazywam "poza pole". – Shahar

1

Jeśli koniecznie musi to być przycisk, możesz dodać detektor aktywności do przycisku, który uruchamia kliknięcie, gdy przycisk otrzymuje fokus.

weirdoButton.setOnFocusChangeListener(new OnFocusChangeListener() { 

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

Wadą jest to, że kliknięcie zostanie uruchomione, gdy przycisk otrzyma ostrość za pomocą kulki lub d-padka. Spraw, aby w pliku układu nie można było ogniskować:

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

Zaakceptowana odpowiedź pozwala na edycję EditText jako przycisku, ale znalazłem w nim rozbieżność; po długim naciśnięciu, pozwala wkleić do niego tekst, który jest straszny pod względem UX.

To jest to, co zastosowałem zamiast tego, aby nadać mu styl 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"/> 
Powiązane problemy