如何创建一个有圆角而不是默认的矩形角的EditText ?


当前回答

为了补充其他答案,我发现实现圆角的最简单的解决方案是将以下内容设置为Edittext的背景。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <solid android:color="@android:color/white"/>
    <corners android:radius="8dp"/>

</shape>

其他回答

假如你要的只是弯角而不是整尾,则使用下面的代码。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

    <corners android:radius="10dp" />

    <padding
        android:bottom="3dp"
        android:left="0dp"
        android:right="0dp"
        android:top="3dp" />

    <gradient
        android:angle="90"
        android:endColor="@color/White"
        android:startColor="@color/White" />

    <stroke
        android:width="1dp"
        android:color="@color/Gray" />

</shape>

它只会弯曲EditText的四个角度。

谢谢Norfeldt的回答。我稍微改变了它的梯度,以获得更好的内阴影效果。

<item android:state_pressed="false" android:state_focused="false">
    <shape>
        <gradient
            android:centerY="0.2"
            android:startColor="#D3D3D3"
            android:centerColor="#65FFFFFF"
            android:endColor="#00FFFFFF"
            android:angle="270"
            />
        <stroke
            android:width="0.7dp"
            android:color="#BDBDBD" />
        <corners
            android:radius="15dp" />
    </shape>
</item>

看起来很棒在一个光背景布局..

在我看来,它已经有了圆角。

如果你想让它们更全面,你需要:

克隆构成EditText背景的所有9个补丁的PNG图像(在您的SDK中找到) 修改每一个都有更圆角 克隆XML StateListDrawable资源,将这些EditText背景组合成一个Drawable,并将其修改为指向更全面的9个补丁的PNG文件 使用新的StateListDrawable作为EditText小部件的背景

在材质组件库中,你可以使用MaterialShapeDrawable来绘制自定义形状。

使用EditText你可以做:

    <EditText
        android:id="@+id/edittext"
        ../>

然后创建一个MaterialShapeDrawable:

float radius = getResources().getDimension(R.dimen.default_corner_radius);

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);
//Apply a background color
shapeDrawable.setFillColor(ContextCompat.getColorStateList(this,R.color.white));
//Apply a stroke
shapeDrawable.setStroke(2.0f, ContextCompat.getColor(this,R.color.colorAccent));

ViewCompat.setBackground(editText,shapeDrawable);

它要求库的版本为1.1.0。

试试这个,

Create rounded_edittext.xml file in your Drawable <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" android:padding="15dp"> <solid android:color="#FFFFFF" /> <corners android:bottomRightRadius="0dp" android:bottomLeftRadius="0dp" android:topLeftRadius="0dp" android:topRightRadius="0dp" /> <stroke android:width="1dip" android:color="#f06060" /> </shape> Apply background for your EditText in xml file <EditText android:id="@+id/edit_expiry_date" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dip" android:background="@drawable/rounded_edittext" android:hint="@string/shop_name" android:inputType="text" /> You will get output like this