我想更改右侧图标错误(带有!符号的图像)的样式TextInputLayout但我不知道如何更改。
有可能的?。

android android-textinputlayout material-components material-components-android
我在我的应用程序中使用TextInputLayoutandTextInputEditText以及android:inputType="textAutoComplete"and 我不允许两个单词之间有空格,因此如果我在自动完成下拉列表或拼写检查中选择带有空格的项目,我会遇到IndexOutOfBoundsException:
java.lang.IndexOutOfBoundsException: setSpan (0 ... 8) ends beyond length 7
at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1265)
at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:684)
at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:677)
at android.widget.TextView.setSpan_internal(TextView.java:9900)
at android.widget.Editor.replaceWithSuggestion(Editor.java:2654)
at android.widget.Editor.-wrap18(Editor.java)
at android.widget.Editor$SuggestionsPopupWindow.onItemClick(Editor.java:3638)
at android.widget.AdapterView.performItemClick(AdapterView.java:310)
at android.widget.AbsListView.performItemClick(AbsListView.java:1156)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3121)
at android.widget.AbsListView$3.run(AbsListView.java:4036)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Run Code Online (Sandbox Code Playgroud)
在我的活动中,我使用TextWatcher:
private final TextWatcher mTextWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override …Run Code Online (Sandbox Code Playgroud) 我想在 a中将errorEnabled和 都设置为 true ,但似乎这两者不能共存,因为一个像这样覆盖另一个。passwordToggleEnabledTextInputLayout
我想这样做是因为我正在验证密码字段以匹配特定条件,并且我希望用户能够看到错误消息和已输入的密码。
这是我的代码:
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:counterEnabled="true"
app:errorEnabled="true"
app:passwordToggleEnabled="true">
<android.support.design.widget.TextInputEditText
android:id="@+id/password_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/password"
android:inputType="textPassword" />
</android.support.design.widget.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)
是否可以将密码切换图标移到感叹号左侧一点?或者我是否必须创建一个自定义可绘制对象并使用它而不是密码切换图标?
我想要密码切换功能,它似乎TextInputLayout有这个功能,而不是TextInputEditText。但正如您在下面的代码中看到的那样,即使我将高度设置为wrap_content和,如果位于 中,app:hintEnabled="false"的高度TextInputEditText也会更高。将其与外部的高度进行比较。TextInputEditTextTextInputLayoutTextInputEditTextTextInputLayout
由于我不使用该提示动画,因此无需增加TextInputLayout的高度TextInputEditText。如何防止TextInputLayout高度增加TextInputEditText?
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".MainActivity">
<EditText
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="121dp"
android:background="#66FF0000"
android:text="Normal EditText"
android:inputType="textEmailAddress"/>
<android.support.design.widget.TextInputLayout
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="196dp"
app:hintEnabled="false"
app:passwordToggleEnabled="true">
<android.support.design.widget.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#660000FF"
android:hint="TextInputEditText inside TextInputLayout"
android:inputType="textPassword"/>
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputEditText
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:background="#6600FF00"
android:hint="TextInputEditText"
android:inputType="textPassword"/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud) 我想在我的应用程序中使用TextInputEditText和TextInputLayout,但它不适用于Theme.AppCompat.Light.NoActionBar. 但是如果我将它设置为Theme.MaterialComponents.Light.NoActionBar,它将毫无问题地工作,但这会破坏我在应用程序中的所有样式。
XML 中的用法:
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/nameLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/reg_edit_text_style"
app:errorEnabled="true"
android:hint="@string/name">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/nameEt"
android:layout_width="match_parent"
android:nextFocusDown="@id/lastNameEt"
android:inputType="text"
style="@style/reg_edit_text_inner_style"/>
</com.google.android.material.textfield.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)
在build.gradle:
implementation 'com.google.android.material:material:1.1.0-alpha07'
implementation 'androidx.appcompat:appcompat:1.0.2'
Run Code Online (Sandbox Code Playgroud)
错误:
Caused by: java.lang.IllegalArgumentException: The style on this component requires your app theme to be Theme.MaterialComponents (or a descendant).
at com.google.android.material.internal.ThemeEnforcement.checkTheme(ThemeEnforcement.java:240)
at com.google.android.material.internal.ThemeEnforcement.checkMaterialTheme(ThemeEnforcement.java:215)
at com.google.android.material.internal.ThemeEnforcement.checkCompatibleTheme(ThemeEnforcement.java:143)
Run Code Online (Sandbox Code Playgroud) 这是我应用程序的主要风格
<style name="Theme.RoundRobin" parent="Theme.MaterialComponents.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorSecondaryVariant</item>
<item name="colorAccent">@color/colorPrimaryVariant</item>
<item name="colorControlActivated">@color/colorControlActivated</item>
<item name="colorControlNormal">@color/colorControlNormal</item>
<item name="colorControlHighlight">@color/colorControlNormal</item>
<item name="android:textColorPrimary">@color/textColorPrimary</item>
<item name="android:windowLightStatusBar" tools:targetApi="m">false</item>
</style>
Run Code Online (Sandbox Code Playgroud)
据我所知,colorControlHighlight 应该为 textinputlayout 中的下划线、标签和光标着色。
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/username_til"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginLeft="24dp"
android:layout_marginTop="24dp"
android:layout_marginEnd="24dp"
android:layout_marginRight="24dp"
app:hintTextAppearance="@style/TextAppearance.Subtitle1"
app:layout_constraintBottom_toTopOf="@+id/password_til"
app:layout_constraintEnd_toEndOf="parent"
android:hint="Username"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/usernameEt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.Body2"/>
</com.google.android.material.textfield.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)
没有一个 colorControls 应该与新的 MaterialCompoents 一起使用。
我在这里错过了什么吗
我给了我的 TextInput 这种样式,但它看起来好像 MaterialComponents 不能很好地与 colorControlsX 一起使用
<style name="Widget.RoundRobin.TextInputLayout.FilledBox" parent="Widget.MaterialComponents.TextInputLayout.FilledBox">
<item name="hintTextAppearance">@style/TextAppearance.Caption</item>
<item name="android:paddingBottom">8dp</item>
<item name="boxBackgroundColor">@color/colorWhite</item>
<item name="android:colorControlHighlight">@color/colorSecondaryVariant</item> // this doesn't …Run Code Online (Sandbox Code Playgroud) android material-design android-textinputlayout material-components material-components-android
我在 TextInputLayout 上有一个奇怪的错误。com.google.android.material.textfield.TextInputEditText焦点的提示颜色变为白色。
这就是我设置它的方式:
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/inputEmail"
style="@style/EditText.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="16dp"
app:boxStrokeColor="@color/colorBrand">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/editTextEmail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:hint="@string/edt_hint_email"
android:inputType="textEmailAddress"
android:textAlignment="viewStart" />
</com.google.android.material.textfield.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)
..这是风格:
<style name="EditText.OutlinedBox" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<item name="android:minHeight">56dp</item>
<item name="android:textSize">18sp</item>
<item name="android:fontFamily">@font/dubai_regular</item>
<item name="hintEnabled">true</item>
</style>
Run Code Online (Sandbox Code Playgroud)
编辑:添加 style.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="TextAppearance.AppCompat.Title" parent="TextAppearance.AppCompat.Large">
<item name="android:textColor">@color/colorTextPrimary</item>
<item name="android:layout_gravity">center_vertical</item>
</style>
<style name="EditText.OutlinedBox" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<item name="android:minHeight">56dp</item>
<item name="android:textSize">18sp</item>
<item name="android:fontFamily">@font/dubai_regular</item>
<item name="hintEnabled">true</item>
</style>
<style name="Button" parent="Widget.MaterialComponents.Button">
<item name="cornerRadius">10dp</item>
<item name="backgroundTint">@color/colorAccent</item>
<item name="android:minHeight">56dp</item>
<item name="android:textAllCaps">false</item>
<item name="android:fontFamily">@font/dubai_bold</item>
<item name="android:elevation">0dp</item>
<item …Run Code Online (Sandbox Code Playgroud) layout android kotlin android-textinputlayout android-textinputedittext
我想使用自定义结束图标从材料设计的 TextInputLayout 获取文本。
我试图这样做:
TextInputLayout textInputCustomEndIcon = findViewById(R.id.editText);
final TextInputEditText editText = new TextInputEditText(textInputCustomEndIcon.getContext());
textInputCustomEndIcon
.setEndIconOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (editText.getText() != null) {
String text = editText.getText().toString();
Log.i("MainActivity", "setEndIconOnClickListener:"+ text);
}
}
});
Run Code Online (Sandbox Code Playgroud)
但我得到一个空文本,不是空而是空!!
android material-design android-textinputlayout android-textinputedittext
我想以TextInputLayout编程方式为我的启动图标设置开始图标,但我遇到了他的颜色问题。当我设置 drawable 时,它的颜色变成灰色,但它的原始颜色是橙色。我知道我可以通过startIconTint在 xml 中使用参数来改变它的颜色,但我想以编程方式改变它的颜色。有人可以帮我弄这个吗。
android material-design android-textinputlayout material-components material-components-android
在当前将我的应用程序转换为 Jetpack compose 时,我在某些情况下遇到了一些问题来调整我当前的调色板。
TextInputLayout我的 xml 文件中有一些从主题上的 SECUNDARY 颜色继承了高亮文本颜色。
<style name="Theme.MyApp" parent="Theme.MaterialComponents.Light.NoActionBar">
...
<item name="colorPrimary">@color/blue</item>
<item name="colorPrimaryVariant">@color/blue</item>
<item name="colorSecondary">@color/red</item>
<item name="colorSecondaryVariant">@color/red</item>
...
</style>
Run Code Online (Sandbox Code Playgroud)

问题是我的TextFieldon compose 继承了 PRIMARY 颜色的高亮文本颜色MaterialTheme。
MaterialTheme(
colors = Colors(
primary = Color.Blue,
...
secondary = Color.Red,
...
),
content = content,
typography = MaterialTheme.typography,
shapes = MaterialTheme.shapes,
) {
TextField(...)
}
Run Code Online (Sandbox Code Playgroud)

我覆盖了colors参数,TextField但似乎没有影响这种颜色。
是否有一种方法可以在不更改colorson 的情况下覆盖 compose 上的突出显示颜色MaterialTheme?我想避免这种情况,因为它可能会在使用相同主题的其他屏幕上引起问题。
android android-textinputlayout android-jetpack-compose android-jetpack-compose-text
android ×10
material-components-android ×3
android-jetpack-compose-text ×1
kotlin ×1
layout ×1
xml-layout ×1