63

app:srcCompat を使用して Support Lib v23.2 の新しいベクター ドローアブル サポートを使用し、データ バインディングを介してドローアブルを設定しようとしています。

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

<data>
    <variable
        name="mediaPojo"
        type="in.ishaan.pika.data_binding.MediaPojo"/>
</data>

<RelativeLayout
    android:background="@color/black"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <VideoView
        ... />

    <ImageView
        ...
        app:srcCompat="@{mediaPojo.isPlaying ? @drawable/ic_pause_24dp : @drawable/ic_play_arrow_24dp}"
    />

    <ProgressBar
        .../>
</RelativeLayout>
</layout>

ビルドしようとすると、スタジオがスローします:

エラー:(33, 30) パラメータ タイプ android.graphics.drawable.Drawable の属性 'app:srcCompat' のセッターが見つかりません。

4

4 に答える 4

97

DataBinding でベクター リソースを設定する場合は、compat 属性の代わりにandroid:src属性を使用するだけです。

DataBinding ライブラリは、実行時にsetImageResourceメソッドを実行するクラスを生成します。

<ImageView
        ...
        android:src="@{@drawable/your_drawable}"
/>

http://android-developers.blogspot.com/2016/02/android-support-library-232.html によると、setImageResourceメソッドは、追加の変更を加えることなく、古いシステム バージョンで実行時に使用できます。

app:srcCompat属性を使用する場合。属性を ImageView の適切なセッターに接続する @BindingMethods アノテーションを定義する必要があります。たとえば、アクティビティまたはフラグメントに追加します。

@BindingMethods({
    @BindingMethod(type = android.widget.ImageView.class,
            attribute = "app:srcCompat",
            method = "setImageDrawable") })
public class MainActivity extends AppCompatActivity {
   // your activity body here

}
于 2016-03-10T13:10:50.250 に答える
14

次のようなメソッド シグネチャを持つバインディング アダプターを使用する必要がある場合があります。

@BindingAdapter("app:srcCompat")
public static void bindSrcCompat(ImageView imageView, Drawable drawable){
    // Your setter code goes here, like setDrawable or similar
}

参照は次のとおりです。http://developer.android.com/reference/android/databinding/BindingAdapter.html

于 2016-03-03T17:15:00.547 に答える
0

srcCompat を使用する必要があり、ドローアブルに xml を介して色合いを設定する必要がある場合、最も簡単な方法は android.support.v7.widget を使用することです。AppCompatImageView

そして、android:tintapp:srcCompatは問題なく動作します。

注:ImageViewを使用したフラグメントレイアウトで何らかの理由で私には不明ですが、正常に動作します。AppCompatImageView への復帰は、アクティビティ レイアウトでのみ必要です。

于 2018-07-05T11:14:58.987 に答える