EditText ขีดเส้นใต้คุณสมบัติข้อความ


108

ฉันต้องการเปลี่ยนสีน้ำเงินด้านล่างข้อความแก้ไขฉันไม่รู้ว่ามันคือคุณสมบัติอะไร

ฉันลองใช้สีพื้นหลังที่แตกต่างออกไป แต่มันไม่ได้ผล

ฉันแนบภาพด้านล่าง:

ใส่คำอธิบายภาพที่นี่


นี่คือพื้นหลังสำหรับ EditText ซึ่งมีอยู่ในระดับ api / โทรศัพท์บางรุ่น กล่าวอีกนัยหนึ่งคือหากแอปของคุณทำงานบนโทรศัพท์เครื่องอื่นคุณอาจเห็นพื้นหลังที่ต่างออกไป
Sherif elKhatib

สร้างพื้นหลังแก้ไขข้อความที่คุณกำหนดเอง
Vijju

1
อาจมีการทำซ้ำของเธรดก่อนหน้า โปรดตรวจสอบที่stackoverflow.com/a/4585750/1129468
gokhanakkurt

ใช้โค้ดด้านล่างและแจ้งให้เราทราบว่าใช้งานได้หรือไม่
InnocentKiller

คำตอบ:


90

จริงๆแล้วการตั้งค่าสีขีดเส้นใต้ของ EditText แบบเป็นโปรแกรมนั้นค่อนข้างง่าย (โค้ดเพียงบรรทัดเดียว)

ในการตั้งค่าสี:

editText.getBackground().setColorFilter(color, PorterDuff.Mode.SRC_IN);

ในการลบสี:

editText.getBackground().clearColorFilter();

หมายเหตุ: เมื่อ EditText โฟกัสแล้วสีที่คุณตั้งไว้จะไม่มีผล แต่จะมีสีโฟกัสแทน

การอ้างอิง API:

# setColorFilter ที่วาดได้

# clearColorFilter ที่วาดได้


4
ยังใช้งานได้กับ Xamarin สำหรับ Android ใน OnElementChanged เรนเดอร์ที่คุณกำหนดเองได้Control.Background.SetColorFilter(Android.Graphics.Color.White, PorterDuff.Mode.SrcIn);
David Conlisk

@DavidConlisk ที่Rendererคุณแทนที่? ฉันกำลังพยายามหาวิธีทำให้มันใช้งานได้กับแถบค้นหา
Nick N.

@NickN. ฉันใช้สิ่งนี้สำหรับเครื่องมือเลือกดังนั้นฉันจึงลบล้าง PickerRenderer ควรใช้กับเรนเดอร์อะไรก็ได้ที่เหมาะกับคุณที่สุด (ในทางทฤษฎี!)
David Conlisk

1
ผมคิดว่ามันควร แต่ปัญหาที่อาจเป็นไปได้ว่าไม่ได้เป็นประเภทSearchBarRenderer EditTextไม่สามารถใช้งานได้
Nick N.

85

ใช้android:backgroundTint=""ในEditTextเค้าโครง xml ของคุณ

สำหรับ api <21 คุณสามารถใช้AppCompatEditTextจากไลบรารีสนับสนุนได้app:backgroundTint=""


14
ขณะนี้ใช้ได้เฉพาะใน API 21 ขึ้นไป ไม่มีการสนับสนุนย้อนหลัง
John Shelley

2
นี่เป็นวิธีแก้ปัญหาที่ง่ายและรัดกุมที่สุด
IgorGanapolsky

@JohnShelley ดูคำตอบของฉันด้านล่างมันใช้ได้กับ Pre-Lollipop ขึ้นไป
Sufian

3
android:background="@null"สำหรับอุปกรณ์ที่มี api <21
Hammad Nasir

4
เพื่อให้แอตทริบิวต์นี้ทำงานใน API ที่ต่ำกว่า 21 คุณควรใช้เนมสเปซแอป (xmlns: app = " schemas.android.com/apk/res-auto" ) แทน Android
Andrei K.

38

คุณต้องใช้ภาพพื้นหลังที่แตกต่างกันไม่ใช่สีสำหรับแต่ละสถานะของEditText(โฟกัสเปิดใช้งาน)

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

ในไซต์ด้านบนคุณจะได้รับรูปภาพจากส่วนประกอบมากมายในธีม Holo เพียงเลือก "EditText" และสีที่คุณต้องการ คุณสามารถดูตัวอย่างได้ที่ด้านล่างของหน้า

ดาวน์โหลดไฟล์. zip และคัดลอกวางทรัพยากรในโปรเจ็กต์ของคุณ (รูปภาพและ XML)

