PreferenceActivityでアイコン非表示する方法を見つけた

Androidには PreferenceActivity という便利なのが用意されてます。

その名の通り、設定画面を自前で実装しなくてすむ優れもの。
アプリ開発の工程をいろいろ減らせるので、最近はよく使うことが多いです。

ただ各設定項目にアイコンスペースが必ずできるのが少しイヤ

アイコンを消してもスペースだけ残っちゃうから、モヤモヤしてました。

その解決策が見つかったので、その方法をメモっときます。

PreferenceAcitivtyはアイコンが強制表示される

そもそも PreferenceActiivty とは、次みたいなもの

さまざまな設定によりユーザーは、アプリケーションの機能や動作を変更することができます。 設定は、アプリケーションがクラウドとデータを同期する頻度などのバックグラウンドの動作に影響することがあります。また、コンテンツの変更やユーザー インターフェースの表示など、さらに広い範囲に影響する場合もあります。

引用元 : https://developer.android.com/guide/topics/ui/settings?hl=JA

この Activity を使うと設定画面が簡単に作れるってやつ

 

ただし、PreferenceActivity というクラスがある訳じゃありません。

ニックネームとしてそう呼んでるだけで、実際は普通の Activity  の中で PreferenceFragmentCompat  を使って設定画面をフラグメントとして表示してるだけです。

ちなみに Android Studio の場合、次の手順で作成可能

  • メニューから【File】=>【New】
  • 【Activity】をクリック
  • その中から【SettingsActivity】選択

そうすると、設定アクティビティが自動で作られます。

 

それで問題なのが・・・
アイコンが必要ない設定項目でもアイコン表示されること

例えばリファレンスを元に、こういうレイアウトで作ってみました。

見ての通り、 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 を使えばいい模様

文字通りアイコンスペースを保有するかどうかのプロパティみたいです。

 

そこで設定のレイアウトを次のように書き変えてみます。

そしてアプリの設定画面を開いて見ると・・・

▼ このレイアウトでの設定画面

アイコンを非表示で、なおかつアイコンスペースまで取り除いた設定画面の例

よかった、今度はちゃんとスペースが埋まってる!

こういう属性があるなら公式にもしっかり書いといて欲しかったです (-_-;)

ここまでのまとめ

ということで、無事 ReferenceActivity でアイコン非表示にできました。

どうでもいいことだけど、地味に役立ちそうなテクニックかもしれない