最初の私のイメージとしては,
サポートライブラリが充実してきているので ボタンの色は, banckgroundTint で簡単に変更できる!
でしたが...
おさらい
まず, ボタンを設置します.
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
android:text="Button" />
灰色のボタンが表示されて押したら, それなりにエフェクトが効いて「押されました感」が見て分かります.
ボタンの色を変えます.
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
android:text="Button"
android:background="@color/colorAccent" />
ボタンの色が変わりましたが, 押したときにエフェクトが効きません.
background 属性のかわりに backgroudTint を使います.
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
android:text="Button"
android:backgroundTint="@color/colorAccent" />
これで, 背景色も変わりかつエフェクトも効きます.
background ではなく, backgroundTint で色を指定する
ということですね.
Button と AppCompatButton の記述
StackOverflow などを見ているとさまざまな記述が見えます.
android - Lollipop's backgroundTint has no effect on a Button - Stack Overflow
ただ「ボタンの色を変えたいだけ」なのですが, なんだか混乱しています.
backgroudTint を使った記述にも似たようなものいくつかあるようです.
<android.support.v7.widget.AppCompatButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
android:text="AppCompatButton"
android:backgroundTint="@color/colorAccent" />
<android.support.v7.widget.AppCompatButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
android:text="AppCompatButton"
app:backgroundTint="@color/colorAccent" />
Button のかわりに AppCompatButton を使っていたり, backgroundTint の prefix が android: となっていたり app: になっています.
とりあえず, すべてをレイアウトに記述して表示してみました.
以下3つの挙動は予想通りで同じです.
<Button
android:backgroundTint="@color/colorAccent"
...
<AppCompatButton
android:backgroundTint="@color/colorAccent"
...
<AppCompatButton
app:backgroundTint="@color/colorAccent"
...
Button と記述した場合でも, 内部でいい感じに入れ替えてくれているようですね.
[Tool]-[Android]-[Layout Inspector]
AppCompat を意識すること無く, 昔からの Button を使って記述していけばサポートライブラリが対応してくれるということですね!
AppCompat は えらい!!
Android 4.4 KITKAT で確認する
結果 : 全てダメ.
え,
色とエフェクト両方きちんと反映されているものがない...
なんなんすかね これ...
AppCompat のバージョンを下げてみます.
//compile 'com.android.support:appcompat-v7:25.1.0'
compile 'com.android.support:appcompat-v7:25.0.1'
Android 4.4 では, backgroudTint が ひとつの記述だけしか意図通りに表示してくれません.
AppCompat はクソ!!
そら混乱もしますわ.
まとめ
backgroundTint についての
OSバージョンと appcompat-v7 バージョンの関係
現状では,
AppCompat-v7 を 25.0.1 で
<android.support.v7.widget.AppCompatButton
....
app:backgroundTint="@color/colorAccent" />
と書いておくのが吉.