EditText metin özelliğinin altında altı çizili


108

Düzenleme metninin altındaki mavi rengi değiştirmek istiyorum, hangi özellik olduğunu bilmiyorum.

Bunun için farklı bir arka plan rengi kullanmayı denedim ama işe yaramadı.

Aşağıya bir resim ekledim:

görüntü açıklamasını buraya girin


Bu, belirli api seviyesinde / telefonda bulunan EditText için bir arka plandır. Diğer bir deyişle, uygulamanız farklı bir telefonda çalışıyorsa, farklı bir arka plan görebilirsiniz.
Sherif elKhatib

size özel edittext arka planı oluşturun
Vijju

1
Önceki iş parçacığının olası kopyası. Lütfen bunu kontrol edin stackoverflow.com/a/4585750/1129468
gokhanakkurt

Aşağıdaki kod parçasını kullanın ve çalışıp çalışmadığını bana bildirin.
InnocentKiller

Yanıtlar:


90

Aslında bir EditText'in alt çizgi rengini programlı olarak ayarlamak oldukça kolaydır (sadece bir kod satırı).

Rengi ayarlamak için:

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

Rengi kaldırmak için:

editText.getBackground().clearColorFilter();

Not: EditText odaklandığında , ayarladığınız renk etkili olmaz, bunun yerine odak rengi vardır.

API Referansı:

Çekilebilir # setColorFilter

Çekilebilir # clearColorFilter


4
Ayrıca Android için Xamarin üzerinde çalışır, özel oluşturucunuzda OnElementChanged you can doControl.Background.SetColorFilter(Android.Graphics.Color.White, PorterDuff.Mode.SrcIn);
David Conlisk

@DavidConlisk hangisini Renderergeçersiz kılarsınız ? Bunu bir arama çubuğu için nasıl çalıştıracağımı anlamaya çalışıyorum.
Nick N.

@NickN. Bunu bir seçici için kullanıyordum, bu yüzden PickerRenderer'ı geçersiz kıldım. Size en uygun oluşturucu ile çalışması gerekir (teoride!)
David Conlisk

1
Sanırım öyle, ama sorun şu olabilir ki SearchBarRenderertipte değil EditText. Çalışmasını sağlayamıyorum.
Nick N.

85

Kullan android:backgroundTint=""senin içinde EditTextxml düzeni.

API <21 AppCompatEditTextiçin destek kitaplığından kullanabilirsiniz .app:backgroundTint=""


14
Bu yalnızca şu anda api 21 ve üzeri sürümlerde çalışır. geriye dönük destek yok.
John Shelley

2
Bu, açık ara en basit ve en özlü çözümdür.
IgorGanapolsky

@JohnShelley aşağıdaki cevabımı görün , Lollipop öncesi ve üstü için çalışıyor.
Sufian

3
android:background="@null"api <21 olan cihazlar için.
Hammad Nasir

4
Bu özelliğin 21'in altındaki API'larda çalışmasını sağlamak için android yerine app (xmlns: app = " schemas.android.com/apk/res-auto" ) ad alanını kullanmalısınız.
Andrei K.

38

Her durum için EditText(odak, etkin, etkin) farklı bir arka plan görüntüsü kullanmanız gerekir .

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

Yukarıdaki sitede Holo temasındaki birçok bileşenden görseller alabilirsiniz. Sadece "Metni Düzenle" yi ve istediğiniz rengi seçin. Sayfanın altında bir önizleme görebilirsiniz.

.Zip dosyasını indirin ve kaynakları projenize kopyalayıp yapıştırın (resimler ve XML).

XML'niz şu şekilde adlandırılmışsa: apptheme_edit_text_holo_light.xml (veya benzer bir şey):

  1. XML "styles.xml" dosyanıza gidin ve özel EditTextstili ekleyin :

    <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. Bunu şu şekilde yap EditText:

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

Ve işte bu, umarım size yardımcı olur.


24

Bu, Android'in eski ve yeni sürümü için gayet iyi çalışıyor (API 10'da bile iyi çalışıyor!).

Bu stili şu şekilde tanımlayın 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>

Ve şimdi XML'nizde bunu tema ve stil olarak ayarlayın ( ayarlanacak stiltextColor ve diğer tüm şeyleri ayarlamak için tema ):

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

Düzenle

Bu çözüm, daha yeni Android sürümlerinde (Lollipop veya Marshmallow sonrası), seçim tutamaçlarının altı çizili olan küçük bir kullanıcı arayüzü sorununa neden olur.

