2011-12-23 17 views
19

Mam niestandardowy widok Androida, który rozszerza "Przycisk" i działa jak wielopoziomowa tarcza - po naciśnięciu wyświetla serię dialogów podobnych do pokrętła, które pozwalają użytkownikowi zawęzić ich wybór. W takim przypadku użytkownik może wybrać dzień, następnie godzinę, a następnie minutę (w odstępach 5-minutowych), aby uzyskać pobranie. Gdy okno dialogowe nie jest aktywne, na przycisku wyświetlany jest opis tekstowy bieżącego wyboru.Android: Rysowanie przycisku jako pokrętła

Chcę wizualnie wskazać, że użytkownik może zmienić wybór, naciskając przycisk i sądzę, że wygląd przędzarki jest dokładnie tym, czego potrzebuję. Chcę, aby wygląd był taki sam jak innych spinnerów na urządzeniu i mógłbym łatwo zmienić tekst na przycisku, ale nie jestem pewien, jak to osiągnąć bez bycia kludgy. Jak powinienem wyświetlać przycisk jako ikonę podobną do pokrętła, która jest zgodna z innymi spinnerami na urządzeniu?

Odpowiedz

7

Znalazłem rozwiązanie mojego pytania. W konstruktorze dla mojego przycisku ustawi zasób tła do rysowania jako "btn_dropdown".

public DateAndTimePicker(Context context) { 
    super(context); 
    this.setBackgroundResource(android.R.drawable.btn_dropdown); 
} 

To wygląda tak samo jak przyciski spinner, żaden z zachowaniem przycisk uległa zmianie, a centra przycisk tekstowe poprawnie.

1

Możesz zdefiniować atrybut android: background na swoim przycisku, aby użyć wyciągu, który wygląda jak spinner. Zrobiłem to poprzez stworzenie obrazu 9-patch do wirówki, umieszczając ją w moim RES/folderu rozciągliwej, a następnie dodanie stylu do mojego niestandardowego przycisku wirowania:

<style name="DialogSpinner"> 
    <item name="android:background">@drawable/dlg_spinner_background</item> 
    <item name="android:textColor">#919090</item> 
    <item name="android:layout_height">wrap_content</item> 
    <item name="android:layout_width">wrap_content</item> 
    <item name="android:layout_marginTop">2px</item> 
    <item name="android:layout_marginBottom">2px</item> 
</style> 

Dla przycisku, dodać atrybut stylu do układ XML twojego układu:

<Button 
    android:id="@+id/okButton" 
    style="@style/DialogSpinner" 
    android:textColor="#a6a2a2" 
    android:text="something" 
/> 
3

Ten układ XML sprawia, że ​​przycisk wygląda jak pokrętło.

<!-- **** Button styled to look like a spinner **** --> 
    <Button 
     android:id="@+id/btn_category" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@android:drawable/btn_dropdown" 
     android:gravity="center_vertical|left" 
     android:textSize="18sp" /> 
+1

Styl Jonathana Lin = "? Android: attr/spinnerStyle" wygląda lepiej na 4.0+ – moberme

3

To jest moje rozwiązanie przycisk rysunek jak obrotówki:

<Button 
    android:id="@+id/my_button" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingLeft="12dp" 
    android:gravity="center_vertical|left" 
    android:enabled="true" 
    android:text="@string/my_button_text" 
    android:textColor="@color/my_button_color" 
    style="@style/MyButton" /> 

Jest to część mojego RES/wartości/styles.xml:

<style name="MyButton" parent="@android:style/Widget.Spinner"> 
</style> 

To jest część mojego res/values-v14/styles.xml:

<style name="MyButton" parent="@android:style/Widget.DeviceDefault.Light.Spinner"> 
</style> 
+0

Musiałem również dodać prawe dopełnienie 48dp do tego w res/values ​​/ styles.xml, w przeciwnym razie tekst pojawi się na wierzchu symbol opuszczenia. – aleb

47

To jest jak udało mi się narysować przycisk w stylu Prządki:

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="New Button" 
    android:id="@+id/button" 
    style="?android:attr/spinnerStyle" /> 

To wszystko!

Aktualizacja

coś jak następuje powinny również działać:

<style name="SpinnerButtonStyle" parent="android:Widget.Holo.Spinner"> 
    <item name="android:textColor">@color/entry_field</item> 
    <item name="android:textAppearance">?android:attr/textAppearanceMedium</item> 
</style> 

Więcej stylów zerknąć do SDK, na przykład sdk/platforms/android-18/data/res/values/styles.xml

+6

Działa dla wersji 2.1, 2.3, 4.0+. – aleb

Powiązane problemy