我在布局xml文件中创建了一个EditText
但我想将EditText中的颜色线从Holo更改为(例如)红色。 怎么做?
答案 0 :(得分:228)
这是您可以用于所有视图的最佳工具,非常感谢@ Jérôme Van Der Linden。
Android Holo颜色生成器允许您轻松地为您的Android应用程序创建具有自己颜色的EditText
或微调器等Android组件。它将生成所有必需的九个补丁资源以及相关的XML drawable和样式,您可以将它们直接复制到项目中。
更新1
此域名似乎已过期但该项目是您可以在此处找到的开源
试试吧
此图片放在EditText
android:background="@drawable/textfield_activated"
更新2
对于API 21或更高版本,您可以使用android:backgroundTint
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Underline color change"
android:backgroundTint="@android:color/holo_red_light" />
更新3
现在我们有支持AppCompatEditText
注意:我们需要使用 app:backgroundTint 而不是 android:backgroundTint
<android.support.v7.widget.AppCompatEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Underline color change"
app:backgroundTint="@color/blue_gray_light" />
答案 1 :(得分:164)
我不喜欢以前的答案。最好的解决方案是使用:
<android.support.v7.widget.AppCompatEditText
app:backgroundTint="@color/blue_gray_light" />
EditText 的android:backgroundTint 仅适用于 API21 + 。因此,我们必须使用支持库和 AppCompatEditText 。
注意:我们必须使用 app:backgroundTint 而不是android:backgroundTint
答案 2 :(得分:66)
您还可以通过对EditText的背景进行着色来快速更改EditText的下划线颜色,如下所示:
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Something or Other"
android:backgroundTint="@android:color/holo_green_light" />
答案 3 :(得分:16)
以编程方式,您可以尝试:
editText.getBackground().mutate().setColorFilter(getResources().getColor(android.R.color.holo_red_light), PorterDuff.Mode.SRC_ATOP);
答案 4 :(得分:12)
对于21以下的api,您可以在edittext中使用theme属性 将下面的代码放入样式文件
<style name="MyEditTextTheme">
<item name="colorControlNormal">#FFFFFF</item>
<item name="colorControlActivated">#FFFFFF</item>
<item name="colorControlHighlight">#FFFFFF</item>
</style>
在edittext中将此样式用作
<EditText android:id="@+id/etPassword"
android:layout_width="match_parent"
android:layout_height="@dimen/user_input_field_height"
android:layout_marginTop="40dp"
android:hint="@string/password_hint"
android:theme="@style/MyEditTextTheme"
android:singleLine="true" />
答案 5 :(得分:10)
我认为最好的方式是主题:
{{1}}
答案 6 :(得分:9)
更改Edittext的下划线颜色:
如果您希望整个应用分享此风格,则可以采用以下方式。
(1)转到styles.xml文件。继承Theme.AppCompat.Light.DarkActionBar(在我的例子中)的父级的AppTheme将是应用程序中所有样式文件的基本父级。将其名称更改为“AppBaseTheme”。在其下创建另一个名为AppTheme的样式,并继承自刚编辑的AppBaseTheme。它将如下所示:
<!-- Base application theme. -->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="windowActionBar">false</item>
<!--see http://www.google.com/design/spec/style/color.html#color-color-palette-->
<item name="colorPrimary">@color/material_brown_500</item>
<item name="colorPrimaryDark">@color/material_brown_700</item>
<item name="colorAccent">@color/flamingo</item>
<style name="AppTheme" parent="AppBaseTheme">
<!-- Customize your theme here. -->
</style>
然后将“colorAccent”更改为您希望EditText线颜色的颜色。
(2)如果你有style.xml的其他值文件夹,这一步非常重要。因为该文件将继承您以前的父xml文件。例如,我有值-19 / styles.xml。这是专门针对Kitkat及以上的。将其父级更改为AppBaseTheme并确保删除“colorAccent”,以便它不会覆盖父级的颜色。此外,您需要保留特定于版本19的项目。然后它将如下所示。
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<item name="android:windowTranslucentStatus">true</item>
</style>
</resources>
答案 7 :(得分:8)
非常简单(必需:最低API 21)...
继续编码........:)
答案 8 :(得分:6)
线条的颜色由EditText
的背景属性定义。要更改它,您应该更改布局文件中的android:background
。
我应该注意到这种风格是通过使用9-patch drawable来实现的。如果你查看SDK,你可以看到EditText
的背景是这个图像:
要更改它,您可以在图像处理程序中打开它并以所需颜色着色。将其保存为bg_edit_text.9.png
,然后将其放入可绘制文件夹中。现在,您可以将其作为EditText
的背景应用于:
android:background="@drawable/bg_edit_text"
答案 9 :(得分:4)
小部件的背景是依赖于API级别。
替代方案1
您可以通过
为EditText
背景提供自定义图片
android:background="@drawable/custom_editText"
您的图片应该是这样的。它会给你带来理想的效果。
ALTERNATIVE 2
将此xml设置为EditText
背景属性。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" android:padding="10dp">
<solid android:color="#4C000000"/>
<corners android:bottomRightRadius="5dp"
android:bottomLeftRadius="5dp"
android:topLeftRadius="5dp"
android:topRightRadius="5dp"/>
</shape>
这与每个API上的EditText
具有相同的外观。
答案 10 :(得分:4)
您可以通过着色背景来更改颜色
<EditText
android:backgroundTint="@color/red"/>
答案 11 :(得分:3)
您可以使用以下代码行以编程方式更改EditText的颜色:edittext.setBackgroundTintList(ColorStateList.valueOf(yourcolor));
答案 12 :(得分:2)
如果你想要一条扁平线,你可以使用xml轻松完成。这是xml示例:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:top="-1dp"
android:left="-1dp"
android:right="-1dp"
android:bottom="1dp"
>
<shape android:shape="rectangle">
<stroke android:width="1dp" android:color="#6A9A3A"/>
</shape>
</item>
</layer-list>
如果要为聚焦的edittext提供不同的宽度和颜色,请使用选择器替换形状。
答案 13 :(得分:2)
使用此方法..并根据您的视图名称进行修改。这段代码效果很好。
private boolean validateMobilenumber() {
if (mobilenumber.getText().toString().trim().isEmpty() || mobilenumber.getText().toString().length() < 10) {
input_layout_mobilenumber.setErrorEnabled(true);
input_layout_mobilenumber.setError(getString(R.string.err_msg_mobilenumber));
// requestFocus(mobilenumber);
return false;
} else {
input_layout_mobilenumber.setError(null);
input_layout_mobilenumber.setErrorEnabled(false);
mobilenumber.setBackground(mobilenumber.getBackground().getConstantState().newDrawable());
}
答案 14 :(得分:2)
最好的方法是使用AppCompatEditText
backgroundTint
app
命名空间的 <android.support.v7.widget.AppCompatEditText
android:layout_width="match_parent"
app:backgroundTint="YOUR COLOR"
android:layout_height="wrap_content" />
属性。即。
android:backgroundTint
当我们使用app:backgroundTint
时,它只能在API21或更高版本中使用,但SELECT u1.username user1, u2.username user2
FROM rel
JOIN users u1 ON rel.user1 = u1.user_id
JOIN users u2 ON rel.user2 = u2.user_id
适用于您应用的所有API级别。
答案 15 :(得分:1)
尝试以下方式,当用作背景属性时,它将转换EditText的底线颜色。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:left="@dimen/spacing_neg"
android:right="@dimen/spacing_neg"
android:top="@dimen/spacing_neg">
<shape>
<solid android:color="@android:color/transparent" />
<stroke
android:width="@dimen/spacing_1"
android:color="@android:color/black" />
</shape>
</item>
</layer-list>
答案 16 :(得分:1)
<EditText
android:id="@+id/et_password_tlay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Password"
android:textColorHint="#9e9e9e"
android:backgroundTint="#000"
android:singleLine="true"
android:drawableTint="#FF4081"
android:paddingTop="25dp"
android:textColor="#000"
android:paddingBottom="5dp"
android:inputType="textPassword"/>
<View
android:id="@+id/UnderLine"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_below="@+id/et_password_tlay"
android:layout_centerHorizontal="true"
android:background="#03f94e" />
**用视图**
答案 17 :(得分:1)
对该edittext使用android:background属性。将可绘制的文件夹图像传递给它。 例如,
android:background="@drawable/abc.png"
答案 18 :(得分:0)
这可以通过在editText中包含此android:theme="@style/AppTheme.AppBarOverlay
属性来完成
并将此<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
添加到您的样式
答案 19 :(得分:0)
drawable / bg_edittext.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:gravity="bottom">
<shape>
<size android:height="1dp" />
<solid android:color="@android:color/black" />
</shape>
</item>
</layer-list>
设置为EditText
<android.support.v7.widget.AppCompatEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_edittext"/>
答案 20 :(得分:0)
重要的是,您的应用程序主题必须继承自Theme.AppCompat.*
,而不是Theme.AppCompat.*
。
答案 21 :(得分:0)
如果您有用于 edittext 的自定义类,则可以动态执行此操作。
首先,您必须声明下面给出的编辑文本的状态和颜色。
int[][] states = new int[][]{
new int[]{-android.R.attr.state_focused}, // enabled
new int[]{android.R.attr.state_focused}, // disabled
};
int[] colors = new int[]{
secondaryColor,
primaryColor,
};
然后用它创建 ColorStateList 变量
ColorStateList myList = new ColorStateList(states, colors);
然后最后一步是将其分配给edittext。
editText.setBackgroundTintList(myList);
在此之后,您必须编写焦点更改事件。
this.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean b) {
setUnderlineColor(selectionColor,deselectionColor);
}
});
您可以在 setUnderlineClor() 方法中制作上述代码,
private void setUnderlineColor(int primaryColor, int secondaryColor) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
int[][] states = new int[][]{
new int[]{-android.R.attr.state_focused}, // enabled
new int[]{android.R.attr.state_focused}, // disabled
};
int[] colors = new int[]{
secondaryColor,
primaryColor,
};
ColorStateList myList = new ColorStateList(states, colors);
setBackgroundTintList(myList);
}
}