LoginSignup
7
5

More than 5 years have passed since last update.

AppCompatCheckBox でハマったこと

Posted at

※ 引用 : http://blog.384ta.com/appcompatcheckbox

Android Support Library 22.1 の登場と共に、 AppCompatFooBar シリーズが充実しました。 Android 4.4 以下でも Material Design ライクな UI ウィジェットが使えるようになって、デザインの統一感が向上させられると思います。

そんな AppCompat シリーズの 1 つである AppCompatCheckBox を使うときにハマったことがあるので、共有したいと思います。話としては CheckBox に限らない、 AppCompatFooBar 全般の話なのですが、 CheckBox を触る上で出会った事柄なので …… 。

AppCompatCheckBox がレンダリングされない

CheckBox を使って UI を組んでいた場所を AppCompatCheckBox に置き換え、いざビルドしてみても CheckBox がレンダリングされないということが最初に躓いたところでした。

001.png

やりたいことは、

  1. support-v7 の AlertDialog の上に ListView を乗せたい
  2. ListView の各行で使う View の中では AppCompatCheckBox を乗せたい

というものです。上のスクリーンショットを見れば分かるのですが、 本来各行の右側にあるはずの AppCompatCheckBox が表示されていませんね。

また、この例では AppCompatTextView の文字色もかなり薄い色になっていますが、躓いた環境では XML 上で textColor を当てはめていて、これも問題の特定に時間がかかった原因でした。

※ AppCompatTextView / AppCompatCheckBox には android:theme="@style/AppTheme" を適用しています。

原因は LayoutInflater の使い方

Dialog の表示には support-v4 の DialogFragment を使っています。 DialogFragment の onCreateDialog の中で ListView を inflate させるために使っていた LayoutInflater ですが、

Context context = getActivity().getApplicationContext();
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

Context#getSystemService メソッド経由で取得していました。この LayoutInflater を、

LayoutInflater inflater = LayoutInflater.from(getActivity());

に変え、さらに、 ListView にセットしていたカスタム Adapter のコンストラクタにこの inflater を渡すようにしてみました。

// 抜粋
public static class MyAdapter extends ArrayAdapter<MyData> {
    private int mResource;
    private LayoutInflater mInflater;
    public MyAdapter(Context context, int resource, List<MyData> objects, LayoutInflater inflater) {
        super(context, resource, objects);
        mResource = resource;
        mInflater = inflater;
    }

結果、

002.png

テーマがキチンと適用されて、表示されました。これまで LayoutInflater は特に理由がなければ Context#getSystemService 経由で取得していたのですが、それが災いしてハマってしまいました。不勉強でした ('A`)

AppCompatFooBar シリーズを使っていて、同じような問題に出会った人の助けになれば幸いです。

7
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5