Android सामग्री TextInputLayout घटक के निष्क्रिय सीमा स्ट्रोक रंग को कैसे बदलें

Dec 14 2020

मैं TextInputLayout अनफोकस्ड बॉर्डर स्ट्रोक रंग सेट करने का प्रयास कर रहा हूं। उसी के लिए, बहुत सारे प्रश्न और उनके उत्तर हैं और मैंने उन सभी को आजमाया है। बनाई गई शैलियों की तरह और थीम के रूप में उपयोग किया जाता है, रंग चयनकर्ता बनाया गया और उस पर लागू किया गया, और सीधे ऐप भी लागू किया गया: रंग चयनकर्ता के साथ बॉक्सस्ट्रोकेकलर। लेकिन इन उपलब्ध समाधानों में से किसी के साथ किस्मत नहीं।

निश्चित नहीं, मैं कहाँ गलत कर रहा हूँ या कुछ और मैं अभी भी लापता हूँ। मैंने अपने पूरे सेटअप की बेहतर दृश्यता प्राप्त करने के लिए अपने कोड को टेस्ट प्रोजेक्ट में धकेल दिया । यहाँ त्वरित समीक्षा के लिए कुछ नमूना कोड है:

activity_main.xml (ConstInintLayout के अंदर 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>

शैलियों .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 (रंग चयनकर्ता)

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

यह बहुत मदद करेगा अगर कोई व्यक्ति कुछ दिशानिर्देश और सुझाव दे सके और मेरे द्वारा की गई किसी भी गलती का पता लगाने में मदद कर सके।

अग्रिम में धन्यवाद।

जवाब

1 MariosP Jan 08 2021 at 23:31

मैंने आपके कोड का परीक्षण किया है और नीचे दिए गए परिवर्तनों को करने के बाद यह काम करता है:

1. विभिन्न राज्यों के रंगों को देखने के लिए नीचे दिए गए लाइक पर अपना रेस / कलर / टेक्स्ट_इंन_बॉक्स_स्ट्रोके_कोलर.xml बदल दें । नीचे के उदाहरण में मैंने ध्यान केंद्रित अवस्था के लिए एक लाल रंग और डिफ़ॉल्ट-निष्क्रिय अवस्था के लिए एक हल्का नीला रंग निर्धारित किया है:

<?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. इसके बाद अपने चयनकर्ता / मान / शैलियों को बदलें। नीचे दिए गए चयनकर्ता को बॉक्सस्ट्रोकेकलर के साथ लिंक करें:

<?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. अपने TextInputLayout में आमतौर पर इस शैली को नीचे की तरह जोड़ें:

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

वर्तमान में आपकी शैली जोड़ने की तरह है: android: theme = "style / textInputLayoutStyle" शैली के बजाय "=" शैली / TextInputLayoutStyle "

SlothCoding Jan 07 2021 at 05:52

इसके लिए समाधान अगला है, और यह काम करता है क्योंकि I JUST NOW ने इसका परीक्षण किया है।

colors.xmlअपने res>valuesफ़ोल्डर में अपने अंदर जाएं ।

वहां आपके पास आपके colorPrimaryऔर अन्य रंग होंगे जो आपने पहले ही बनाए थे। नीचे स्क्रॉल करें और इस पंक्ति को जोड़ें:

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

जब आप ऐसा करते हैं, तो आप वहां रंग बदल सकते हैं। मैंने परिभाषित किया है @color/colorPrimaryलेकिन आप जो चाहें उपयोग कर सकते हैं। इस लाइन को लागू करने से पहले मुझे यह मिला:

और उस लाइन को लागू करने के बाद यह परिणाम है:

इसके अलावा मैंने style="@style/YourStyle"दोनों के लिए आवेदन किया TextInputLayoutऔरTextInputEditText

AslamHossin Jan 09 2021 at 16:11

सक्रिय और निष्क्रिय स्थिति के लिए बॉक्स स्ट्रोक रंग बनाएं जैसे नीचे: 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>

एक TextInputLayout शैली बनाएं: TextInputLayoutStyle

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

अपने TextInputLayout में उपयोग करें

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