Android Material TextInputLayout bileşeninin etkin olmayan kenarlık kontur rengi nasıl değiştirilir

Dec 14 2020

TextInputLayout odaklanmamış kenarlık kontur rengini ayarlamaya çalışıyorum. Aynı şekilde, çok fazla soru ve cevapları var ve hepsini denedim. Oluşturulan stiller gibi ve tema olarak kullanılan, Renk seçici oluşturuldu ve uygulandı ve ayrıca doğrudan app: renk seçici ile boxStrokeColor uygulandı. Ancak bu mevcut çözümlerin hiçbirinde şans yok.

Emin değilim, nerede yanlış yapıyorum veya hala kaçırdığım bir şey. Tüm kurulumumu daha iyi görebilmek için kodumu Test projesine github'a aktardım. Hızlı inceleme için bazı örnek kodlar:

activity_main.xml (ConstraintLayout içindeki TextInputLayout)

<com.google.android.material.appbar.MaterialToolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <!-- Tried this as well - app:boxStrokeColor="@color/text_input_box_stroke_color" -->
    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/emailTextInputLayout"
        android:hint="Email"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="24dp"
        android:theme="@style/TextInputLayoutStyle"
        android:layout_marginHorizontal="24dp"
        app:layout_constraintTop_toBottomOf="@id/toolbar"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent">

        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/emailTextInput"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:importantForAutofill="no"
            android:inputType="textEmailAddress" />

    </com.google.android.material.textfield.TextInputLayout>

styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="TextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense">
        <item name="boxStrokeColor">#FF00CC</item>
        <item name="boxStrokeWidth">2dp</item>
    </style>
</resources>

text_input_box_stroke_color.xml (renk seçici)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/mtrl_textinput_focused_box_stroke_color" android:state_focused="true"/>
    <item android:color="@color/mtrl_textinput_hovered_box_stroke_color" android:state_hovered="true"/>
    <item android:color="@color/mtrl_textinput_disabled_color" android:state_enabled="false"/>
    <item android:color="@color/mtrl_textinput_default_box_stroke_color"/>
</selector>

Birisi bir kılavuz ve öneri sunabilir ve yaptığım herhangi bir hatayı anlamama yardım edebilirse çok yardımcı olur.

Şimdiden teşekkürler.

Yanıtlar

1 MariosP Jan 08 2021 at 23:31

Kodunuzu test ettim ve aşağıdaki değişiklikleri yaptıktan sonra çalışıyor:

1. İlk olarak farklı durum renklerini görmek için res / color / text_input_box_stroke_color.xml dosyanızı aşağıdaki gibi değiştirin . Aşağıdaki örnekte, odaklanmış durum için bir Kırmızı renk ve varsayılan-etkin olmayan durum için bir Açık Mavi renk ayarladım:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@android:color/holo_red_dark" android:state_focused="true" />
    <item android:color="@android:color/holo_green_dark" android:state_hovered="true" />
    <item android:color="@color/mtrl_textinput_disabled_color" android:state_enabled="false" />
    <item android:color="@android:color/holo_blue_light" />
</selector>

2. Ardından , aşağıdaki gibi yukarıdaki seçiciye boxStrokeColor bağlayarak res / values ​​/ styles.xml dosyanızı değiştirin :

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="TextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense">
        <item name="boxStrokeColor">@color/text_input_box_stroke_color</item>
        <item name="boxStrokeWidth">2dp</item>
    </style>
</resources>

3. Son olarak TextInputLayout'unuzda bu stili aşağıdaki gibi ekleyin:

<com.google.android.material.textfield.TextInputLayout
    style="@style/TextInputLayoutStyle"
    android:id="@+id/emailTextInputLayout"

: Şu anda senin gibi stil eklemek "tarzı / TextInputLayoutStyle @" = tema: android yerine "tarzı / TextInputLayoutStyle @" = tarzı

SlothCoding Jan 07 2021 at 05:52

Bunun için çözüm bir sonraki ve bu işe yarıyor çünkü ŞİMDİ SADECE test ettim.

Klasörünüzün colors.xmliçine gidin res>values.

Orada, sizin colorPrimaryve daha önce yarattığınız diğer renklere sahip olacaksınız . Aşağıya kaydırın ve şu satırı ekleyin:

<color name="mtrl_textinput_default_box_stroke_color" tools:override="true">@color/colorPrimary</color>

Bunu yaptığınızda, sadece oradaki rengi değiştirebilirsiniz. Olarak tanımladım @color/colorPrimaryama ne istersen kullanabilirsin. Bu satırı uygulamadan önce şunu aldım:

Ve bu satırı uyguladıktan sonra sonuç şudur:

Ayrıca style="@style/YourStyle"ikisine de başvurdum TextInputLayoutveTextInputEditText

AslamHossin Jan 09 2021 at 16:11

Aşağıdaki gibi aktif ve pasif durum için bir kutu kontur rengi oluşturun: box_stroke_color

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#2C2C2C" android:state_focused="true"/>
    <item android:color="#2C2C2C" android:state_hovered="true"/>
    <item android:color="#D7D7D7"/>
</selector>

Bir TextInputLayout stili oluşturun: TextInputLayoutStyle

 <style name="TextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
        <item name="boxStrokeColor">@color/box_stroke_color</item>
        <item name="boxStrokeWidth">1dp</item>
    </style>

TextInputLayout'unuzda kullanın

 <com.google.android.material.textfield.TextInputLayout
    style="@style/TextInputLayoutStyle" >
    <com.google.android.material.textfield.TextInputEditText.. />
 </com.google.android.material.textfield.TextInputLayout>