Android: рисование кнопки в виде счетчика - PullRequest
20 голосов
/ 23 декабря 2011

У меня есть пользовательское представление андроида, которое расширяет «Кнопку» и действует как многоуровневое вращение - при нажатии оно отображает серию вращающихся диалогов, которые позволяют пользователю уточнить свой выбор.В этом случае он позволяет пользователю выбрать день, затем час, а затем минуту (с интервалами в 5 минут), по которым они хотят, чтобы происходил захват.Когда диалог не активен, текстовое описание текущего выбора отображается на кнопке.

Я хочу визуально указать, что пользователь может изменить выбор, нажав кнопку, и подумать, что внешний видСпиннер именно то, что мне нужно для этого.Я хочу, чтобы внешний вид был таким же, как и у других блесен на устройстве, и я мог легко изменять текст на кнопке, но я не уверен, как этого добиться, если он не будет хитрым.Как мне сделать так, чтобы кнопка отображалась в виде значка, подобного вращающемуся, который совместим с другими вращателями на устройстве?

Ответы [ 5 ]

49 голосов
/ 21 мая 2013

Вот так мне удалось нарисовать кнопку в стиле Spinner:

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

Вот и все!

Обновление

Что-то вроде следующего также должно работать:

<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>

Чтобы узнать больше о стилях, взгляните на SDK, например, sdk/platforms/android-18/data/res/values/styles.xml

7 голосов
/ 28 декабря 2011

Я нашел решение своего вопроса. В конструкторе для моей кнопки я установил фоновый ресурс для рисования как "btn_dropdown".

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

Выглядит так же, как кнопки вращения, поведение кнопок не изменилось, и текст кнопки корректно центрируется.

3 голосов
/ 07 января 2013

Это моё решение рисовать кнопку как вращатель:

<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" />

Это часть моего res / values ​​/ styles.xml:

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

Это часть моего res / values-v14 / styles.xml:

<style name="MyButton" parent="@android:style/Widget.DeviceDefault.Light.Spinner">
</style>
3 голосов
/ 10 мая 2012

Этот макет XML делает кнопку похожей на вертушку.

<!-- ****  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 голос
/ 28 декабря 2011

Вы можете определить атрибут android: background на своей кнопке, чтобы использовать рисование, похожее на счетчик.Я сделал это, создав изображение из 9 патчей для спиннера, поместив его в папку res / drawable, а затем добавив стиль для своей пользовательской кнопки:

<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>

Для своей кнопки добавьте стильатрибут XML-макета для вашего макета:

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