首页 文章

如何创建带圆角的EditText?

提问于
浏览
238

有没有办法创建具有圆角的 EditText

6 回答

  • 7

    有一种比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>
    

    你会得到类似的东西:

    alt text

    编辑

    根据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>
    
  • 122

    这只是一个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"/>
    
  • 497

    试试这个,

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

    你会得到这样的输出

    enter image description here

  • 24

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

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

    enter image description here

  • 12

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

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

    • 克隆构成 EditText 背景的所有九个补丁PNG图像(可在SDK中找到)

    • 修改每个以获得更多圆角

    • 克隆将 EditText 背景组合成单个 Drawable 的XML StateListDrawable 资源,并将其修改为指向更全面的九个补丁PNG文件

    • 使用新的 StateListDrawable 作为 EditText 小部件的背景

  • 3

    如果你只想弯曲曲线不是整个结束,那么使用下面的代码 .

    <?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 的四个角度 .

相关问题