[解決済み] スピナーのドロップダウンに異なるテーマを設定するには?
2022-11-22 02:29:43
質問
使用例です。
スピナーはダークテーマですが、ドロップダウンはライトテーマにしたいです。
どのように解決するのですか?
アンドロイドM
Android 6.0 の新機能として、Spinner に
android:popupTheme
パラメータが追加され、ポップアップ (ドロップダウン) に使用するテーマを設定することができるようになりました。
というように使うことができます。
<Spinner
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:popupTheme="@android:style/ThemeOverlay.Material.Light" />
これは API レベル 23 以上を実行しているデバイスでは動作しますが、それより低いバージョンの Android を実行しているデバイスでは動作しません。
AppCompat
ここで、AppCompatの出番です。そのスピナーの実装は
popupTheme
をサポートしていますが、正しく動作させるためにはもう少し複雑です。
<Spinner
android:layout_height="wrap_content"
android:layout_width="match_parent"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
その後、AppCompat で動作するように Adapter を更新する必要があります。これを行うには、新しい
ThemedSpinnerAdapter
インターフェイスを実装します。
public class MyAdapter extends BaseAdapter implements ThemedSpinnerAdapter {
Theme getDropDownViewTheme() { ... }
void setDropDownViewTheme(Theme theme) { ... }
}
これらのメソッドは、SpinnerがAdapterに対して、どのテーマを使用してドロップダウンリストを作成するかを指示するために使用されます。これをできるだけ簡単にするために、私たちはあなたのために
Helper
クラスが用意されており、これをアダプタに接続することができます。
つまり、あなたのアダプタは次のようなものになるのです。
public class MyAdapter extends BaseAdapter implements ThemedSpinnerAdapter {
private final ThemedSpinnerAdapter.Helper mDropDownHelper;
public MyAdapter(Context context) {
mDropDownHelper = new ThemedSpinnerAdapter.Helper(context);
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
View view;
if (convertView == null) {
// Inflate the drop down using the helper's LayoutInflater
LayoutInflater inflater = mDropDownHelper.getDropDownViewInflater();
view = inflater.inflate(R.layout.my_dropdown, parent, false);
}
// ...
return view;
}
@Override
public void setDropDownViewTheme(Theme theme) {
mDropDownHelper.setDropDownViewTheme(theme);
}
@Override
public Theme getDropDownViewTheme() {
return mDropDownHelper.getDropDownViewTheme();
}
}
関連
-
[解決済み] Androidのgravityとlayout_gravityの違いは何ですか?
-
[解決済み] スピナーの文字サイズと文字色を変更するには?
-
[解決済み] プログラムによりスピナーの選択項目を設定する
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
-
[解決済み] 既存のカスタムテーマでXMLのアクティビティのタイトルバーを非表示にする方法
-
[解決済み] 初期テキストが「Select One」のAndroidスピナーを作るには?
-
[解決済み】Androidアプリ全体のデフォルトフォントファミリーを設定する方法
-
[解決済み] Android - Snackbar vs Toast - 使い方と違い。
-
[解決済み] アンドロイドでシェイクを検出するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] BottomSheetDialogFragmentの状態をexpandedに設定する。
-
[解決済み] getApplication()、getApplicationContext()、getBaseContext()、someClass.thisの違いと使い分け。
-
[解決済み] Androidのadb logcatでTAG名で特定のメッセージを除外する方法は?
-
[解決済み] AsyncTaskを複数回実行する
-
[解決済み] 通知をクリックした後にアプリケーションを開く
-
[解決済み] 文字サイズとアンドロイドの画面サイズの違い
-
[解決済み] Android - Snackbar vs Toast - 使い方と違い。
-
[解決済み] ProjectScopeServices に Factory タイプのサービスはありません。
-
[解決済み] 実行に失敗しました app:processDebugResources Android Studio
-
[解決済み] WhatsAppでメッセージを送信する