ถ้า XML ของคุณชื่อ: apptheme_edit_text_holo_light.xml (หรืออะไรที่คล้ายกัน):

  1. ไปที่ XML ของคุณ "styles.xml" และเพิ่มEditTextสไตล์ที่กำหนดเอง:

    <style name="EditTextCustomHolo" parent="android:Widget.EditText">
       <item name="android:background">@drawable/apptheme_edit_text_holo_light</item>
       <item name="android:textColor">#ffffff</item>
    </style>
    
  2. เพียงทำสิ่งนี้ในEditText:

    <EditText
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       style="@style/EditTextCustomHolo"/>
    

และนั่นก็คือฉันหวังว่ามันจะช่วยคุณได้


24

ใช้งานได้ดีสำหรับ Android เวอร์ชันเก่าและเวอร์ชันใหม่ (ทำงานได้ดีแม้ใน API 10!)

กำหนดรูปแบบนี้ในstyles.xml:

<style name="EditText.Login" parent="Widget.AppCompat.EditText">
    <item name="android:textColor">@android:color/white</item>
    <item name="android:textColorHint">@android:color/darker_gray</item>
    <item name="colorAccent">@color/blue</item>
    <item name="colorControlNormal">@color/blue</item>
    <item name="colorControlActivated">@color/blue</item>
</style>

และตอนนี้ใน XML ของคุณตั้งค่านี้เป็นธีมและสไตล์ ( สไตล์ที่จะตั้งtextColorและธีมเพื่อตั้งค่าสิ่งอื่น ๆ ทั้งหมด):

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="text"
    style="@style/EditText.Login"
    android:theme="@style/EditText.Login"/>

แก้ไข

โซลูชันนี้ทำให้ UI ผิดพลาดเล็กน้อยใน Android เวอร์ชันใหม่ ๆ (Lollipop หรือ Marshmallow เป็นต้นไป) ซึ่งการจัดการการเลือกจะถูกขีดเส้นใต้

ปัญหานี้จะกล่าวถึงในชุดข้อความนี้ (ฉันยังไม่ได้ลองวิธีนี้เป็นการส่วนตัว)


ขอบคุณคำตอบที่ดี การใช้ parent = "Widget.AppCompat.EditText" แทน parent = "android: Widget.EditText" แก้ปัญหาหลักของฉันได้
cfl

1
ฉันคิดว่าคุณหมายถึงผลงานนี้ Lollipop (21) ขึ้นไปเพราะฉันได้รับคำเตือนว่าไม่ต่ำกว่า 21
Mark O'Sullivan

@ MarkO'Sullivan ไม่สิ่งนี้ใช้ได้กับ Pre-Lollipop และตลอดทาง ฉันได้ทดสอบกับ API 10 แล้วและใช้งานได้ดี โปรดวางข้อผิดพลาดทั้งหมดและตำแหน่งที่แสดง
Sufian

ข้อความแก้ไขที่โฟกัสยังคงมีสีหลักสำหรับฉันดังนั้นฉันจึงต้องใช้วิธีนี้: stackoverflow.com/a/36543554/2413303
EpicPandaForce

18

คุณสามารถเปลี่ยนขีดเส้นใต้ของEditTextสีที่ระบุไว้ในstyles.xml ในธีมของแอป styles.xml ให้เพิ่มสิ่งต่อไปนี้

<item name="android:textColorSecondary">@color/primary_text_color</item> 

ตามที่ระบุไว้โดย ana ในส่วนความคิดเห็น

  <item name="android:colorControlActivated">@color/black</item>

การตั้งค่านี้ในรูปแบบธีมใช้ได้ดีกับการเปลี่ยนสีของขีดเส้นใต้ข้อความแก้ไข


3
โปรดทราบว่าandroid:textColorSecondaryใช้เพื่อกำหนดสีของลูกศรย้อนกลับและDrawerLayoutไอคอนแฮมเบอร์เกอร์ใน ActionBar ด้วย
Bianca Daniciuc

7
ฉันได้ใช้<item name="colorControlNormal">@color/edittext_underline_color</item>แทน textColorSecondary เนื่องจากปัญหาสีของแถบนำทาง
Bianca Daniciuc

14

ดังนั้นคุณต้องสร้างไฟล์. xml ใหม่ในโฟลเดอร์ที่วาดได้ของคุณ

ในไฟล์นั้นให้วางรหัสนี้:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
   <item
    android:bottom="8dp"
    android:left="-3dp"
    android:right="-3dp"
    android:top="-3dp">
    <shape android:shape="rectangle">
     <stroke
       android:width="1dp"
       android:color="@color/white"/>
     </shape>
   </item>
</layer-list>

และใน EditText ของคุณให้ตั้งค่า

android:background="@drawable/your_drawable"

คุณสามารถเล่นกับ xml ที่วาดได้ตั้งมุมพายเรือ ฯลฯ


