您也可以将 Material Components Library 引入的 MaterialShapeDrawable 应用到 TextView 或 EditText。
在这种情况下,您不能在布局或样式中使用shapeAppearanceOverlay 属性,因为这些组件没有默认定义为MaterialButton、MaterialCardView 的MaterialShapeDrawable。
但是您以编程方式应用相同的ShapeAppearence。
例如:
<TextView
android:id="@+id/textview"
android:backgroundTint="@color/secondaryColor"
../>
您可以通过编程方式使用以下内容:
float radius = getResources().getDimension(R.dimen.default_corner_radius);
TextView textView = findViewById(R.id.textview);
用圆角定义ShapeAppearanceModel:
ShapeAppearanceModel shapeAppearanceModel = new ShapeAppearanceModel()
.toBuilder()
.setAllCorners(CornerFamily.ROUNDED,radius)
.build();
用这个ShapeAppearanceModel创建一个MaterialShapeDrawable:
MaterialShapeDrawable shapeDrawable = new MaterialShapeDrawable(shapeAppearanceModel);
将此背景应用于您的视图:
ViewCompat.setBackground(textView,shapeDrawable);
您可以使用EditText 实现相同的行为(但在这种情况下您也可以使用TextInputLayout):
在你的布局中定义:
<EditText
android:id="@+id/edittext"
android:paddingLeft="4dp"
android:drawableLeft="@drawable/ic_add_24px"
android:drawableTint="@color/..."
android:hint="@string/...."
..>
然后申请MaterialShapeDrawable:
EditText editText = findViewById(R.id.edittext);
//Apply the rounded corners
ShapeAppearanceModel shapeAppearanceModel = new ShapeAppearanceModel()
.toBuilder()
.setAllCorners(CornerFamily.ROUNDED,radius)
.build();
MaterialShapeDrawable shapeDrawable =
new MaterialShapeDrawable(shapeAppearanceModel);
//Fill the background color
shapeDrawable.setFillColor(ContextCompat.getColorStateList(this,R.color....));
//You can also apply a stroke
shapeDrawable.setStroke(2.0f, ContextCompat.getColor(this,R.color....));
//Apply the shapeDrawable to the background.
ViewCompat.setBackground(editText,shapeDrawable);
如果您想使用样式中定义的ShapeAppareace,您可以使用
不同的ShapeAppearanceModel 构造函数。例如:
ShapeAppearanceModel shapeAppearanceModel =
ShapeAppearanceModel.builder( this,
R.style.ShapeAppearance_MaterialComponents_MediumComponent,
R.style.ShapeOverlay).build();
与:
<style name="ShapeOverlay">
<item name="cornerSize">16dp</item>
</style>