如何更改默认EditText的样式

32
我将使用如下代码在我的xml文件中创建三个EditText
<EditText
    android:id="@+id/name_edit_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/profile_image_view_layout"
    android:layout_centerHorizontal="true"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:layout_marginTop="20dp"
    android:ems="15"
    android:hint="@string/name_field"
    android:inputType="text" />

当我运行App时,它在我的设备上看起来像这样:enter image description here。但是我想让它看起来像这样,而不使用任何背景图片:enter image description here。那么这可以如何实现呢? 有什么想法或建议将会很有帮助。
6个回答

39

创建类似edit_text_design.xml的xml文件,并将其保存到drawable文件夹中

我根据我的选择给出了颜色代码,请根据您的选择更改颜色代码!

 <?xml version="1.0" encoding="utf-8"?>
  <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

<item>
    <shape>
        <solid android:color="#c2c2c2" />
    </shape>
</item>

<!-- main color -->
<item
    android:bottom="1.5dp"
    android:left="1.5dp"
    android:right="1.5dp">
    <shape>
        <solid android:color="#000" />
    </shape>
</item>

<!-- draw another block to cut-off the left and right bars -->
<item android:bottom="5.0dp">
    <shape>
        <solid android:color="#000" />
    </shape>
</item>

</layer-list>

你的EditText应该将此内容作为其背景:

android:background="@drawable/edit_text_design"添加到您所有的EditText中

现在,您的上述EditText应如下所示:

      <EditText
        android:id="@+id/name_edit_text"
        android:background="@drawable/edit_text_design"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/profile_image_view_layout"
        android:layout_centerHorizontal="true"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="20dp"
        android:ems="15"
        android:hint="@string/name_field"
        android:inputType="text" />

我尝试了你的代码,但是所有的边框都从editText中移除了。但在我的情况下,我想要一个蓝色的线在edit text底部,就像屏幕截图中显示的那样。 - Rahul
1
但EditText的主体变成了黑色..如何使其透明。实际上,在EditText获得焦点时,我想显示蓝色,当焦点从EditText移开时,我想显示灰色..该怎么做? - Rahul
1
如果您想要透明的背景和实色线条,这种策略是行不通的。 - Josh

29
您有几个选项。
  1. 使用Android资产工作室Android Holo颜色生成器生成资源、样式和主题,以便在所有设备上实现holo外观。

  2. 使用holo everywhere库。

  3. 使用holo文本字段的PNG并将其设置为自己的背景图像。 您可以从Android资产工作室holo颜色生成器中获取图像。 您需要制作一个drawable并定义正常、选定和禁用状态。

更新 2016-01-07

此答案现已过时。 Android具有着色API和直接对控件进行主题的能力。如何为任何元素设置样式或主题的好参考是名为materialdoc的网站。


如果我在所有地方更改主题为Holo,那么它可以工作,但是如何根据我的自定义颜色更改框的颜色呢?我的意思是现在我将主题更改为Holo。因此,当未聚焦时,编辑文本显示灰色线条,并在聚焦时显示蓝色线条,那么该颜色如何进行自定义设置。 - Rahul
这只是整个活动或片段的背景图像...如果您需要它成为edittext的背景,则必须扩展edittext。 - Ali
@Ali,嗨,当我使用你的第三个建议时,将其设置为EditText的背景时,我的drawable看起来被拉伸了。 - anshul
@anshul,这些图片应该是patch-9格式的图片。 - Ali
特别是materialdoc网站上的链接对我非常有帮助,这里是关于editText的链接:http://www.materialdoc.com/edit-text/。 - Elementary
当向量开始变得更加普遍时,此链接已被弃用,现在可以在这里找到。但正如更新中所提到的,您现在要么使用着色,要么使用样式或主题元素,如materialdoc页面所示。 - Ali

11

我在10分钟前解决了同样的问题,所以我会给你一个简短有效的修复方法:将以下内容放置在应用程序标签或您的清单中:

 android:theme="@android:style/Theme.Holo"

同时,在布局的图形视图中将 XML 布局的主题设置为 Holo。

如果需要更改更复杂的主题内容,库会很有用,但这个小修复程序可以起作用,因此您可以继续使用您的应用程序。


我把这个放在我的EditText里面,它运行得非常好! - Sam Chen

6

edittext_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/edittext_pressed" android:state_pressed="true" /> <!-- pressed -->
    <item android:drawable="@drawable/edittext_disable" android:state_enabled="false" /> <!-- focused -->
    <item android:drawable="@drawable/edittext_default" /> <!-- default -->
</selector>

edittext_default.xml

       <?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <shape android:shape="rectangle" >
            <solid android:color="#BBDEFB" />
            <padding android:bottom="2dp" />
        </shape>
    </item>
    <item android:bottom="5dp">
        <shape android:shape="rectangle" >
            <solid android:color="#fff" />

            <padding
                android:left="0dp"
                android:right="0dp" />
        </shape>
    </item>
    <item>
        <shape android:shape="rectangle" >
            <solid android:color="#fff" />
        </shape>
    </item>
</layer-list>

edittext_pressed.xml

 <?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <shape android:shape="rectangle" >
            <solid android:color="#00f" />
            <padding android:bottom="2dp" />
        </shape>
    </item>
    <item android:bottom="5dp">
        <shape android:shape="rectangle" >
            <solid android:color="#fff" />

            <padding
                android:left="0dp"
                android:right="0dp" />
        </shape>
    </item>
    <item>
        <shape android:shape="rectangle" >
            <solid android:color="#fff" />
        </shape>
    </item>

</layer-list>

edittext_disable.xml

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
        <item>
            <shape android:shape="rectangle" >
                <solid android:color="#aaaaaa" />
                <padding android:bottom="2dp" />
            </shape>
        </item>
        <item android:bottom="5dp">
            <shape android:shape="rectangle" >
                <solid android:color="#fff" />

                <padding
                    android:left="0dp"
                    android:right="0dp" />
            </shape>
        </item>
        <item>
            <shape android:shape="rectangle" >
                <solid android:color="#fff" />
            </shape>
        </item>

    </layer-list>

在API 10+的情况下,它可以正常工作且不需要使用九宫格。以下是一个示例图片:

enter image description here

5
我使用以下代码。请检查是否有所帮助。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <shape android:shape="rectangle" >
            <solid android:color="#00f" />
            <padding android:bottom="2dp" />
        </shape>
    </item>
    <item android:bottom="10dp">
        <shape android:shape="rectangle" >
            <solid android:color="#fff" />

            <padding
                android:left="2dp"
                android:right="2dp" />
        </shape>
    </item>
    <item>
        <shape android:shape="rectangle" >
            <solid android:color="#fff" />
        </shape>
    </item>
</layer-list>

你能解释一下正在发生什么以及问题是什么吗? - Rahil Wazir
3
问题:有人想要那种样式,但不想要一张图片。解决方案:获取你想要的颜色盒子,然后用不同颜色的盒子(在这种情况下必须与背景颜色相同,透明度在此处无效)隐藏部分,以获得所需的形状。为什么我要这样做,因为它让我可以自由更改文本框的颜色,如果使用图片,则需要创建所有这些彩色图片。 - user2743811

0

现在针对 AppCompatEditText

注意:我们需要使用app:backgroundTint而不是android:backgroundTint

<android.support.v7.widget.AppCompatEditText
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:hint="Underline color change"
    app:backgroundTint="@color/blue_gray_light" />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接