悪いニュース
BoDが言うように、Lollipop 5.0(APIレベル21)でボタンの背景に色を付けることは無意味です。
良いニュース
Lollipop 5.1(APIレベル22)は、btn_mtrl_default_shape.xml(他のファイルの中でも)を変更することでこれを修正したようです。 https
素晴らしいニュース
新しいサポートライブラリ(バージョン22.1以降)は、AppCompatButtonを含む多くのコンポーネントに下位互換性のある色付けサポートを追加します!
残念ながら、android:backgroundTint
プロパティはまだ機能しません(おそらく私は何か間違ったことをしています)-したがってColorStateList
、を使用してコードで設定する必要がありますsetSupportBackgroundTintList()
。android:backgroundTint
将来的にサポートされるのを見るのは本当に素晴らしいことです。更新:Marcio Granzottoは、app:backgroundTint
AppCompatButtonで機能するとコメントしました!アプリ/ライブラリにあるためapp:
、ではなくandroid:
、であることに注意してください。
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<AppCompatButton
android:id="@+id/mybutton"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="Testing, testing"
app:backgroundTint="#ff00ff"/>
</LinearLayout>
から継承させると、アクティビティはAppCompatButton
通常ではなく自動的に膨らみButton
ますAppCompatActivity
。
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);
}
}
もちろんColorStateList
、カラーリソースから取得する必要がありますが、私は怠惰だったので...
ああ、そしてテーマの1つに基づいてアプリのテーマを作成することを忘れないでください。そうしないとTheme.AppCompat
、互換性のあるビューが非常に悲しくなります...;)
これは、2.3.7(Gingerbread MR1)と5.0(Lollipop'Classic ')の両方で機能しました。