EditText gạch chân bên dưới thuộc tính văn bản


108

Tôi muốn thay đổi màu xanh bên dưới văn bản chỉnh sửa, tôi không biết nó thuộc tính gì.

Tôi đã thử sử dụng một màu nền khác cho nó nhưng nó không hoạt động.

Tôi đã đính kèm một hình ảnh bên dưới:

nhập mô tả hình ảnh ở đây


Đây là nền cho EditText có sẵn trên một số điện thoại / cấp api nhất định. Nói cách khác, nếu ứng dụng của bạn chạy trên một điện thoại khác, bạn có thể thấy một nền khác.
Sherif elKhatib,

tạo bạn tùy chỉnh EditText nền
Vijju

1
Có thể trùng lặp chủ đề trước đó. Xin hãy kiểm tra này stackoverflow.com/a/4585750/1129468
gokhanakkurt

Sử dụng đoạn mã dưới đây và cho tôi biết liệu nó có hoạt động hay không.
InnocentKiller

Câu trả lời:


90

Thực sự khá dễ dàng để đặt màu gạch dưới của một EditText theo chương trình (chỉ một dòng mã).

Để đặt màu:

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

Để loại bỏ màu:

editText.getBackground().clearColorFilter();

Lưu ý: khi EditText có tiêu điểm , màu bạn đặt sẽ không có hiệu lực, thay vào đó, nó có màu tiêu điểm.

Tham chiếu API:

Drawable # setColorFilter

Drawable # clearColorFilter


4
Cũng hoạt động trên Xamarin dành cho Android, trong renderer tùy chỉnh của bạn OnElementChanged bạn có thể làmControl.Background.SetColorFilter(Android.Graphics.Color.White, PorterDuff.Mode.SrcIn);
David Conlisk

@DavidConlisk Rendererbạn ghi đè cái nào? Tôi đang cố gắng tìm cách làm cho điều này hoạt động cho thanh tìm kiếm.
Nick N.

@NickN. Tôi đang sử dụng cái này cho một bộ chọn, vì vậy tôi đã ghi đè lên bộ chọn. Nó sẽ hoạt động với bất kỳ trình kết xuất nào phù hợp với bạn nhất (về lý thuyết!)
David Conlisk 12/09/16

1
Tôi đoán nó nên, nhưng vấn đề có thể SearchBarRendererlà không phải là loại EditText. Không thể làm cho nó hoạt động.
Nick N.

85

Sử dụng android:backgroundTint=""trong EditTextbố cục xml của bạn .

Đối với api <21, bạn có thể sử dụng AppCompatEditTexttừ thư viện hỗ trợ sau đóapp:backgroundTint=""


14
Điều này hiện chỉ hoạt động trong api 21 trở lên. không hỗ trợ ngược.
John Shelley

2
Đây là giải pháp đơn giản và ngắn gọn nhất.
IgorGanapolsky

@JohnShelley xem câu trả lời của tôi bên dưới , nó hoạt động cho trước Lollipop trở lên.
Sufian

3
android:background="@null"cho các thiết bị có api <21.
Hammad Nasir

4
Để làm cho thuộc tính này hoạt động trong các API dưới 21, bạn nên sử dụng không gian tên ứng dụng (xmlns: app = " schemas.android.com/apk/res-auto" ) thay vì android.
Andrei K.

38

Bạn phải sử dụng hình nền khác, không phải màu, cho từng trạng thái của EditText(tiêu điểm, đã bật, đã kích hoạt).

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

Trong trang web trên, bạn có thể lấy hình ảnh từ rất nhiều thành phần trong chủ đề Holo. Chỉ cần chọn "EditText" và màu bạn muốn. Bạn có thể xem bản xem trước ở cuối trang.

Tải xuống tệp .zip và sao chép, dán các tài nguyên trong dự án của bạn (hình ảnh và XML).

nếu XML của bạn được đặt tên: apptheme_edit_text_holo_light.xml (hoặc cái gì đó tương tự):

  1. Truy cập "styles.xml" XML của bạn và thêm EditTextkiểu tùy chỉnh :

    <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. Chỉ cần làm điều này trong EditText:

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

Và đó là nó, tôi hy vọng nó sẽ giúp bạn.


24

Điều này hoạt động tốt cho phiên bản Android cũ và mới (hoạt động tốt ngay cả trên API 10!).

Xác định phong cách này trong 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>

Và bây giờ trong XML của bạn, hãy đặt cái này làm chủ đề và kiểu ( kiểu để đặt textColorchủ đề để đặt tất cả những thứ khác):

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

Biên tập

Giải pháp này gây ra lỗi giao diện người dùng nhỏ trên các phiên bản Android mới hơn (Lollipop hoặc Marshmallow trở đi) mà các nút điều khiển lựa chọn bị gạch chân.

