EditText'te çizgi rengi nasıl değiştirilir


205

Düzen xml dosyamda bir EditText oluşturuyorum

Ancak EditText'teki renk çizgisini Holo'dan (örneğin) kırmızıya değiştirmek istiyorum. Bu nasıl yapılabilir?

resim açıklamasını buraya girin

Yanıtlar:


310

@ Jérôme Van Der Linden sayesinde tüm görünümler için kullanabileceğiniz en iyi araçtır .

Android Holo Renk Üreticisi, EditTextAndroid uygulamanız için kendi renklerinizle kolayca veya dönen gibi Android bileşenleri oluşturmanıza olanak tanır . Gerekli tüm dokuz yama varlığının yanı sıra doğrudan projenize kopyalayabileceğiniz ilişkili XML çekilebilir ve stilleri oluşturur.

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

GÜNCELLEME 1

Bu alanın süresi dolmuş gibi görünüyor, ancak proje burada bulabileceğiniz açık bir kaynak

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

dene

bu görüntü arka plana koymak EditText

android:background="@drawable/textfield_activated"

resim açıklamasını buraya girin


GÜNCELLEME 2

API 21 veya üstü için şunu kullanabilirsiniz: 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" />

Güncelleme 3 Şimdi Sırt Desteği VarAppCompatEditText

Not: Biz kullanılması gereken app: backgroundTint yerine 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" />

Bağlantı ölü gibi mi görünüyor? Yazılım hala mevcut mu?
John

1
@CodingJohn Bu proje açık kaynaklıdır burada bulabilirsiniz github.com/jeromevdl/android-holo-colors
MilapTank

ve kim yerine "app: backgroundTint android yerine: backgroundTint" kullanmak zorunda diyor mu ??
user924

eğer geriye dönük uyumluluk istiyorsanız o zaman app kullanabilirsiniz: *** OW android: ***
MilapTank

204

Önceki cevapları sevmiyorum. En iyi çözüm kullanmaktır:

<android.support.v7.widget.AppCompatEditText

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

android:backgroundTintiçin EditTextsadece eserlerin API21 + . Bu nedenle, destek kitaplığını ve AppCompatEditText.

Not: app:backgroundTintyerine kullanmak zorundayızandroid:backgroundTint

AndroidX sürümü

<androidx.appcompat.widget.AppCompatEditText

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

3
Bu en iyi çözüm! Basit ve tüm API seviyelerinde çalışır. Teşekkürler!
Ivo Stoyanov

7
appcompat kitaplığını kullanırsanız EdtiTexts otomatik olarak AppCompatEditText'e dönüştürülür ve arka plan tonu uygulanır.
stephane k.

Bence bu tam çözüm olmalı
Thuy Nguyen 25:17

Çok teşekkür ederim. API 16+ için çalıştı. En İyi Çözüm.
André Luiz Reis

2
app: backgroundTint programlı olarak ayarlamak mümkün mü? Ben bir yöntem 'setBackgroundTint' bulabilirim
Sarhoş Baba

75

Ayrıca EditText'in arka planını aşağıdaki gibi renklendirerek EditText'in alt çizgi rengini hızlı bir şekilde değiştirebilirsiniz:

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

18
Yalnızca API 21 veya sonraki sürümlerde çalışır. Bu çalışmanın daha düşük API düzeyinde çalışmasını sağlamanın bir yolu var mı?
Vucko

Çözüm çözümünü kontrol edin stackoverflow.com/questions/26574328/…
powder366

@ mladj0ni Havalı, + 1d
Vucko

3
Kredi: "backgroundTint android" daha az api seviyeleri için yerine sadece "backgroundTint" kullanmak stackoverflow.com/a/29400711/1590911
Hasaan Ali

bu, çizgi rengini değil tüm arka plan rengini değiştirir
Code Wiget

29

21'in altındaki API için , EditText aşağıdaki kodu stil dosyasına yerleştirerek theme özelliğini kullanabilirsiniz

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

Bu stili kullanan EditTextolarak

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

stil dosyasına alfa / opaklık eklemeyi biliyor musunuz? Normal rengi bir opaklıkla almalı ve yazmaya başladıktan sonra, etkinleştirilen veya vurgulanan rengi almalıdır
ASN

1
@ANS bunun için bir metin izleyici dinleyicisi eklemeniz ve "onTextChanged" yönteminde opaklığı dinamik olarak ayarlamanız gerekir
Rahul

ah. Yani stil veya seçici dosyasına eklenemez ve dinamik olarak mı yapılmalı?
ASN

@ASN opaklığı altı renkli i eklenir ilk iki karakter 00-FF yani: # A1FAFAFA
aimiliano

21

Programlı olarak deneyebilirsiniz:

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

2
Xamarin.Forms etkisi için en iyi cevap
mister_giga

11

en iyi yol tema olduğunu düşünüyorum:

<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
Bu benim için stil etiketi ile ama android ile çalışmıyor: tema etiketi
aimiliano

9

Edittext'in alt çizgi rengini değiştirmek için:

Tüm uygulamanın bu stili paylaşmasını istiyorsanız, aşağıdaki şekilde yapabilirsiniz.

