วิธีการเปลี่ยนสีของเส้นใน EditText


203

ฉันกำลังสร้าง EditText ในไฟล์ xml เลย์เอาต์ของฉัน

แต่ฉันต้องการเปลี่ยนเส้นสีใน EditText จาก Holo เป็น (เช่น) สีแดง สามารถทำได้อย่างไร?

ป้อนคำอธิบายรูปภาพที่นี่

คำตอบ:


310

นี่เป็นเครื่องมือที่ดีที่สุดที่คุณสามารถใช้ได้กับทุกมุมมองและขอขอบคุณ @ Jérôme Van Der Lindenอย่างเต็มที่

Android Holo Colors Generator ช่วยให้คุณสร้างส่วนประกอบ Android เช่นEditTextหรือสปินเนอร์ด้วยสีของคุณเองสำหรับแอปพลิเคชัน Android ของคุณ มันจะสร้างสินทรัพย์แก้ไขที่จำเป็นทั้งหมดเก้ารายการพร้อมกับความสามารถในการดึง XML และสไตล์ที่คุณสามารถคัดลอกไปยังโครงการของคุณได้โดยตรง

http://android-holo-colors.com/

อัพเดท 1

ดูเหมือนว่าโดเมนนี้จะหมดอายุ แต่โครงการเป็นโอเพนซอร์สที่คุณสามารถหาได้ที่นี่

https://github.com/jeromevdl/android-holo-colors

ลองมัน

ภาพนี้ใส่ในพื้นหลังของ EditText

android:background="@drawable/textfield_activated"

ป้อนคำอธิบายรูปภาพที่นี่


อัพเดท 2

สำหรับ API 21 หรือสูงกว่าคุณสามารถใช้ android:backgroundTint

<EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Underline color change"
        android:backgroundTint="@android:color/holo_red_light" />

อัปเดต 3 ตอนนี้เรามีการสนับสนุนด้านหลังAppCompatEditText

หมายเหตุ:เราต้องใช้แอพ: 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" />

ลิงค์ดูเหมือนจะตายใช่ไหม ซอฟต์แวร์ยังคงมีอยู่หรือไม่
เข้ารหัส John

1
@CodeJohn โครงการนี้เปิดมาคุณสามารถหาได้ที่นี่github.com/jeromevdl/android-holo-colors
MilapTank

และใครบอกว่าเราต้องใช้ "app: backgroundTint แทน android: backgroundTint" ??
user924

ถ้าคุณต้องการความเข้ากันได้แบบย้อนหลังคุณสามารถใช้แอพ: *** OW android: ***
MilapTank

202

ฉันไม่ชอบคำตอบก่อนหน้า ทางออกที่ดีที่สุดคือการใช้:

<android.support.v7.widget.AppCompatEditText

      app:backgroundTint="@color/blue_gray_light" />

android:backgroundTintสำหรับEditTextใช้กับAPI21 +เท่านั้น AppCompatEditTextเพราะมันเราจะต้องใช้ห้องสมุดสนับสนุนและ

หมายเหตุ: เราต้องใช้app:backgroundTintแทนandroid:backgroundTint

รุ่น AndroidX

<androidx.appcompat.widget.AppCompatEditText

      app:backgroundTint="@color/blue_gray_light" />

3
นี่คือทางออกที่ดีที่สุด! ง่ายและใช้ได้กับทุกระดับ API ขอบคุณ!
Ivo Stoyanov

7
คุณไม่จำเป็นต้องใช้ถ้าคุณใช้ไลบรารี appcompat EdtiTexts จะถูกเปลี่ยนเป็น AppCompatEditText โดยอัตโนมัติและใช้สีพื้นหลัง
stephane k

ฉันคิดว่านี่น่าจะเป็นทางออกอย่างแน่นอน
Thuy Nguyen

ขอบคุณมาก. ใช้งานได้กับ API 16+ ทางออกที่ดีที่สุด
André Luiz Reis

2
เป็นไปได้ที่จะตั้งค่าแอพ: backgroundTint โดยทางโปรแกรมหรือไม่ ฉันสามารถหาวิธี 'setBackgroundTint'
Sarath Nagesh

75

คุณสามารถเปลี่ยนสีขีดเส้นใต้ของ EditText ได้อย่างรวดเร็วโดยการย้อมสีพื้นหลังของ EditText ดังนี้:

<EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Something or Other"
            android:backgroundTint="@android:color/holo_green_light" />

18
ใช้งานได้กับ API 21 ขึ้นไปเท่านั้น มีวิธีใดที่จะทำให้การทำงานนี้ใช้ระดับ API ที่น้อยลง
Vucko

