Android Material TextInputLayout bileşeninin etkin olmayan kenarlık kontur rengi nasıl değiştirilir
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
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ı
Bunun için çözüm bir sonraki ve bu işe yarıyor çünkü ŞİMDİ SADECE test ettim.
Klasörünüzün colors.xml
içine gidin res>values
.

Orada, sizin colorPrimary
ve 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/colorPrimary
ama 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 TextInputLayout
veTextInputEditText
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>