データバインディングをバシバシ使うようになって色々と試しているのだけど、困ったことが。
values/にこんなのを用意。
4962-0.xmlvalues-w400dp/にはこんなのを用意する。<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="preference_display" type="layout">@layout/preference_display_narrow</item>
</resources>
4962-1.xmlアプリからは R.layout.preference_displayを参照するだけでスクリーンの幅によって適切なレイアウトが選択されるというわけだけど、データバインディングとは相性が悪い。<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="preference_display" type="layout">@layout/preference_display_wide</item>
</resources>
Androidのデータバインディングは基本的にコンパイルタイムの処理なので preference_display_narrow/preference_display_wideに付いてのバインディング処理クラスは生成されても preference_displayについては生成しようがない。
というわけで、こんな処理を書いた。
4962-2.javaんーむ、泥臭いな。TypedValue typedValue = new TypedValue();
getApplicationContext().getResources().getValue(R.layout.preference_display, typedValue, true);
switch (typedValue.resourceId) {
default:
case R.layout.preference_display_narrow:
PreferenceDisplayNarrowBinding NarrowBinding = PreferenceDisplayNarrowBinding.inflate(inflater);
NarrowBinding.setItem(mDisplayData);
return NarrowBinding.getRoot();
case R.layout.preference_display_wide:
PreferenceDisplayWideBinding WideBinding = PreferenceDisplayWideBinding.inflate(inflater);
WideBinding.setItem(mDisplayData);
return WideBinding.getRoot();
}
もうちっとマシな方法はないもんだろうか?