web-dev-qa-db-ja.com

Android:スピナーとしてボタンを描画する

私はカスタムAndroid 'ボタン'を拡張し、マルチレベルスピナーとして機能するビューを持っています-それが押されると、ユーザーが選択を絞り込むことができる一連のスピナーのようなダイアログが表示されます。この場合、ユーザーはピックアップを実行する日、時間、分(5分間隔)を選択できます。ダイアログがアクティブでない場合、現在の選択のテキスト説明がに表示されます。ボタン。

ユーザーがボタンを押すことで選択を変更できることを視覚的に示したいので、スピナーの外観はまさに私が必要としているものだと思います。デバイスの他のスピナーと同じ外観にし、ボタンのテキストを簡単に変更できるようにしたいのですが、見苦しいことなくそれを実現する方法がわかりません。デバイス上の他のスピナーと一致するスピナーのようなアイコンとしてボタンを表示するにはどうすればよいですか?

21
Sir_Lagsalot

私は自分の質問に対する解決策を見つけました。ボタンのコンストラクターで、背景のドローアブルリソースを「btn_dropdown」に設定しました。

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

スピナーボタンと同じように見え、ボタンの動作は変更されておらず、ボタンのテキストは正しく中央に配置されています。

7
Sir_Lagsalot

これが私がスピナーのようなスタイルのボタンを描くことに成功した方法です:

<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

50
Jonathan Lin

この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" />
3
moberme

これは、スピナーのようにボタンを描画する私のソリューションです。

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

ボタンに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レイアウトにstyle属性を追加します。

<Button
  Android:id="@+id/okButton"
  style="@style/DialogSpinner"
  Android:textColor="#a6a2a2"
  Android:text="something"
/>
1
Marc Attinasi