ตรวจสอบ reVerse solution stackoverflow.com/questions/26574328/…
powder366

@ mladj0ni Cool, + 1d
Vucko

3
สำหรับระดับ API ที่น้อยกว่าให้ใช้เฉพาะ "backgroundTint" แทน "android: backgroundTint" เครดิตstackoverflow.com/a/29400711/1590911
Hasaan Ali

เปลี่ยนสีพื้นหลังทั้งหมดไม่ใช่สีของเส้น
Code Wiget

29

สำหรับAPI ที่ต่ำกว่า 21 คุณสามารถใช้แอตทริบิวต์ attribute ในการEditText ใส่โค้ดด้านล่างลงในไฟล์สไตล์

<style name="MyEditTextTheme">
    <item name="colorControlNormal">#FFFFFF</item>
    <item name="colorControlActivated">#FFFFFF</item>
    <item name="colorControlHighlight">#FFFFFF</item>
</style>

ใช้สไตล์นี้ในEditTextฐานะ

<EditText
    android:id="@+id/etPassword"
    android:layout_width="match_parent"
    android:layout_height="@dimen/user_input_field_height"
    android:layout_marginTop="40dp"
    android:hint="@string/password_hint"
    android:theme="@style/MyEditTextTheme"
    android:singleLine="true" />

คุณรู้วิธีเพิ่ม alpha / opacity ในไฟล์สไตล์หรือไม่ เช่นเดียวกับที่ควรจะใช้สีปกติด้วยความทึบและเมื่อพวกเขาเริ่มพิมพ์มันควรใช้สีที่เปิดใช้งานหรือเน้นสี
ASN

1
@ANS การที่คุณต้องเพิ่มฟังเฝ้าดูข้อความและตั้งค่าความทึบใน "onTextChanged" วิธีการแบบไดนามิก
ราหุล

โอ้ ดังนั้นจึงไม่สามารถเพิ่มลงในไฟล์การจัดรูปแบบหรือตัวเลือกและควรทำแบบไดนามิกหรือไม่
ASN

@ASN opacity ถูกเพิ่มในสี hex ฉัน i ตัวละครสองตัวแรก 00-FF ดังนั้นตัวอย่าง: # A1FAFAFA
aimiliano

21

โดยทางโปรแกรมคุณสามารถลอง:

editText.getBackground().mutate().setColorFilter(getResources().getColor(android.R.color.holo_red_light), PorterDuff.Mode.SRC_ATOP);

2
คำตอบที่ดีที่สุดสำหรับ Xamarin.Forms effect
mister_giga

11

ฉันคิดว่าวิธีที่ดีที่สุดคือตามธีม:

<style name="MyEditTextTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorControlNormal">@color/black</item>
        <item name="colorControlActivated">@color/action_blue</item>
        <item name="colorControlHighlight">@color/action_blue</item>
</style>

<style name="AddressBookStyle" parent="Theme.AppCompat.Light.DarkActionBar">
     <item name="android:layout_width">match_parent</item>
     <item name="android:layout_height">wrap_content</item>
     <item name="android:textSize">13sp</item>
     <item name="android:theme">@style/MyEditTextTheme</item>
</style>

<android.support.v7.widget.AppCompatEditText
            style="@style/AddressBookStyle"/>

2
สิ่งนี้ใช้ไม่ได้กับฉันด้วยแท็กสไตล์ แต่สำหรับ Android: ธีมแท็ก
aimiliano

9

ในการเปลี่ยนสีขีดเส้นใต้ของ Edittext:

หากคุณต้องการให้ทั้งแอปแชร์สไตล์นี้คุณสามารถทำตามวิธีดังต่อไปนี้

(1) ไปที่ไฟล์ styles.xml AppTheme ของคุณที่สืบทอดพาเรนต์ของ Theme.AppCompat.Light.DarkActionBar (ในกรณีของฉัน) จะเป็นพาเรนต์หลักของไฟล์สไตล์ทั้งหมดในแอปของคุณ เปลี่ยนชื่อเป็น“ AppBaseTheme ' สร้างสไตล์อื่นภายใต้ชื่อ AppTheme และสืบทอดจาก AppBaseTheme ที่คุณเพิ่งแก้ไข มันจะมีลักษณะดังนี้:

<!-- Base application theme. -->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="windowActionBar">false</item>
    <!--see http://www.google.com/design/spec/style/color.html#color-color-palette-->
    <item name="colorPrimary">@color/material_brown_500</item>
    <item name="colorPrimaryDark">@color/material_brown_700</item>
    <item name="colorAccent">@color/flamingo</item>

