文系プログラマの勉強ノート

スマホアプリ開発やデザインなどについて勉強したことをまとめています

【Android】ListViewをDisabledにしていると、区切り線(Separator)が表示されない

以下のようなコードで選択不可のListViewを作成します。
(AndroidStudioのEmpty Activityのテンプレートを使用し、
activity_main.xmlにlist_viewというidのListViewを設置)

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Listデータ作成
    ArrayList<String> list = new ArrayList<String>();
    list.add("row 1");
    list.add("row 2");
    list.add("row 3");
    list.add("row 4");
    list.add("row 5");

    //Adaptorの設定
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list) {
        // 選択不可
        @Override
        public boolean areAllItemsEnabled() {
            return false;
        }

        // 選択不可
        @Override
        public boolean isEnabled(int position) {
            return false;
        }
    };
    ListView listView = (ListView) findViewById(R.id.list_view);
    listView.setAdapter(adapter);
}

すると、区切り線が表示されません。
DisabledにするとSeparatorが非表示になる仕様のようです。
(背景色が透けて見える)
元々iOSをやっていた身からすると不思議な仕様です。

f:id:an3714106:20160122235937p:plain:w200

私の場合、タップイベントが不要で
タップ時の選択色を表示しない目的でDisabledにしていたため、
ListView自体はEnabledにし、ListViewの各行にカスタムレイアウトを使用して
選択色を表示しないことにしました。

こちらのblogさんでは別の対処法を書かれていて参考になりそうです。
hiro99ma blog: [android]ListViewのitemをdisableにするとlineがinvisibleだ