我将TextInputEditText
小部件放在白色背景上。片段首次加载时,窗口小部件没有焦点。小部件周围的边框是白色(或几乎是白色),因此在白色背景上看不见。以下是该小部件的屏幕截图,在黑色背景上绘制以进行对比:
一旦我点击小部件,边框就会成为我原色的边框,这正是我想要的。激活窗口小部件后,这是一个类似的屏幕截图。
我试图通过一种风格控制这些颜色,我已经尝试了我能想到的一切,但我无法弄清楚如何调整这种颜色。这是我的风格(随意嘲笑各种尝试):
<style name="MyTextInputLayout" parent="Base.Widget.MaterialComponents.TextInputLayout">
<item name="android:colorBackground">@android:color/black</item>
<item name="android:textColorHint">@color/colorPrimary</item>
<item name="android:paddingStart">16dp</item>
<item name="android:paddingEnd">16dp</item>
<item name="android:colorControlActivated">@android:color/black</item>
<item name="android:colorControlNormal">@android:color/black</item>
<item name="android:colorControlHighlight">@android:color/black</item>
<item name="android:backgroundTint">@android:color/black</item>
<item name="android:colorAccent">@android:color/black</item>
</style>
<style name="MyTextInputEditText" parent="ThemeOverlay.MaterialComponents.TextInputEditText">
<item name="android:textColor">@android:color/black</item>
<item name="android:colorBackground">@android:color/black</item>
<item name="android:colorControlActivated">@android:color/black</item>
<item name="android:colorControlNormal">@android:color/black</item>
<item name="android:colorControlHighlight">@android:color/black</item>
<item name="android:backgroundTint">@android:color/black</item>
<item name="android:colorAccent">@android:color/black</item>
</style>
最后,布局的xml以防有用:
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
style="@style/MyTextInputLayout">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/reg_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/username"
style="@style/MyTextInputEditText"/>
</com.google.android.material.textfield.TextInputLayout>
如果窗口小部件未处于活动状态(即没有焦点),如何更改此边框颜色?
我通过两个主要步骤解决了这个问题
TextInputLayout
样式的父样式需要更改为Widget.MaterialComponents.TextInputLayout.OutlinedBox
。所以我复制了它并在res / color文件夹中创建了我自己的文件,我称之为edit_text_box_border.xml。我修改了三种颜色以适应我的目的,最终想出了这个:
<?xml version="1.0" encoding="utf-8"?>
<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="@color/colorPrimary" android:state_hovered="true"/>
<item android:alpha="0.12" android:color="@color/colorPrimary" android:state_enabled="false"/>
<item android:alpha="0.38" android:color="@color/colorPrimary"/>
</selector>
然后,回到我的风格,我不得不摆脱我的许多颜色尝试,并添加一个指向此文件的boxStrokeColor项目。以下是两种风格:
<style name="MyTextInputLayout" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<item name="android:textColorHint">@color/colorPrimary</item>
<item name="android:paddingStart">16dp</item>
<item name="android:paddingEnd">16dp</item>
<item name="boxStrokeColor">@color/edit_text_box_border</item>
</style>
<style name="MyTextInputEditText" parent="ThemeOverlay.MaterialComponents.TextInputEditText.OutlinedBox.Dense">
<item name="android:textColor">@android:color/black</item>
</style>
现在,当我运行应用程序时,我从这开始:
当我点击它时,然后变成这个:
这就是我想要的,所以问题就解决了。希望这有助于某人。
1.
<com.google.android.material.textfield.TextInputLayout
...
style="@style/Widget.MaterialComponents.TextInputLayout.OutlineBox"
app:boxStrokeColor = "@android:color/holo_purple"
//border color when in active status
...
2.在colors.xml文件中添加以下内容
<color name="mtrl_textinput_default_box_stroke_color">#00ff00</color>
//border color when in inactive status