有没有办法创建具有圆角的 EditText ?
EditText
有一种比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>
然后,只需在您的布局中引用此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>
你会得到类似的东西:
根据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>
这些是州:
<?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>
而且......现在,_1165602应该是这样的:
<?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>
这只是一个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>
然后,您只需将background属性设置为edittext_rounded_corners.xml文件:
<EditText android:id="@+id/editText_name" android:background="@drawable/edittext_rounded_corners"/>
试试这个,
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>
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"/>
你会得到这样的输出
感谢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 背景的所有九个补丁PNG图像(可在SDK中找到)
修改每个以获得更多圆角
克隆将 EditText 背景组合成单个 Drawable 的XML StateListDrawable 资源,并将其修改为指向更全面的九个补丁PNG文件
Drawable
StateListDrawable
使用新的 StateListDrawable 作为 EditText 小部件的背景
如果你只想弯曲曲线不是整个结束,那么使用下面的代码 .
<?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 的四个角度 .
6 回答
有一种比CommonsWare编写的更简单的方法 . 只需创建一个可绘制资源,指定
EditText
的绘制方式:然后,只需在您的布局中引用此drawable:
你会得到类似的东西:
编辑
根据Mark的评论,我想添加为
EditText
创建不同状态的方式:这些是州:
而且......现在,_1165602应该是这样的:
这只是一个XML文件中的相同解决方案(带有一些额外的奖励代码):
然后,您只需将background属性设置为edittext_rounded_corners.xml文件:
试试这个,
1.在Drawable中创建rounded_edittext.xml文件
2.在xml文件中应用EditText的背景
你会得到这样的输出
感谢Norfeldt的回答 . 我在其渐变中做了一些微小的改变,以获得更好的内部阴影效果 .
在明亮的背景布局中看起来很棒..
按照我的想法,它已经有了圆角 .
如果您希望它们更圆润,您需要:
克隆构成
EditText
背景的所有九个补丁PNG图像(可在SDK中找到)修改每个以获得更多圆角
克隆将
EditText
背景组合成单个Drawable
的XMLStateListDrawable
资源,并将其修改为指向更全面的九个补丁PNG文件使用新的
StateListDrawable
作为EditText
小部件的背景如果你只想弯曲曲线不是整个结束,那么使用下面的代码 .
它只会弯曲
EditText
的四个角度 .