将 backgroundTint 应用于 API 19 的背景可绘制对象
Apply backgroundTint to background drawable for API 19
backgroundTint
正确应用于 API 23,但不适用于 API 19。如何为 API 19 及以下着色?
<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" />
当然我的 Activity
扩展了 AppCompatActivity
。
您需要使用 android 支持库 22.1+ 才能使用 AppCompatButton http://android-developers.blogspot.se/2015/04/android-support-library-221.html
但不幸的是,您将无法在 xml 中执行此操作。
在您的 activity 的 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);
}
}
更多信息在这里:
提示:也许您可以使用 app:backgroundTint="@color/button_material_light" 完成 xml 中的所有操作,但我没有测试。
--编辑--
查看@ema3272 的第二条评论以获得完整的解决方案
这对我在 API19 设备上有效,支持 lib 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>
我知道这个问题有点老了,但你甚至不需要创建样式元素。
只需将支持库中的 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" />
您必须将 "Button" 更新为 "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"
/>
backgroundTint
正确应用于 API 23,但不适用于 API 19。如何为 API 19 及以下着色?
<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" />
当然我的 Activity
扩展了 AppCompatActivity
。
您需要使用 android 支持库 22.1+ 才能使用 AppCompatButton http://android-developers.blogspot.se/2015/04/android-support-library-221.html
但不幸的是,您将无法在 xml 中执行此操作。
在您的 activity 的 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);
}
}
更多信息在这里:
提示:也许您可以使用 app:backgroundTint="@color/button_material_light" 完成 xml 中的所有操作,但我没有测试。
--编辑--
查看@ema3272 的第二条评论以获得完整的解决方案
这对我在 API19 设备上有效,支持 lib 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>
我知道这个问题有点老了,但你甚至不需要创建样式元素。
只需将支持库中的 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" />
您必须将 "Button" 更新为 "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"
/>