<style name="AppTheme" parent="AppBaseTheme">
    <!-- Customize your theme here. -->
</style>

จากนั้นเปลี่ยน "colorAccent" เป็นสีใดก็ได้ที่คุณต้องการให้สีเส้น EditText ของคุณเป็น

(2) ถ้าคุณมีโฟลเดอร์ค่าอื่น ๆ ที่มี style.xml ขั้นตอนนี้สำคัญมาก เพราะไฟล์นั้นจะสืบทอดมาจากไฟล์ xml พาเรนต์ก่อนหน้าของคุณ ตัวอย่างเช่นฉันมี values-19 / styles.xml นี่คือเฉพาะสำหรับ Kitkat ขึ้นไป เปลี่ยนพาเรนต์เป็น AppBaseTheme และตรวจสอบให้แน่ใจว่าได้กำจัด“ colorAccent” เพื่อไม่ให้ลบล้างสีของผู้ปกครอง นอกจากนี้คุณต้องเก็บไอเท็มเฉพาะสำหรับเวอร์ชัน 19 จากนั้นจะมีลักษณะเช่นนี้

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">
        <item name="android:windowTranslucentStatus">true</item>
    </style>
</resources>

9

มันค่อนข้างง่าย (จำเป็น: API ขั้นต่ำ 21) ...

  1. ไปที่ xml ของคุณและเลือกฟิลด์ EditText
  2. ทางด้านขวาคุณจะเห็นหน้าต่าง 'แอตทริบิวต์' เลือก 'ดูคุณสมบัติทั้งหมด'
  3. เพียงค้นหา 'tint'
  4. และเพิ่ม / เปลี่ยน 'backgroundTint' เป็น hex สีที่ต้องการ (พูด # FF0000)

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

เข้ารหัสต่อไป ........ :)


2
API ขั้นต่ำ 21.
Maihan Nijat

การเปลี่ยนสีพื้นหลังเปลี่ยนพื้นหลัง คำตอบนี้ไม่ถูกต้อง
รหัส Wiget

6

สีของเส้นถูกกำหนดโดยEditTextคุณสมบัติพื้นหลังของ หากต้องการเปลี่ยนคุณควรเปลี่ยนไฟล์android:backgroundในโครงร่าง

ฉันควรทราบว่าสไตล์นี้ทำได้โดยใช้โปรแกรม 9-patchable หากคุณดูใน SDK คุณจะเห็นว่าพื้นหลังของEditTextภาพนี้คือ:

textfield_activated_holo_light.9.png

หากต้องการเปลี่ยนคุณสามารถเปิดได้ในโปรแกรมการจัดการภาพและสีในสีที่ต้องการ บันทึกเป็นbg_edit_text.9.pngแล้วใส่ไว้ในโฟลเดอร์ที่คุณวาดได้ ตอนนี้คุณสามารถใช้เป็นพื้นหลังสำหรับสิ่งที่คุณEditTextชอบได้:

android:background="@drawable/bg_edit_text"

5

คุณสามารถเปลี่ยนสีของ EditText โดยทางโปรแกรมโดยใช้โค้ดบรรทัดนี้:edittext.setBackgroundTintList(ColorStateList.valueOf(yourcolor));


นั่นคือสิ่งที่ฉันกำลังมองหา! ขอบคุณ
Jiratchaya Intaragumhaeng

4

พื้นหลังของเครื่องมือที่มีระดับ API ขึ้น

ทางเลือก 1

คุณสามารถให้ภาพที่กำหนดเองกับEditTextพื้นหลังของคุณโดย

android:background="@drawable/custom_editText"

ภาพของคุณควรมีลักษณะเช่นนี้ มันจะให้ผลที่ต้องการ

ป้อนคำอธิบายรูปภาพที่นี่

ทางเลือก 2

ตั้ง xml นี้เป็นEditTextคุณสมบัติพื้นหลังของคุณ

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
 android:shape="rectangle" android:padding="10dp">
<solid android:color="#4C000000"/>
    <corners android:bottomRightRadius="5dp"
             android:bottomLeftRadius="5dp"
             android:topLeftRadius="5dp"
             android:topRightRadius="5dp"/>
</shape>

สิ่งนี้จะมีรูปลักษณ์และความรู้สึกเดียวกันกับคุณEditTextในทุก ๆ API


ฉันสนใจรุ่น 4.0 ขึ้นไป นั่นคือฉันต้องการเปลี่ยนสีของเส้นเมื่อ EditText ที่ใช้งานอยู่
อเล็กซ์

4

คุณสามารถเปลี่ยนสีด้วยการย้อมสีพื้นหลัง <EditText android:backgroundTint="@color/red"/>


