web-dev-qa-db-ja.com

API 19のバックグラウンドドローアブルにbackgroundTintを適用する

backgroundTintはAPI 23には正しく適用されますが、API 19には適用されません。API19以下の描画可能な色合いを取得するにはどうすればよいですか?

                    <Button
                    Android:layout_width="40dp"
                    Android:layout_height="40dp"
                    Android:id="@+id/AbResetBtn"
                    Android:background="@Android:drawable/stat_notify_sync"
                    Android:backgroundTint="@color/button_material_light" />

もちろん、私のActivityAppCompatActivityを拡張しています。

18
ema3272

これはAPI 19デバイス、サポートライブラリv7で私のために働きました

レイアウト

<Button
    Android:id="@id/btn"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="@string/label"
    style="@style/Button"
    />

スタイル

<style name="Button" parent="Base.TextAppearance.AppCompat.Button" >
    <item name="backgroundTint">@color/fab_bg</item>
</style>
32
DoruChidean

私はその少し古い質問を知っていますが、スタイル要素を作成する必要さえありません。

サポートライブラリのappCompatButtonをapp:名前空間で使用するだけです。

<Android.support.v7.widget.AppCompatButton Android:layout_width="40dp"
                    Android:layout_height="40dp"
                    Android:id="@+id/AbResetBtn"
                    Android:background="@Android:drawable/stat_notify_sync"
                    app:backgroundTint="@color/button_material_light" />
7
Paresh Dudhat

AppCompatButtonを使用するには、Androidサポートライブラリ22.1+を使用する必要があります http://Android-developers.blogspot.se/2015/04/Android-support-library-221.html

ただし、残念ながらxmlでこれを行うことはできません。

アクティビティのonCreateで、次のようにします。

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        AppCompatButton v = (AppCompatButton) findViewById(R.id.mybutton);
        ColorStateList csl = new ColorStateList(new int[][]{new int[0]}, new int[]{0xffffcc00});
        v.setSupportBackgroundTintList(csl);
    }
}

詳細はこちら: LollipopのbackgroundTintはボタンに影響を与えません

ヒント:おそらく、app:backgroundTint = "@ color/button_material_light"を使用してxmlですべてを実行できる可能性がありますが、私はテストしていません。

-編集-

完全なソリューションについては、@ ema3272の2番目のコメントを確認してください

4
jonathanrz

「ボタン」を「androidx.appcompat.widget.AppCompatButton」に、「Android:backgroundTint」を「app:androidTint」に更新する必要があります

前:

 <Button
                Android:id="@+id/button"
                Android:layout_width="200dp"
                Android:layout_height="0dp"
                Android:textColor="@color/colorAccent"
                Android:backgroundTint="@color/colorAccent"
                Android:background="@drawable/empty_list_state_button"
                Android:text="@string/button_title"
                app:layout_constraintTop_toBottomOf="@id/distance"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                Android:layout_marginTop="16dp"
                Android:layout_marginBottom="16dp"
                />

後:

 <androidx.appcompat.widget.AppCompatButton
                Android:id="@+id/button"
                Android:layout_width="200dp"
                Android:layout_height="0dp"
                Android:textColor="@color/colorAccent"
                app:backgroundTint="@color/colorAccent"
                Android:background="@drawable/empty_list_state_button"
                Android:text="@string/button_title"
                app:layout_constraintTop_toBottomOf="@id/distance"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                Android:layout_marginTop="16dp"
                Android:layout_marginBottom="16dp"
                />
0
Adobels