テーマ属性を使用したデータバインディング 質問する

テーマ属性を使用したデータバインディング 質問する

新しい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}"

追加のバインディング アダプターやその他のものは必要ありません。

おすすめ記事