1
ใช้งานได้กับ api> 21 เท่านั้นคุณควรปฏิบัติตาม @Rahul คำตอบสำหรับ apis ทั้งหมดหรือเพิ่มเลย์เอาต์ที่แตกต่างกันสำหรับ api> 21 ในโฟลเดอร์ layout-21
aimiliano

4

drawable / bg_edittext.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="@android:color/transparent" />
        </shape>
    </item>

    <item
        android:left="-2dp"
        android:right="-2dp"
        android:top="-2dp">
        <shape>
            <solid android:color="@android:color/transparent" />
            <stroke
                android:width="1dp"
                android:color="@color/colorDivider" />
        </shape>
    </item>
</layer-list>

ตั้งค่าเป็น EditText

<android.support.v7.widget.AppCompatEditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/bg_edittext"/>

3

ใช้วิธีนี้ .. และแก้ไขตามชื่อมุมมองของคุณ รหัสนี้ใช้งานได้ดี

 private boolean validateMobilenumber() {
            if (mobilenumber.getText().toString().trim().isEmpty() || mobilenumber.getText().toString().length() < 10) {
                input_layout_mobilenumber.setErrorEnabled(true);
                input_layout_mobilenumber.setError(getString(R.string.err_msg_mobilenumber));
               // requestFocus(mobilenumber);
                return false;
            } else {
                input_layout_mobilenumber.setError(null);
                input_layout_mobilenumber.setErrorEnabled(false);
                mobilenumber.setBackground(mobilenumber.getBackground().getConstantState().newDrawable());
            }

2

หากคุณต้องการเส้นแบนคุณสามารถทำได้อย่างง่ายดายด้วย xml นี่คือตัวอย่าง xml:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:top="-1dp"
        android:left="-1dp"
        android:right="-1dp"
        android:bottom="1dp"
        >
        <shape android:shape="rectangle">
            <stroke android:width="1dp" android:color="#6A9A3A"/>
        </shape>
    </item>
</layer-list>

แทนที่รูปร่างด้วยตัวเลือกหากคุณต้องการระบุความกว้างและสีที่แตกต่างกันเพื่อเน้น edittext


1
ด้วยการออกแบบวัสดุมันสร้างสี่เหลี่ยมผืนผ้าโดยมีบรรทัดล่างที่กว้างขึ้น
Filip Zymek

2

วิธีที่ดีที่สุดคือใช้AppCompatEditTextกับbackgroundTintแอตทริบิวต์ของappเนมสเปซ กล่าวคือ

    <android.support.v7.widget.AppCompatEditText
    android:layout_width="match_parent"      
    app:backgroundTint="YOUR COLOR"
    android:layout_height="wrap_content" />

เมื่อเราใช้android:backgroundTintมันจะทำงานได้ใน API21 หรือมากกว่าเท่านั้น แต่app:backgroundTintใช้ได้กับทุกระดับ API ที่แอปของคุณใช้


1

ใช้ android: คุณสมบัติพื้นหลังสำหรับ edittext นั้น ส่งผ่านอิมเมจของโฟลเดอร์ drawable ตัวอย่างเช่น,

android:background="@drawable/abc.png"

1
 <EditText
        android:id="@+id/et_password_tlay"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Password"
        android:textColorHint="#9e9e9e"
        android:backgroundTint="#000"
        android:singleLine="true"
        android:drawableTint="#FF4081"
        android:paddingTop="25dp"
        android:textColor="#000"
        android:paddingBottom="5dp"
        android:inputType="textPassword"/>

    <View
        android:id="@+id/UnderLine"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_below="@+id/et_password_tlay"
        android:layout_centerHorizontal="true"
        android:background="#03f94e" />

** มันเป็นหนึ่งในการทำกับมุมมอง **


1

ลองวิธีต่อไปนี้มันจะแปลงสีบรรทัดด้านล่างของ EditText เมื่อใช้เป็นคุณสมบัติพื้นหลัง

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:left="@dimen/spacing_neg"
        android:right="@dimen/spacing_neg"
        android:top="@dimen/spacing_neg">
        <shape>
            <solid android:color="@android:color/transparent" />
            <stroke
                android:width="@dimen/spacing_1"
                android:color="@android:color/black" />
        </shape>
    </item>
</layer-list>

0

สิ่งนี้สามารถทำได้โดยการรวมสิ่งนี้android:theme="@style/AppTheme.AppBarOverlayเป็นคุณลักษณะในสำหรับ editText ของคุณและเพิ่ม<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />ให้กับสไตล์ของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.