Androidには PreferenceActivity という便利なのが用意されてます。
その名の通り、設定画面を自前で実装しなくてすむ優れもの。
アプリ開発の工程をいろいろ減らせるので、最近はよく使うことが多いです。
ただ各設定項目にアイコンスペースが必ずできるのが少しイヤ
アイコンを消してもスペースだけ残っちゃうから、モヤモヤしてました。
その解決策が見つかったので、その方法をメモっときます。
PreferenceAcitivtyはアイコンが強制表示される
そもそも PreferenceActiivty とは、次みたいなもの
さまざまな設定によりユーザーは、アプリケーションの機能や動作を変更することができます。 設定は、アプリケーションがクラウドとデータを同期する頻度などのバックグラウンドの動作に影響することがあります。また、コンテンツの変更やユーザー インターフェースの表示など、さらに広い範囲に影響する場合もあります。
引用元 : https://developer.android.com/guide/topics/ui/settings?hl=JA
この Activity を使うと設定画面が簡単に作れるってやつ
ただし、PreferenceActivity というクラスがある訳じゃありません。
ニックネームとしてそう呼んでるだけで、実際は普通の Activity の中で PreferenceFragmentCompat を使って設定画面をフラグメントとして表示してるだけです。
ちなみに Android Studio の場合、次の手順で作成可能
- メニューから【File】=>【New】
- 【Activity】をクリック
- その中から【SettingsActivity】選択
そうすると、設定アクティビティが自動で作られます。
それで問題なのが・・・
アイコンが必要ない設定項目でもアイコン表示されること
例えばリファレンスを元に、こういうレイアウトで作ってみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<androidx.preference.PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"> <SwitchPreferenceCompat app:key="notifications" app:title="Enable message notifications"/> <Preference app:key="feedback" app:title="Send feedback" app:summary="Report technical issues or suggest new features"/> </androidx.preference.PreferenceScreen> |
見ての通り、 app:icon からアイコンを設定してません。
▼ この設定画面を起動すると、こんな感じ
何か変なスペースできてる・・・
当然アイコンのスペースだけど、なんか違和感があるので消したかったです。
でもリファレンスを見ても、それらしいプロパティが見つからなくて苦戦
▼ Preference のプロパティについて
▼ 汎用属性として使えるプロパティ
- title
Preferenceのタイトルの String 値
- summary
Preferenceの概要を表示するための String 値
- icon
Preferenceのアイコンを表示するための Drawable
- enabled
Preference項目を操作できるかを設定する真偽値
- selectable
Preference項目を選択できるかどうかを決める真偽値
レイアウト関係で見つかったのはこの5つの属性くらい
怪しいのは icon かと思い app:icon="null" とかしてみても解決せず・・・
でも途方に暮れていたところ、ネット上でドンピシャな解決策がありました。
アイコン非表示はiconSpaceReserved を使えばいいみたい
なんか前置き長すぎたけど・・・
アイコン非表示について、その答えが書いてあったのが次のページ です。
▼ このページのこの部分が答え
I found an official alternative to eliminate the space. Reserved for the icon
app:iconSpaceReserved
どうやら app:iconSpaceReserved を使えばいい模様
文字通りアイコンスペースを保有するかどうかのプロパティみたいです。
そこで設定のレイアウトを次のように書き変えてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<androidx.preference.PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"> <SwitchPreferenceCompat app:key="notifications" app:title="Enable message notifications" app:iconSpaceReserved="false"/> <Preference app:key="feedback" app:title="Send feedback" app:summary="Report technical issues or suggest new features" app:iconSpaceReserved="false"/> </androidx.preference.PreferenceScreen> |
そしてアプリの設定画面を開いて見ると・・・
▼ このレイアウトでの設定画面
よかった、今度はちゃんとスペースが埋まってる!
こういう属性があるなら公式にもしっかり書いといて欲しかったです (-_-;)
ここまでのまとめ
ということで、無事 ReferenceActivity でアイコン非表示にできました。
どうでもいいことだけど、地味に役立ちそうなテクニックかもしれない