1
นี่อาจเป็นทางออกที่ดีกว่าเนื่องจากอนุญาตให้ปรับแต่ง EditText ได้เต็มรูปแบบโดยไม่ส่งผลกระทบต่อส่วนประกอบอื่น ๆ ในรูปแบบหรือเค้าโครง
เปลี่ยนแปลง 2112

จากสิ่งที่ฉันมองไม่เห็นคุณสามารถตั้งค่าพื้นหลังของข้อความแก้ไขเป็นสีขาวได้
rmanalo

ผ่านโซลูชันทั้งหมดที่ฉันพบนี่เป็นวิธีเดียวที่ใช้ได้กับฉันโดยใช้ส่วนประกอบ Android Material
barney.balazs

9

ในรูปแบบของแอปกำหนดคุณสมบัติcolorAccent คุณจะพบตัวอย่างที่นี่

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/action_bar</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/action_bar</item>
</style>

5

คุณสามารถเปลี่ยนสีของ EditText ทางโปรแกรมได้โดยใช้โค้ดบรรทัดนี้ได้อย่างง่ายดาย:

edittext.setBackgroundTintList(ColorStateList.valueOf(yourcolor));


1
ทำงานได้อย่างมีเสน่ห์: D
Taslim Oseni

1

ใช้โค้ดด้านล่างเพื่อเปลี่ยนสีพื้นหลังของเส้นขอบของข้อความแก้ไข

สร้างไฟล์ XML ใหม่ภายใต้การวาดได้

abc.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#00000000" />
    <stroke android:width="1dip" android:color="#ffffff" />
</shape>

และเพิ่มเป็นพื้นหลังของข้อความแก้ไขของคุณ

android:background="@drawable/abc"

ฉันบอกว่าฉันได้ลองตั้งค่าสีพื้นหลังด้านบนแล้ว มันไม่ได้ผล
AndroidEnthusiast

1

หากต้องการเปลี่ยนสีเส้นด้านล่างคุณสามารถใช้สิ่งนี้ในธีมแอปของคุณ:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>

    <item name="colorControlNormal">#c5c5c5</item>
    <item name="colorControlActivated">#ffe100</item>
    <item name="colorControlHighlight">#ffe100</item>
</style>

หากต้องการเปลี่ยนสีฉลากลอยให้เขียนธีมต่อไปนี้:

<style name="TextAppearence.App.TextInputLayout" parent="@android:style/TextAppearance">
<item name="android:textColor">#4ffd04[![enter image description here][1]][1]</item>
</style>

และใช้ธีมนี้ในเค้าโครงของคุณ:

 <android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="20dp"
    app:hintTextAppearance="@style/TextAppearence.App.TextInputLayout">

    <EditText
        android:id="@+id/edtTxtFirstName_CompleteProfileOneActivity"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:capitalize="characters"
        android:hint="User Name"
        android:imeOptions="actionNext"
        android:inputType="text"
        android:singleLine="true"
        android:textColor="@android:color/white" />

</android.support.design.widget.TextInputLayout>

ใส่คำอธิบายภาพที่นี่


ข้อความแก้ไขที่โฟกัสยังคงมีสีหลักสำหรับฉันดังนั้นฉันจึงต้องใช้วิธีนี้: stackoverflow.com/a/36543554/2413303
EpicPandaForce

1

คุณสามารถทำได้ด้วย AppCompatEditText และตัวเลือกสี:

            <androidx.appcompat.widget.AppCompatEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:backgroundTint="@color/selector_edittext_underline" />

selector_edittext_underline.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/focused_color" 
          android:state_focused="true" />
    <item android:color="@color/hint_color" />
</selector>

0

หากคุณไม่ต้องรองรับอุปกรณ์ที่มี API <21 ให้ใช้ backgroundHint ใน xml ตัวอย่างเช่น:

 <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textPersonName"
            android:hint="Task Name"
            android:ems="10"
            android:id="@+id/task_name"
            android:layout_marginBottom="15dp"
            android:textAlignment="center"
            android:textColor="@android:color/white"

            android:textColorLink="@color/blue"
            android:textColorHint="@color/blue"
            android:backgroundTint="@color/lighter_blue" />

สำหรับการสนับสนุนและทางเลือกที่ดีขึ้นให้ใช้โซลูชัน @Akariuz backgroundHint เป็นวิธีแก้ปัญหาที่ไม่เจ็บปวดที่สุด แต่ไม่สามารถใช้งานร่วมกันได้แบบย้อนกลับขึ้นอยู่กับความต้องการของคุณโทรออก


0

เปลี่ยนcolorAccentสีของคุณที่คุณต้องการชุดสีนั้นcolorAccentและเรียกใช้คุณจะได้รับผลลัพธ์


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