新しいAndroidを試していますデータバインディングライブラリバインディングを使用して ToolBar の背景色を設定したいと考えました。デフォルトでは、色は colorPrimary (テーマから) になります。
DataBindingを使用する前は、ツールバーは次のようになっていました
<android.support.v7.widget.Toolbar
android:id="@+id/mainToolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
/>
バインディングを追加した後、色がバインドされていない場合は背景を colorPrimary に設定したいと考えました。これには三項演算子を使用しています (ガイドに記載されているとおり)。しかし、テーマ属性にも名前の前に「?」演算子があるため、エラーが発生します。コンパイラは、新しい三項演算子を開始していると判断します。
<data>
<variable name="toolBarBackgroundColor" type="int"/>
</data>
...
<android.support.v7.widget.Toolbar
android:id="@+id/mainToolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@{toolBarBackgroundColor!=0? toolBarBackgroundColor: ?attr/colorPrimary }"
/>
では、バインディング操作内でテーマ属性にアクセスする方法はありますか? ありがとうございます!
編集
colorPrimary 属性をプログラムで取得し、Java コードを通じてバインドできることはわかっています。しかし、これに対する XML ベースのソリューションがあるかどうかが気になっています。
ベストアンサー1
答えは少し遅いですが、誰かの役に立つかもしれません。
データ バインディングでテーマ属性にアクセスするには、以下を使用できます。
(変数clickable
であると想像してくださいBoolean
)
android:background="@{clickable ? android.R.attr.selectableItemBackground : android.R.color.transparent}"
追加のバインディング アダプターやその他のものは必要ありません。