[解決済み] android:attr/activatedBackgroundIndicator "はどのように機能するのですか?
質問
選択項目に対するコンテキストアクションバーを表示する際に、リスト内の選択項目をハイライトする方法を探していたところ、私が見つけた解決法は
android:background
属性を、行レイアウト xml の
"?android:attr/activatedBackgroundIndicator"
.
しかし、これを設定するとどのように動作するのでしょうか?
- どのようなメカニズムなのでしょうか?
- のような構文要素は何を意味するのでしょうか?
- activatedBackgroundIndicator" の意味はどこで定義されていますか?
どのように解決するのですか?
もしあなたが科学捜査の気分であるなら、ここで掘り下げて何が起こっているのかを見つける方法について説明します。
android:background="?android:attr/activatedBackgroundIndicator"?
直感的には、背景を何らかのdrawableに設定することを意味します。
しかし、これをさらに分解して、謎のdrawableにどうやってたどり着くかを見てみましょう。
正確には、background 属性を "activatedBackgroundIndicator" 属性の値に設定する、ということです。 が現在のテーマで参照しているものです。 .
という部分がわかれば、基本的に裏側はすべて理解できていることになります。
基本的には activatedBackgroundIndicator は実際の drawable ではなく、drawable への参照です。 . では、quot;activateBackgroundIndictor" 属性は実際にどこで定義されているのでしょうか?
sdkディレクトリのファイル名で定義されています。 attrs.xml . 例えば
パス_to_android_sdk/platforms/android-17/です。 data/res/values/attrs.xmlになります。
そのファイルを開くと、以下のような宣言があります。
<attr name="activatedBackgroundIndicator" format="reference" />
attrs.xmlは、後でビューxmlで使用するすべての属性を宣言する場所です。 ここでは属性とその型を宣言しており、実際に値を代入していないことに注意してください。 .
実際の値は themes.xml . このファイルは以下の場所にあります。
パス_to_android_sdk/プラットフォーム/android-17/です。 data/res/values/themes.xmlになります。
そのファイルを開くと を使用しているテーマに応じて複数の定義があります。 . 例えば、テーマ名Theme, Theme.Light, Theme.Holo, Theme.Holo.Lightの定義はそれぞれ以下の通りです。
<item name="activatedBackgroundIndicator">@android:drawable/activated_background</item>
<item name="activatedBackgroundIndicator">@android:drawable/activated_background_light</item>
<item name="activatedBackgroundIndicator">@android:drawable/activated_background_holo_dark</item>
<item name="activatedBackgroundIndicator">@android:drawable/activated_background_holo_light</item>
さて、これで不思議なdrawableが出来上がりました。最初のものを選ぶと、それはdrawableフォルダの中で次のように定義されています。
パス_to_android_sdk/platforms/android-17/にあります。 データ/res/drawable/activated_background.xml
このファイルを開くと、何が起こっているかを理解するために重要な、drawableの定義が表示されます。
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true" android:drawable="@android:drawable/list_selector_background_selected" />
<item android:drawable="@color/transparent" />
</selector>
デフォルトの状態は透明な背景で、状態が "state_activated" である場合、描画可能な状態は "list_selector_background_selected" となります。
参照 このリンク を参照してください。
"list_selector_background_selected" は、drawable-hdpi フォルダにある 9 パッチの png ファイルです。
これで、なぜ私たちが activatedBackgroundIndicator を drawable ファイルに直接リンクするのではなく、参照として定義したのかがわかるでしょう。
関連
-
[解決済み] TextViewでテキストを水平・垂直方向にセンタリングするには?
-
[解決済み] android.os.NetworkOnMainThreadException' を修正するにはどうすればよいですか?
-
[解決済み] アイテムの親を取得する際にエラーが発生しました。AppCompat v23にアップグレードした後、指定された名前に一致するリソースが見つかりません。
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
-
[解決済み] AndroidのListViewで画像を遅延ロードする方法
-
[解決済み] Bitmapオブジェクトに画像を読み込む際にOutOfMemoryが発生する問題
-
[解決済み] LinearLayoutがScrollView内で展開されない
-
[解決済み] Android ConstraintLayout - あるビューを別のビューの上に配置する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] SDカードからファイルを削除する方法を教えてください。
-
[解決済み] ArrayAdapter<myClass> の使用方法
-
[解決済み] Androidの連絡先リストを呼び出すには?
-
[解決済み] AndroidでラジオボタンにOnClickListenerを設定するには?
-
[解決済み] getApplication()、getApplicationContext()、getBaseContext()、someClass.thisの違いと使い分け。
-
[解決済み] Android Navigation Architecture Component - 現在表示されているフラグメントを取得する
-
[解決済み] RecyclerViewのアイテムに波及効果を追加する
-
[解決済み] BottomNavigationViewを新しいNavControllerで使用する際に、フラグメントを生かす方法はありますか?
-
[解決済み] Android APKファイルの中身を見るには?
-
[解決済み] Androidの環境設定。ユーザーが環境設定画面を使用していない場合、デフォルト値を読み込むにはどうすればよいですか?