Bu konu bu başlıkta tartışılmaktadır . (Bu çözümü şahsen denemedim)


Harika cevap, teşekkürler. Parent = "android: Widget.EditText" yerine parent = "Widget.AppCompat.EditText" kullanmak ana sorunumu çözdü.
cfl

1
Sanırım bunun Lollipop (21) ve üstü işe yaradığını kastediyorsunuz çünkü bunun 21'den düşük olmadığına dair uyarılar alıyorum
Mark O'Sullivan

@ MarkO'Sullivan hayır, bu Lollipop öncesi ve sonuna kadar işe yarıyor. API 10'da test ettim ve iyi çalışıyor. Lütfen hatanın tamamını ve gösterdiği yeri yapıştırın.
Sufian

Odaklanmış düzenleme metni benim için hala renkli birincil renge sahipti, bu yüzden şu yaklaşımı kullanmak zorunda kaldım: stackoverflow.com/a/36543554/2413303
EpicPandaForce

18

değiştirebileceğiniz Altı Çizili arasında EditText bunu belirterek renk styles.xml . Uygulamanızın tema styles.xml'sine aşağıdakileri ekleyin.

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

Ana tarafından yorum bölümünde belirtildiği gibi

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

bunu tema stilinde ayarlamak, edittext alt çizgisinin rengini değiştirmek için iyi çalışır.


3
ActionBar'daki android:textColorSecondarygeri okunun ve DrawerLayouthamburger simgesinin rengini belirlemek için de kullanıldığını unutmayın .
Bianca Daniciuc

7
<item name="colorControlNormal">@color/edittext_underline_color</item>Gezinme çubuğu renklendirme sorunu nedeniyle textColorSecondary yerine kullanmayı bıraktım .
Bianca Daniciuc

14

Bu nedenle, çekilebilir klasörünüzde yeni bir .xml dosyası oluşturmanız gerekir.

Bu dosyaya şu kodu yapıştırın:

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

Ve EditText'inizde,

android:background="@drawable/your_drawable"

Çekilebilir xml'nizle oynayabilir, köşeleri ayarlayabilir, dolgular vb.


1
Bu muhtemelen, bir stil veya düzendeki diğer bileşenleri etkilemeden EditText'in tam olarak özelleştirilmesine izin verdiği için daha iyi bir çözümdür
mutable2112

anladığım kadarıyla, edittext'in arka planını beyaz olarak ayarlayabilirsiniz
rmanalo

Bulabildiğim tüm çözümleri gözden geçirdim, Android Materyal bileşenlerini kullanarak benim için çalışan tek çözüm buydu.
barney.balazs

9

Uygulamanızın stilinde colorAccent özelliğini tanımlayın . Burada bir örnek buluyorsunuz

<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 rengini programlı olarak sadece bu kod satırını kullanarak değiştirebilirsiniz:

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


1
Cazibe gibi çalışıyor: D
Taslim Oseni

1

Düzenleme metninin kenarlığının arka plan rengini değiştirmek için aşağıdaki kodu kullanın.

Drawable altında yeni XML dosyası oluşturun.

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>

ve bunu düzenleme metninizin arka planı olarak ekleyin

android:background="@drawable/abc"

Yukarıda bir arka plan rengi ayarlamayı denediğimi söylemiştim. işe yaramadı.
AndroidEnthusiast

1

Alt çizgi rengini değiştirmek için, bunu uygulama temanızda kullanabilirsiniz:

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

Kayan etiket rengini değiştirmek için aşağıdaki temayı yazın:

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

ve bu temayı düzeninizde kullanı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>

görüntü açıklamasını buraya girin


Odaklanmış düzenleme metni benim için hala renkli birincil renge sahipti, bu yüzden şu yaklaşımı kullanmak zorunda kaldım: stackoverflow.com/a/36543554/2413303
EpicPandaForce

1

Bunu AppCompatEditText ve renk seçici ile yapabilirsiniz:

            <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 olan cihazları desteklemeniz gerekmiyorsa, xml'de backgroundHint kullanın, örneğin:

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

Daha iyi destek ve geri dönüşler için @Akariuz çözümünü kullanın. backgroundHint en acısız çözümdür, ancak geriye dönük olarak uyumlu değildir, gereksinimlerinize göre arama yapın.


0

colorAccento renk setine ihtiyacınız olan rengi değiştirin colorAccentve çalıştırın çıktıyı alırsınız


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.