Vấn đề này được thảo luận trong chủ đề này . (Tôi chưa thử giải pháp này cá nhân)


Câu trả lời tuyệt vời, cảm ơn. Sử dụng parent = "Widget.AppCompat.EditText", thay vì parent = "android: Widget.EditText" đã giải quyết được vấn đề lớn của tôi.
cfl

1
Tôi nghĩ rằng bạn có nghĩa là làm việc này Lollipop (21) và lên vì tôi nhận được cảnh báo rằng điều này không làm giảm hơn 21
Đánh dấu O'Sullivan

@ MarkO'Sullivan không, điều này hoạt động cho trước Lollipop và tất cả các loại. Tôi đã thử nghiệm nó trên API 10 và nó hoạt động tốt. Vui lòng dán toàn bộ lỗi và nơi hiển thị.
Sufian

Văn bản chỉnh sửa tập trung vẫn có màu cơ bản đối với tôi, vì vậy tôi phải sử dụng phương pháp này: stackoverflow.com/a/36543554/2413303
EpicPandaForce

18

bạn có thể thay đổi Màu gạch dưới của EditText chỉ định nó trong styles.xml . Trong chủ đề ứng dụng styles.xml của bạn, hãy thêm phần sau.

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

Như đã chỉ ra bởi ana trong phần bình luận

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

cài đặt này trong kiểu chủ đề hoạt động tốt để thay đổi màu của gạch dưới văn bản chỉnh sửa.


3
Lưu ý rằng nó android:textColorSecondarycũng được sử dụng để xác định màu của mũi tên quay lại và DrawerLayoutbiểu tượng bánh hamburger trong ActionBar.
Bianca Daniciuc,

7
Tôi đã kết thúc bằng cách sử dụng <item name="colorControlNormal">@color/edittext_underline_color</item>thay vì textColorSecondary vì vấn đề màu thanh điều hướng.
Bianca Daniciuc

14

Vì vậy, bạn cần tạo một tệp .xml mới trong thư mục có thể vẽ của mình.

Trong tệp đó, dán mã này:

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

Và trong EditText của bạn, hãy đặt

android:background="@drawable/your_drawable"

Bạn có thể chơi với xml có thể vẽ của mình, đặt góc, đệm, v.v.


1
này có lẽ là giải pháp tốt hơn cho rằng nó cho phép tùy biến đầy đủ của EditText, mà không ảnh hưởng các thành phần khác trong một phong cách hoặc bố trí
mutable2112

từ những gì tôi undetstand, bạn chỉ có thể thiết lập nền của EditText sang màu trắng
rmanalo

Đã xem qua tất cả các giải pháp tôi có thể tìm thấy, đây là giải pháp duy nhất phù hợp với tôi khi sử dụng các thành phần Android Material.
barney.balazs

9

Trong kiểu ứng dụng của bạn, hãy xác định thuộc tính colorAccent . Ở đây bạn tìm thấy một ví dụ

<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

Bạn có thể thay đổi màu của EditText theo chương trình chỉ bằng cách sử dụng dòng mã này một cách dễ dàng:

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


1
Hoạt động như một nét duyên dáng: D
Taslim Oseni

1

Sử dụng mã dưới đây để thay đổi màu nền của đường viền của văn bản chỉnh sửa.

Tạo tệp XML mới dưới dạng có thể vẽ được.

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>

và thêm nó làm nền của văn bản chỉnh sửa của bạn

android:background="@drawable/abc"

tôi đã đề cập rằng tôi đã thử đặt màu nền ở trên. nó đã không hoạt động.
đam mê Android

1

Để thay đổi màu dòng dưới cùng, bạn có thể sử dụng màu này trong chủ đề ứng dụng của mình:

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

Để thay đổi màu nhãn nổi, hãy viết chủ đề sau:

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

và sử dụng chủ đề này trong bố cục của bạn:

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

nhập mô tả hình ảnh ở đây


Văn bản chỉnh sửa tập trung vẫn có màu cơ bản đối với tôi, vì vậy tôi phải sử dụng cách tiếp cận này: stackoverflow.com/a/36543554/2413303
EpicPandaForce

1

Bạn có thể làm điều đó với AppCompatEditText và bộ chọn màu:

            <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

Nếu bạn không phải hỗ trợ các thiết bị có API <21, hãy sử dụng backgroundHint trong xml, ví dụ:

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

Để được hỗ trợ và dự phòng tốt hơn, hãy sử dụng giải pháp @Akariuz. backgroundHint là giải pháp dễ dàng nhất, nhưng không tương thích ngược, dựa trên yêu cầu của bạn để thực hiện cuộc gọi.


0

thay đổi colorAccentmàu của bạn mà bạn cần màu đó được thiết lập colorAccentvà chạy, bạn sẽ nhận được đầu ra


0

Chỉ cần thay đổi android: backgroundTint trong mã xml thành màu của bạn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.