(1) styles.xml dosyasına gidin. Theme.AppCompat.Light.DarkActionBar öğesinin üst öğesini devralan AppTheme uygulamanız (benim durumumda), uygulamanızdaki tüm stil dosyalarının temel üst öğesi olacaktır. Adını “AppBaseTheme” olarak değiştirin. Hemen altında AppTheme adını taşıyan ve az önce düzenlediğiniz AppBaseTheme öğesinden miras kalan başka bir stil yapın. Aşağıdaki gibi görünecektir:

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

Ardından, “colorAccent” i EditText çizgi renginizin olmasını istediğiniz renge değiştirin.

(2) style.xml içeren başka değer klasörleriniz varsa, bu adım çok önemlidir. Çünkü bu dosya önceki üst xml dosyanızdan devralacak. Örneğin, değerler-19 / styles.xml var. Bu özellikle Kitkat ve üstü içindir. Üst öğesini AppBaseTheme olarak değiştirin ve üst öğenin rengini geçersiz kılmaması için “colorAccent” öğesinden kurtulduğunuzdan emin olun. Ayrıca 19 sürümüne özgü öğeleri tutmanız gerekir. Sonra böyle görünecektir.

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

9

Oldukça basit (Gerekli: Minimum API 21) ...

  1. Xml'nize gidin ve EditText alanını seçin
  2. Sağ tarafta, 'Özellikler' penceresini görebilirsiniz. 'Tüm Nitelikleri Görüntüle'yi seçin
  3. Sadece 'renk tonu' araması yapın
  4. Ve 'backgroundTint'i istediğiniz bir onaltılık renge ekleyin / değiştirin (örneğin # FF0000)

resim açıklamasını buraya girin

resim açıklamasını buraya girin

Kod Yazmaya Devam Edin ........ :)


2
Minimum API 21.
Maihan Nijat

Arka plan renk tonunun değiştirilmesi, GEÇMİŞİ değiştirir. Bu cevap yanlış
Code Wiget

6

Çizginin rengi, EditTextarka plan özelliği tarafından tanımlanır . Bunu değiştirmek android:backgroundiçin mizanpaj dosyasında değiştirmelisiniz.

Bu tarzın 9 yamalı bir çekilebilir kullanarak elde edildiğine dikkat etmeliyim. SDK'ya bakarsanız, arka planının EditTextbu resim olduğunu görebilirsiniz:

textfield_activated_holo_light.9.png

Bunu değiştirmek için bir görüntü işleme programında açabilir ve istediğiniz renkte renklendirebilirsiniz. Olarak kaydedin bg_edit_text.9.pngve sonra çizilebilir klasöre koyun. Şimdi beğeninize arka plan olarak uygulayabilirsiniz EditText:

android:background="@drawable/bg_edit_text"

5

EditText'in rengini sadece bu kod satırını kullanarak programlı olarak değiştirebilirsiniz:edittext.setBackgroundTintList(ColorStateList.valueOf(yourcolor));


Aradığım şey bu! Thx
Jiratchaya Intaragumhaeng

4

Widget'ların arka planı API düzeyine bağlıdır .

ALTERNATİF 1

EditTextTarafından arka planınıza özel bir resim sağlayabilirsiniz

android:background="@drawable/custom_editText"

Resminiz böyle görünmelidir. Size istenen efekti verecektir.

resim açıklamasını buraya girin

ALTERNATİF 2

Bu xml'yi EditTextarka plan özelliğinize ayarlayın .

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

Bu EditText, her API'da aynı görünüme sahip olacak .


Sürüm 4.0 ve üstü ile ilgileniyorum. Yani, aktifken sadece çizgi rengini değiştirmek istiyorum EditText
Alex

4

Arka planı renklendirerek rengi değiştirebilirsiniz <EditText android:backgroundTint="@color/red"/>


1
Bu sadece api> 21 için çalışır Tüm apis'ler için @Rahul cevabını takip etmeli veya layout-21 klasöründe api> 21 için farklı düzenler eklemelisiniz
aimiliano

4

çekilebilir / 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 olarak ayarla

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

3

Bu yöntemi kullanın .. ve ur görünüm adlarına göre değiştirin. Bu kod harika çalışıyor.

 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

Düz bir çizgi istiyorsanız, bunu xml ile kolayca yapabilirsiniz. İşte xml örneği:

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

Odaklanmış düzenleme metni için farklı genişlik ve renk sağlamak istiyorsanız şekli bir seçiciyle değiştirin.


1
malzeme tasarımı ile daha geniş dip çizgisi ile dikdörtgen oluşturur
Filip Zymek

2

En iyi yaklaşım bir kullanmaktır AppCompatEditTextile backgroundTintoznıtelığı appad. yani

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

kullandığımızda android:backgroundTintyalnızca API21 veya daha fazlasında app:backgroundTintçalışır, ancak uygulamanızın yaptığı tüm API düzeylerinde çalışır.


1

Bu düzenleme metni için android: background özelliğini kullanın. Çekilebilir klasör görüntünüzü ona aktarın. Örneğin,

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

** manzara ile yapmak **


1

Aşağıdaki yolu deneyin, arka plan özelliği olarak kullanıldığında EditText öğesinin alt satır rengini dönüştürür.

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

Bu, android:theme="@style/AppTheme.AppBarOverlayeditText'inize özellik olarak ekleyerek ve bunu <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />stillerinize ekleyerek yapılabilir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.