Android:将按钮绘制为下拉列表

22

我有一个自定义的Android视图,它扩展了“Button”并充当多级微调器 - 当按下它时,它会显示一系列类似微调器的对话框,允许用户细化其选择。在这种情况下,它允许用户选择他们想要接送的日期、小时和分钟(每5分钟为一个间隔)。当对话框不活动时,按钮上显示当前选择的文本描述。

我想通过视觉指示表明用户可以通过按下按钮来更改选择,并认为旋转器的外观正是我所需要的。我希望外观与设备上的其他旋转器相同,并且能够轻松更改按钮上的文本,但我不确定如何实现而不会变得笨拙。我应该如何将按钮显示为与设备上其他旋转器一致的旋转器图标?

5个回答

52

这是我成功绘制类似于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
我找到了解决方案。在我的按钮构造函数中,我将背景可绘资源设置为"btn_dropdown"。
public DateAndTimePicker(Context context) {
    super(context);
    this.setBackgroundResource(android.R.drawable.btn_dropdown);
}

它看起来与旋转按钮相同,没有更改任何按钮行为,并且按钮文本居中正确。


3

这个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
Jonathan Lin的style="?android:attr/spinnerStyle"在4.0+上看起来更好。 - moberme

3

这是我绘制类似旋转器按钮的解决方案:

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

我还需要在res/values/styles.xml中的一个元素上添加48dp的右填充,否则文本将出现在下拉符号的上方。 - aleb

1

您可以在按钮上定义android:background属性,以使用类似于Spinner的可绘制对象。我通过为Spinner创建一个9-patch图像,将其放置在我的res/drawable文件夹中,然后为我的自定义Spinner按钮添加样式来实现此目的:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接