web-dev-qa-db-ja.com

問題:androidでフォーカスのないTextInputLayoutの境界線の色またはボックスのストロークを変更する

TextInputLayoutのテキストボックスのアウトラインを変更すると、焦点が合っていないときに非常に具体的な問題が発生します。 「焦点が合っていない」テキストボックスの境界線の色を変更する属性が見つからないようです。

ここに私がやろうとしていることの視覚的な例があります:

This(textbox):borderの色は白ではありません。現在は焦点が合っていません。クリックすると、白に変わります。

何を変更する必要があるのか​​わかりません。変更する属性があるとは思えません。

マテリアルデザインのテキスト入力レイアウトスタイルも使用していますが、それが影響するかどうかはわかりません。

テキストボックスのxmlコードは次のとおりです。

 <other layouts ... >
     <RelativeLayout
            Android:layout_width="match_parent"
            Android:layout_height="70dp"
            Android:layout_gravity="bottom"
            Android:layout_margin="5dp"
            Android:background="@drawable/item_recycler_view">

            <Android.support.design.widget.TextInputLayout
                Android:id="@+id/dialog_text_input_layout"
                style="@style/Widget.AppTheme.TextInputLayoutList"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                Android:hint="Quick Add..."
                Android:textColorHint="@color/colorWhite"
                app:boxStrokeColor="@color/colorWhite"
                app:errorEnabled="true"
                >

                <Android.support.design.widget.TextInputEditText
                    Android:id="@+id/dialog_edit_text"
                    Android:layout_width="match_parent"
                    Android:layout_height="wrap_content"
                    Android:inputType="text"
                    Android:maxLines="1"
                    Android:textColor="@color/colorWhite"
                    Android:textSize="14sp" />
            </Android.support.design.widget.TextInputLayout>
        </RelativeLayout>
 </other layouts...>

そして、私がこれに使用するスタイルは次のとおりです。

<style name="TextAppearance.AppTheme.TextInputLayout.HintTextAlt" parent="TextAppearance.MaterialComponents.Subtitle2">
    <item name="Android:textColor">@color/colorWhite</item>
</style>

<style name="Widget.AppTheme.TextInputLayoutList" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
    <item name="hintTextAppearance">@style/TextAppearance.AppTheme.TextInputLayout.HintTextAlt</item>
    <item name="boxStrokeColor">@color/colorWhite</item>
    <item name="boxCornerRadiusBottomEnd">5dp</item>
    <item name="boxCornerRadiusBottomStart">5dp</item>
    <item name="boxCornerRadiusTopEnd">5dp</item>
    <item name="boxCornerRadiusTopStart">5dp</item>
    <item name="Android:layout_margin">5dp</item>
</style>

ありがとう、どんな助けや提案も大歓迎です!

8
Varun Govind

デフォルトの黒ではなく、非フォーカスモードでアウトラインボックスの色を設定する場合は、アウトラインボックスのデフォルトの色を上書きするcolors.xmlファイルにこの行を追加する必要があります。

この行をそのままコピーします。好きな色に変更できます。

<color name="mtrl_textinput_default_box_stroke_color">#fff</color>

これまでは動作しますが、TextInputLayoutをさらに制御するには、styles.xmlにこのスタイルを追加します。

<style name="TextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense">
    <item name="boxStrokeColor">#fff</item>
    <item name="boxStrokeWidth">2dp</item>
</style>

次に、TextInputLayoutにテーマを追加します

Android:theme="@style/TextInputLayoutStyle"
30
Amjad

Amjadからの回答 は正しかったが、この後 1.1.0-alpha02 (おそらくalpha01)から始まる issue は解決され、色を定義することが可能同じboxStrokeColor属性を使用したカラー状態リストで、たとえばlibでの実行方法:

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
  <item Android:color="?attr/colorPrimary" Android:state_focused="true"/>
  <item Android:alpha="0.87" Android:color="?attr/colorOnSurface" Android:state_hovered="true"/>
  <item Android:alpha="0.12" Android:color="?attr/colorOnSurface" Android:state_enabled="false"/>
  <item Android:alpha="0.38" Android:color="?attr/colorOnSurface"/>
</selector>
2
dilix