Cri*_*ian 548

有一种比CommonsWare编写的更简单的方法.只需创建一个可绘制的资源,指定EditText绘制方式:

<?xml version="1.0" encoding="utf-8"?>
<!--  res/drawable/rounded_edittext.xml -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" android:padding="10dp">
 <solid android:color="#FFFFFF"/>
    <corners
     android:bottomRightRadius="15dp"
     android:bottomLeftRadius="15dp"
  android:topLeftRadius="15dp"
  android:topRightRadius="15dp"/>
</shape>
Run Code Online (Sandbox Code Playgroud)

然后,只需在您的布局中引用此drawable:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<EditText  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:padding="5dip"
    android:background="@drawable/rounded_edittext" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

你会得到类似的东西:

替代文字

编辑

根据Mark的评论,我想添加为您创建不同状态的方式EditText:

<?xml version="1.0" encoding="utf-8"?>
<!-- res/drawable/rounded_edittext_states.xml -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item 
     android:state_pressed="true" 
     android:state_enabled="true"
        android:drawable="@drawable/rounded_focused" />
    <item 
     android:state_focused="true" 
     android:state_enabled="true"
        android:drawable="@drawable/rounded_focused" />
    <item 
     android:state_enabled="true"
        android:drawable="@drawable/rounded_edittext" />
</selector>
Run Code Online (Sandbox Code Playgroud)

这些是州:

<?xml version="1.0" encoding="utf-8"?>
<!-- res/drawable/rounded_edittext_focused.xml -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" android:padding="10dp">
 <solid android:color="#FFFFFF"/>
 <stroke android:width="2dp" android:color="#FF0000" />
    <corners
     android:bottomRightRadius="15dp"
     android:bottomLeftRadius="15dp"
  android:topLeftRadius="15dp"
  android:topRightRadius="15dp"/>
</shape>
Run Code Online (Sandbox Code Playgroud)

而且...现在,EditText应该看起来像:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
<EditText  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    android:background="@drawable/rounded_edittext_states"
    android:padding="5dip"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

  • 除了您的解决方案对所有状态使用相同的drawable.除默认情况外,常规`EditText`具有不同的聚焦,禁用,按下和选择背景.特别是,如果我们得到一些缺少触摸屏的Android设备,例如Google TV,那么重点可能会很重要. (13认同)
  • 如果所有4个角的半径相同,则使用`android:radius`而不是定义4个线 (2认同)

Nor*_*ldt 126

这只是一个XML文件中的相同解决方案(带有一些额外的奖励代码):

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

<item android:state_pressed="true" android:state_focused="true">
    <shape>
        <solid android:color="#FF8000"/>
        <stroke
            android:width="2.3dp"
            android:color="#FF8000" />
         <corners
            android:radius="15dp" />
    </shape>
</item>

<item android:state_pressed="true" android:state_focused="false">
    <shape>
        <solid android:color="#FF8000"/>
        <stroke
            android:width="2.3dp"
            android:color="#FF8000" />      
        <corners
            android:radius="15dp" />       
    </shape>
</item>

<item android:state_pressed="false" android:state_focused="true">
    <shape>
        <solid android:color="#FFFFFF"/>
        <stroke
            android:width="2.3dp"
            android:color="#FF8000" />  
        <corners
            android:radius="15dp" />                          
    </shape>
</item>

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

<item android:state_enabled="true">
    <shape>
        <padding 
                android:left="4dp"
                android:top="4dp"
                android:right="4dp"
                android:bottom="4dp"
            />
    </shape>
</item>

</selector>
Run Code Online (Sandbox Code Playgroud)

然后,您只需将background属性设置为edittext_rounded_corners.xml文件:

<EditText  android:id="@+id/editText_name"
      android:background="@drawable/edittext_rounded_corners"/>
Run Code Online (Sandbox Code Playgroud)


sac*_*are 29

试试这个,

1.在Drawable中创建rounded_edittext.xml文件

    <?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>
Run Code Online (Sandbox Code Playgroud)

2.在xml文件中应用EditText的背景

                <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"/>
Run Code Online (Sandbox Code Playgroud)

你会得到这样的输出

在此输入图像描述

  • @JesseBoyd,您的担心是对的,但是此xml文件中的rounded_edittext只是根据您的要求更改所有Radius的值。 (2认同)

Say*_*yka 16

感谢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>
Run Code Online (Sandbox Code Playgroud)

在明亮的背景布局中看起来很棒..

在此输入图像描述


Com*_*are 7

按照我的想法,它已经有了圆角.

如果您希望它们更圆润,您需要:

  1. 克隆构成EditText背景的所有九个补丁PNG图像(可在SDK中找到)
  2. 修改每个以具有更多圆角
  3. 克隆StateListDrawable将这些EditText背景组合成单个的XML 资源Drawable,并将其修改为指向更全面的九个补丁PNG文件
  4. 使用new StateListDrawable作为EditText窗口小部件的背景


A D*_*oid 6

只是为了添加其他答案,我发现实现圆角的最简单的解决方案是将以下内容设置为 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>
Run Code Online (Sandbox Code Playgroud)


Gab*_*tti 5

随着材料零件库,你可以使用MaterialShapeDrawable绘制自定义形状

有了EditText你可以做:

    <EditText
        android:id="@+id/edittext"
        ../>
Run Code Online (Sandbox Code Playgroud)

然后创建一个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);
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

它需要库的1.1.0版。