私はカスタムAndroid 'ボタン'を拡張し、マルチレベルスピナーとして機能するビューを持っています-それが押されると、ユーザーが選択を絞り込むことができる一連のスピナーのようなダイアログが表示されます。この場合、ユーザーはピックアップを実行する日、時間、分(5分間隔)を選択できます。ダイアログがアクティブでない場合、現在の選択のテキスト説明がに表示されます。ボタン。
ユーザーがボタンを押すことで選択を変更できることを視覚的に示したいので、スピナーの外観はまさに私が必要としているものだと思います。デバイスの他のスピナーと同じ外観にし、ボタンのテキストを簡単に変更できるようにしたいのですが、見苦しいことなくそれを実現する方法がわかりません。デバイス上の他のスピナーと一致するスピナーのようなアイコンとしてボタンを表示するにはどうすればよいですか?
私は自分の質問に対する解決策を見つけました。ボタンのコンストラクターで、背景のドローアブルリソースを「btn_dropdown」に設定しました。
public DateAndTimePicker(Context context) {
super(context);
this.setBackgroundResource(Android.R.drawable.btn_dropdown);
}
スピナーボタンと同じように見え、ボタンの動作は変更されておらず、ボタンのテキストは正しく中央に配置されています。
これが私がスピナーのようなスタイルのボタンを描くことに成功した方法です:
<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
この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" />
これは、スピナーのようにボタンを描画する私のソリューションです。
<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>
ボタンに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"
/>