7

android:popupBackgroundを設定してandroidスピナーのポップアップウィンドウの背景を変更しようとしましたが、効果がありませんでした。変更する方法はありますか?

    <Spinner
           android:id="@+id/eventNameSpinner"
           android:layout_width="160dp"
           android:layout_height="30dp"
           android:layout_alignParentLeft="true"
           android:layout_centerVertical="true"
           android:layout_marginLeft="6dp"
           android:background="@drawable/btn_name"
           android:paddingBottom="2dp"
           android:paddingTop="2dp"
           android:popupBackground="@drawable/bkg">
4

2 に答える 2

17

スピナーの「子犬アイテム」の背景ではなく、スピナーのポップアップの「外側」の背景を変更しようとしていると思います。また、ポップアップとは、新しいドロップダウンモードではなく、アクティビティの上にフローティングダイアログウィンドウが表示されるスピナーのダイアログモードを意味していると思います。

ストラテジー

複数のAndroidプラットフォーム間で適切に動作し、アプリの冗長性の必要性を減らす、クリーンで持続可能なアプローチには、公式ドキュメントに記載されていないことを理解することが不可欠だと思います。だから、短い旅で私に従ってください。

スピナーのトリッキーな部分は、アダプターを使用してスピナーをデータに接続することです。android.R.layout.simple_spinner_itemとその友達の外観を変更するためのフックを特定するのは比較的簡単ですが、それらはスピナーの現在表示されているアイテムと各ポップアップアイテムのスタイルを決定するだけです。ただし、 ListViewおよびそのListViewを構成するその他のウィジェットの作成を担当するのはアダプタです。

この複雑さは、AndroidがSpinnerの子に適用されるにもかかわらず、 Spinnerの「for」でオンザフライで指定できるいくつかの属性を導入した理由である可能性があります(android:popupBackgroundなど) 。これは必ずしもクリーンなアプローチではなく、限られた便利な機能のセットです。ところで、popupBackgroundに関しては、これはAPIレベル1で導入されましたが、スピナーはAPIレベル11で導入されたspinnerMode = dropdownでのみそれを尊重します。これが、誤って使用した場合に通知されない理由です。

古いAndroidバージョン(2.2など)

リストビュー

アダプタがListViewを作成することを知っているので、テーマのListViewの外観を変更することは悪い考えではありません。したがって、次のように、デザイン変更とスタイリングを1か所で簡単に行うことができます。

<style name="MyTheme" parent="@android:style/[reference to original theme]" >
    <item name="android:listViewStyle">@style/myListView</item>
    [...]
</style>

<style name="myListView" parent="@android:style/Widget.ListView">
    [check Android's Widget.ListView to understand what you can change here]
</style>

AlertDialog

残念ながら、まだまだ作業があります。android:promptを使用してポップアップの見出しを作成できるため、ポップアップは実際にはListViewだけではありません。

AndroidはAlertDialogを使用します

最近のAndroidバージョン(4.2など)

AlertDialogsのスタイルが設定されたので、Androidの最近のバージョンではSpinnerダイアログにAlertDialogsを使用しなくなったという事実に対処する必要があります。とにかくAlertDialogスタイルを維持する必要があるため、これは問題ありません。これは、新しいポップアップのスタイルも設定する必要があることを意味します。

これを行うには、バージョン固有のテーマXMLファイルを作成して、カスタマイズしたテーマに追加のスタイルをプルし、バージョン固有のスタイルXMLファイルを提供します。

ここから始めて、自分で試してみたいですか?

于 2012-12-07T12:44:36.963 に答える
10

android:popupBackgroundを使用する場合にのみ有効ですandroid:spinnerMode = "dropdown"。これが、コードに影響を与えなかった理由です。そのスピナーに、どのモードでXMLを使用するかを指示する必要があります。

android:spinnerMode = "dropdown"

リンク

于 2012-11-08T07:52:57.537 に答える