Hoe maak je EditText met afgeronde hoeken?

Is er een manier om EditTextte maken met afgeronde hoeken?


Antwoord 1, autoriteit 100%

Er is een eenvoudigere manier dan die geschreven door CommonsWare. Maak gewoon een tekenbare bron die aangeeft hoe de EditTextzal worden getekend:

<?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>

Verwijs vervolgens naar dit tekenbare bestand in uw lay-out:

<?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>

Je krijgt zoiets als:

alt-tekst

Bewerken

Op basis van de opmerking van Mark wil ik de manier toevoegen waarop u verschillende toestanden kunt maken voor uw 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>

Dit zijn de statussen:

<?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>

En… nu zou de EditTexter als volgt uit moeten zien:

<?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>

Antwoord 2, autoriteit 22%

Hier is dezelfde oplossing (met wat extra bonuscode) in slechts één XML-bestand:

<?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>

Je stelt dan het background attribuut in op edittext_rounded_corners.xml file:

<EditText  android:id="@+id/editText_name"
      android:background="@drawable/edittext_rounded_corners"/>

Antwoord 3, autoriteit 6%

Probeer deze eens,

  1. Maak rounded_edittext.xmlbestand in je 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. Achtergrond toepassen voor uw EditTextin xml-bestand

    <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. Je krijgt zo’n output

voer hier de afbeeldingsbeschrijving in


Antwoord 4, autoriteit 3%

Bedankt voor het antwoord van Norfeldt. Ik heb het verloop iets gewijzigd voor een beter innerlijk schaduweffect.

<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>

Ziet er geweldig uit in een lichte achtergrondlay-out..

voer hier de afbeeldingsbeschrijving in


Antwoord 5

Volgens mijn manier van denken heeft het al afgeronde hoeken.

Als je ze meer afgerond wilt hebben, moet je:

  1. Kloon alle negen-patch PNG-afbeeldingen die een EditText-achtergrond vormen (te vinden in uw SDK)
  2. Wijzig elk om meer afgeronde hoeken te hebben
  3. Kloon de XML StateListDrawable-bron die die EditText-achtergronden combineert in een enkele Drawable, en pas deze aan zodat deze verwijst naar je meer afgeronde negen -patch PNG-bestanden
  4. Gebruik die nieuwe StateListDrawableals achtergrond voor je EditText-widget

Antwoord 6

Met de bibliotheek met materiaalcomponenten kunt u de MaterialShapeDrawablenaar aangepaste vormen tekenen.

Met een EditTextkun je het volgende doen:

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

Maak vervolgens een 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);

voer hier de afbeeldingsbeschrijving in

Het vereist de versie 1.1.0van de bibliotheek.


Antwoord 7

Om aan de andere antwoorden toe te voegen, ontdekte ik dat de eenvoudigste oplossing om de afgeronde hoeken te krijgen, was om het volgende als achtergrond voor je Edittext in te stellen.

<?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>

Antwoord 8

Als je wilt dat alleen de hoek een kromming mag hebben en niet het hele uiteinde, gebruik dan onderstaande code.

<?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>

Het zal alleen de vier hoeken van EditTextbuigen.

Other episodes