Est-il possible de créer EditText
avec des angles arrondis?
Il existe un moyen plus simple que celui écrit par CommonsWare. Créez simplement une ressource pouvant être dessinée qui spécifie la manière dont la EditText
sera dessinée:
<?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>
Ensuite, il suffit de référencer ce dessin dans votre mise en page:
<?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>
Vous obtiendrez quelque chose comme:
Sur la base du commentaire de Mark, je souhaite ajouter la manière dont vous pouvez créer différents états pour votre 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>
Ce sont les états:
<?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>
Et ... maintenant, la EditText
devrait ressembler à ceci:
<?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>
Voici la même solution (avec du code bonus supplémentaire) dans un seul fichier 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>
Vous définissez ensuite l'attribut background avec le fichier edittext_rounded_corners.xml:
<EditText Android:id="@+id/editText_name"
Android:background="@drawable/edittext_rounded_corners"/>
Essaye celui-là,
1.Créez le fichier rounded_edittext.xml dans votre 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>
2.Appliquez fond pour votre EditText au format XML
<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"/>
3.Vous obtiendrez une sortie comme celle-ci
Merci pour la réponse de Norfeldt. J'ai légèrement modifié son dégradé pour un meilleur effet d'ombre interne.
<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>
S'agence bien dans une mise en page clair.
À mon avis, les angles sont déjà arrondis.
Au cas où vous les voudriez plus arrondis, vous devrez:
EditText
(présent dans votre SDK).StateListDrawable
qui combine ces arrière-plans EditText
en un seul Drawable
et modifiez-la pour qu'elle pointe vers vos fichiers PNG plus complets de neuf correctifs.StateListDrawable
comme arrière-plan pour votre widget EditText
Si vous voulez que le coin ne soit pas courbé, utilisez le code ci-dessous.
<?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>
Cela ne fera que courber les quatre angles de EditText
.
Juste pour ajouter aux autres réponses, j’ai trouvé que la solution la plus simple pour obtenir les angles arrondis consistait à définir les éléments suivants comme arrière-plan de votre 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>