¿Hay alguna forma de crear EditTextque tenga esquinas redondeadas?
280
¿Hay alguna forma de crear EditTextque tenga esquinas redondeadas?
Hay una manera más fácil que la escrita por CommonsWare. Simplemente cree un recurso dibujable que especifique la forma en EditTextque se dibujará:
<?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>
Luego, solo haga referencia a este dibujo en su diseño:
<?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>
Obtendrás algo como:

Según el comentario de Mark, quiero agregar la forma en que puede crear diferentes estados para su 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>
Estos son los estados:
<?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>
Y ... ahora, EditTextdebería verse así:
<?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>
EditTexttiene diferentes fondos para enfocado, deshabilitado, presionado y seleccionado, además del predeterminado. Enfocado, en particular, puede ser importante en el futuro si tenemos algunos dispositivos Android que carecen de pantallas táctiles, como Google TV.android:radiuslugar de definir 4 líneasAquí está la misma solución (con algún código de bonificación adicional) en un solo archivo XML:
Luego, simplemente configura el atributo de fondo para editar el archivo Texttext_itated_corners.xml:
fuente
topRightRadiusytopLeftRadiuslas cuatro esquinas terminan redondeadas. Por favor ayuda. :(Prueba este,
1.Cree el archivo rounded_edittext.xml en su Drawable
2. Aplicar fondo para su EditText en el archivo xml
3. Obtendrá una salida como esta
fuente
Gracias por la respuesta de Norfeldt. He realizado un ligero cambio en su gradiente para un mejor efecto de sombra interior.
Se ve muy bien en un diseño de fondo claro.
fuente
Desde mi punto de vista, ya tiene esquinas redondeadas.
En caso de que desee que sean más redondeados, deberá:
EditTextfondo (que se encuentra en su SDK)StateListDrawablerecurso XML que combina esosEditTextfondos en un soloDrawabley modifíquelo para que apunte a sus archivos PNG más completos de nueve parchesStateListDrawablecomo fondo para suEditTextwidgetfuente
Si solo desea que la esquina no se curve todo el extremo, use el siguiente código.
Solo curvará los cuatro ángulos de
EditText.fuente
Solo para agregar a las otras respuestas, descubrí que la solución más simple para lograr las esquinas redondeadas era establecer lo siguiente como fondo para su Edittext.
fuente
Con la Biblioteca de componentes de material puede usar
MaterialShapeDrawablepara dibujar formas personalizadas .Con un
EditTextpuedes hacer:Luego crea un
MaterialShapeDrawable:Requiere la versión 1.1.0 de la biblioteca.
fuente