android-textinputlayout 相关问题

由于用户输入文本而隐藏提示时,包装EditText(或后代)以显示浮动标签的布局。

Jetpack Compose 如何去除 EditText/TextField 下划线并保留光标?

嗨,我需要删除文本字段中的下划线,因为当文本字段是圆形时它看起来很丑。我已将 activeColor 设置为透明,但光标不会显示(因为它是透明的...

回答 3 投票 0

如何防止键盘打开时MaterialAlertDialogBuilder高度自动调整大小?

我使用 MaterialAlertDialogBuilder 构建了一个自定义对话框。该对话框有 2 个 TextInputLayout。问题是当我尝试在 TextInputEditText 中写一些东西并且键盘可见时......

回答 1 投票 0

如何设置TextInputLayout错误信息颜色?

如何更改可设置为显示在 TextInputLayout 中文本字段下方的错误消息的颜色(通过 setError(...) – 请参阅此处的错误状态)? 它通常显示为红色,w...

回答 10 投票 0

高度为wrap_content的多行TextInputEditText不恢复大小

如果 xml 中有以下布局。这是更大布局的一部分 如果 xml 中有以下布局。这是更大布局的一部分 <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/layoutInputNewText" android:layout_width="match_parent" android:layout_height="0dp" android:minHeight="52dp" android:layout_marginTop="5dp" android:background="@color/white" android:visibility="visible" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"> <com.google.android.material.textfield.TextInputLayout android:id="@+id/inputMessage" style="@style/TextInputLayout" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="0dp" android:layout_marginTop="0dp" android:layout_marginEnd="4dp" android:hint="@string/write_a_message" android:labelFor="@id/editMessage" android:textColorHint="@color/chip_text" app:layout_constraintEnd_toStartOf="@id/buttonSend" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:startIconTint="@color/default_green"> <com.google.android.material.textfield.TextInputEditText android:id="@+id/editMessage" android:layout_width="match_parent" android:maxHeight="150dp" android:layout_height="wrap_content" android:layout_marginEnd="4dp" android:focusable="true" android:focusableInTouchMode="true" android:inputType="textMultiLine" android:maxLines="3" android:paddingStart="20dp" android:paddingTop="15dp" android:paddingEnd="10dp" android:paddingBottom="15dp" android:textColor="@color/accent_color_light" android:textColorHint="@color/secondary_text_color" android:textSize="16sp" tools:ignore="Autofill,TextFields" /> </com.google.android.material.textfield.TextInputLayout> TextInputLayout 的样式如下: <style name="TextInputLayout" parent="Widget.MaterialComponents.TextInputLayout.FilledBox"> <item name="boxBackgroundColor">@android:color/transparent</item> <item name="background">@android:color/transparent</item> <item name="backgroundTint">@android:color/transparent</item> <item name="boxStrokeWidth">0dp</item> <item name="android:layout_marginStart">@dimen/main_side_margin</item> <item name="android:layout_marginEnd">@dimen/main_side_margin</item> <item name="android:layout_marginTop">@dimen/label_to_field_margin</item> <item name="colorAccent">@android:color/white</item> <item name="errorTextAppearance">@style/ErrorText</item> <item name="errorIconDrawable">@null</item> <item name="boxStrokeWidthFocused">0dp</item> <item name="colorControlNormal">@android:color/transparent</item> <item name="colorControlActivated">@android:color/transparent</item> <item name="colorControlHighlight">@android:color/transparent</item> <item name="android:theme">@style/ThemeOverlay.AppTheme.TextInputEditText.Outlined</item> </style> <style name="ThemeOverlay.AppTheme.TextInputEditText.Outlined" parent=""> <item name="colorControlActivated">@color/accent_color_light</item> </style> 我在这样的代码中设置文本:editMessage.setText(message.message) 如果文本很长,我会按预期有一个多行 TextInputEditText 完成编辑并单击按钮后,我执行以下操作: fun enableNextMessage(errorMsg: String?) { with(binding) { buttonSend.isEnabled = true if (errorMsg == null) { layoutReply.isVisible = false inputMessage.startIconDrawable = null editText.text = null } else showWarning(false, errorMsg) } } 问题在于 editText 大小保持为多行且具有最大行数。 我尝试通过以下方式设置editMessageheight: editMessage.layoutParams.height = FrameLayout.LayoutParams.WRAP_CONTENT 没有帮助 执行以下操作会有所帮助: binding.editMessage.layoutParams.height = resources.getDimensionPixelSize(R.dimen.default_input_size) 但是当然,在那之后 editMessage 不再是多行的,并且不会改变它的大小。 我尝试设置固定高度,然后设置WRAP_CONTENT。它不起作用。一旦我设置了 WRAP_CONTENT,它就会恢复到更大的尺寸。 有帮助的是摆脱 TextInputLayout 并只留下 TextInputEditText

回答 1 投票 0

如何从 jetpack compose 更改 OutlinedTextField 的轮廓颜色?

这是 OutlinedTextField 代码在 jetpack-compose 中的样子: 大纲文本字段( 值=“”, onValueChange = {}, 标签 = {文本(“输入”)} ) 默认颜色...

回答 7 投票 0

设备旋转后,AutoCompleteTextView 下拉列表不显示

我有以下 AutoCompleteTextView: 我有以下 AutoCompleteTextView: <com.google.android.material.textfield.TextInputLayout android:id="@+id/offering_type_dropdown_layout" style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginEnd="@dimen/date_card_spacing" android:layout_marginStart="4dp" app:layout_constraintStart_toEndOf="@+id/offering_details_header_image" app:layout_constraintEnd_toStartOf="@+id/offering_details_date_layout" app:layout_constraintTop_toTopOf="parent" android:hint="@string/offering_type_hint"> <AutoCompleteTextView android:id="@+id/offering_details_type_dropdown" android:layout_width="match_parent" android:layout_height="match_parent" android:inputType="textNoSuggestions" android:clickable="false" android:focusable="false" android:focusableInTouchMode="false" android:cursorVisible="false"/> </com.google.android.material.textfield.TextInputLayout> 在我的 Activity 的 onCreate 中,我像这样填充 AutoCompleteTextView: String[] TYPES = new String[] {getString(R.string.burnt_offering), getString(R.string.meal_offering), getString(R.string.peace_offering), getString(R.string.sin_offering)}; ArrayAdapter<String> adapter = new ArrayAdapter<>(OfferingInputActivity.this, R.layout.offering_types_dropdown, TYPES); mOfferingTypeCombo.setAdapter(adapter); 然后我使用 Room 数据库填充视图并预选其中一个值。在房间回调中,我这样做: mOfferingTypeCombo.setText(getString(R.string.meal_offering)), false); 首次运行时一切正常,下拉列表显示正确: 现在我将设备旋转到横向。执行与上面完全相同的代码但是这次,下拉框仅显示当前选择: 由于某种原因,适配器中的所有其他条目都消失了。在设置适配器之前,我尝试过诸如setAdapter(null)之类的技巧,但没有成功。 有人可以告诉我为什么旋转后,即使执行完全相同的代码,下拉菜单也会缺少条目? 这个习俗MaterialAutoCompleteTextView 解决所有问题: class ExposedDropdownMenu : MaterialAutoCompleteTextView { constructor(context: Context) : super(context) constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super( context, attrs, defStyleAttr ) override fun getFreezesText(): Boolean { return false } init { inputType = InputType.TYPE_NULL } override fun onSaveInstanceState(): Parcelable? { val parcelable = super.onSaveInstanceState() if (TextUtils.isEmpty(text)) { return parcelable } val customSavedState = CustomSavedState(parcelable) customSavedState.text = text.toString() return customSavedState } override fun onRestoreInstanceState(state: Parcelable?) { if (state !is CustomSavedState) { super.onRestoreInstanceState(state) return } setText(state.text, false) super.onRestoreInstanceState(state.superState) } private class CustomSavedState(superState: Parcelable?) : BaseSavedState(superState) { var text: String? = null override fun writeToParcel(out: Parcel, flags: Int) { super.writeToParcel(out, flags) out.writeString(text) } } } 来源 注意: 它可能无法在 23 或更低版本等较旧的 API 中正常工作。 一种方法是使用自定义 ArrayAdapter 来防止 Filter 文本。 class NoFilterArrayAdapter : ArrayAdapter<Any?> { constructor(context: Context, resource: Int) : super(context, resource) constructor(context: Context, resource: Int, objects: Array<out Any?>) : super(context, resource, objects) override fun getFilter(): Filter { return object : Filter() { override fun performFiltering(constraint: CharSequence?): FilterResults? { return null } override fun publishResults(constraint: CharSequence?, results: FilterResults?) {} } } } 用途: val adapter = NoFilterArrayAdapter(requireContext(), android.R.layout.simple_list_item_1, items) 目前此主题有一个未解决的错误。 您可以使用 setFreezesText 方法作为解决方法: AutoCompleteTextView autoCompleteTextView = view.findViewById(R.id.offering_details_type_dropdown); autoCompleteTextView.setFreezesText(false); EditText 设置freezesText=true。由于旋转后的这个值,TextView#onRestoreInstanceState(Parcelable)调用autoCompleteTextView.setText(value,true),它将过滤器应用于适配器值。 就像 @Gabriele Mariotti 提到的,这是一个错误。正如发布的链接中提到的,我做了这个效果很好的解决方法: public class ExposedDropDown extends MaterialAutoCompleteTextView { public ExposedDropDown(@NonNull final Context context, @Nullable final AttributeSet attributeSet) { super(context, attributeSet); } @Override public boolean getFreezesText() { return false; } } 我通过从 AutoCompleteTextView 中删除 id 解决了这个问题。这个id负责保存旋转后的文本。 在 onSaveInstanceState 方法中保存来自 AutoCompleteTextView 的字符串。 代码: <com.google.android.material.textfield.TextInputLayout android:id="@+id/inputAddress" style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox.ExposedDropdownMenu" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/Address"> <AutoCompleteTextView android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="none" /> </com.google.android.material.textfield.TextInputLayout> list_item.xml <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp" android:ellipsize="end" android:maxLines="1" android:textAppearance="?attr/textAppearanceSubtitle1" /> 片段.类 class CashierAddFragment : Fragment() { var mBinding: FragmentCashierAddBinding? = null override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val binding = FragmentCashierAddBinding.inflate(inflater, container, false) if(savedInstanceState == null) { initAddressSpinner(binding, "") } else { initAddressSpinner(binding, savedInstanceState.getString(KEY_ADDRESS)) } mBinding = binding return binding.root } override fun onSaveInstanceState(outState: Bundle) { val address = mBinding!!.inputAddress.getTrimText() outState.putString(KEY_ADDRESS, address) super.onSaveInstanceState(outState) } private fun initAddressSpinner(binding: FragmentCashierAddBinding, initValue: String?) { val items = listOf("Option 1", "Option 2", "Option 3", "Option 4") val adapter = ArrayAdapter(requireContext(), R.layout.list_item, items) val autoTxtAddress = binding.inputAddress.editText as? AutoCompleteTextView autoTxtAddress?.setText(initValue) autoTxtAddress?.setAdapter(adapter) } } @Mohsents 提出的解决方案对我有用。这是我使用的他的代码的java版本: public class NoFilterArrayAdapter extends ArrayAdapter<Object> { public NoFilterArrayAdapter(Context context, int resource) { super(context, resource); } public NoFilterArrayAdapter(Context context, int resource, Object[] objects) { super(context, resource, objects); } @Override public Filter getFilter() { return new Filter() { @Override protected FilterResults performFiltering(CharSequence constraint) { return null; } @Override protected void publishResults(CharSequence constraint, FilterResults results) { } }; } } 要在方向更改时解决此问题,请在 XML 中添加此内容 android:saveEnabled =“假”

回答 6 投票 0

Android TextInputLayout 自动填充

我正在开发一个android应用程序,我使用TextInputLayouts来获取用户的输入,在api级别24上测试它时它不会引起任何问题,但是当我尝试在最新的手机上测试它时一些

回答 1 投票 0

为什么我的设备会使用外部键盘自动取消选择我的 TextInputLayout/TextInputEditText?

我有一个卡片视图适配器,其中每张卡片都是填写必填值的表单(如果用户想要保存该值)和一个可选的注释框。 这个强制值和可选的注释...

回答 1 投票 0

如何以编程方式创建材料编辑文本字段?

我想创建一个像这样的材料编辑文本字段: 在此处输入图像描述 这就是我创建编辑文本字段的方式: TextInputLayout textInputLayout = new TextInputLayout(MainActivity.t...

回答 1 投票 0

如何更改 TextInputLayout 中的 startIconDrawable 大小

似乎没有XML属性来改变android中的startIconDrawable大小。与文本相比,图标过大。 这是问题的屏幕截图: 这是我的 XML: <

回答 3 投票 0

如何将图标添加到文本输入布局标签?

我可以将图标添加到 android 文本输入布局标签吗? 我想创建一个文本输入布局,如下所示: 这是我创建的文本输入布局: 这是我的 xml 代码: 我可以将图标添加到 android 文本输入布局标签吗? 我想创建如下设计的文本输入布局: 这是我创建的文本输入布局: 这是我的 xml 代码: <com.google.android.material.textfield.TextInputLayout android:layout_width="match_parent" android:layout_height="match_parent" app:hintTextColor="@color/text_color_primary" android:textColorHint="@color/text_color_tertiary" android:theme="@style/EditTextHintWhite" app:boxBackgroundMode="filled" > <com.google.android.material.textfield.TextInputEditText android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/transparent" android:gravity="right" android:hint="نام و نام خانوادگی" android:maxLines="1" android:paddingHorizontal="0dp" android:textColor="@color/text_color_secondary" android:textCursorDrawable="@drawable/background_cursor_tertiary" android:textSize="@dimen/_16cdp" /> </com.google.android.material.textfield.TextInputLayout> <style name="EditTextHintWhite"> <item name="colorError">@color/text_color_tertiary</item> <item name="colorPrimary">@color/text_color_tertiary</item> <item name="colorOnSurface">@color/text_color_tertiary</item> </style> 如何为标签添加图标?可能吗?

回答 0 投票 0

如何查看 TextInputLayout 中的 endIcon 是否被选中?

EndCompoundLayout 中有一个 isEndIconChecked(),但我看不到从 TextInputLayout 访问它的任何方法。 检测当前是否已检查的最佳方法是什么? 就我而言,我

回答 3 投票 0

更改 TextInputLayout 标签 TextView 的背景颜色

所以我正在尝试更改 TextInputLayout/EditText 上标签的背景颜色。大多数其他问题似乎是指文本的颜色,但默认功能 o...

回答 0 投票 0

使用 TextInputLayout 和 TextInputEditText 后不显示设计布局

我在尝试使用 TextInputLayout 和 TextInputEditText 时遇到了问题。 这是我的代码 我在尝试使用 TextInputLayout 和 TextInputEditText 时遇到了问题。 这是我的代码 <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".SignUpActivity"> <com.google.android.material.textfield.TextInputLayout android:layout_width="match_parent" android:layout_height="match_parent" android:hint="Enter Password" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> <com.google.android.material.textfield.TextInputEditText android:layout_width="match_parent" android:layout_height="52dp" android:inputType="textPassword" android:lines="1" android:hint="Enter Passwrod"/> </com.google.android.material.textfield.TextInputLayout> </androidx.constraintlayout.widget.ConstraintLayout> 这就是设计页面中显示的屏幕 设计页面应该有显示的东西。我已经查看了几个 youtube 教程视频,但那些不能帮助我解决问题。 这是我的build.gradle(模块) plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' } android { namespace 'com.james.kfarm' compileSdk 33 defaultConfig { applicationId "com.james.kfarm" minSdk 24 targetSdk 33 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8' } } dependencies { implementation 'androidx.core:core-ktx:1.7.0' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.8.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' //Splash Screen API implementation 'androidx.core:core-splashscreen:1.0.0-beta02' } 看了几个关于textinputlayout和textinputedittext的使用问题。一些答案建议升级 "androidx.appcompat:appcompat" 和 "com.google.android.material:material" 的版本。但是我已经将它们升级到最新版本并且它不起作用。 我也重建了项目作为问题“添加视图后Android Studio无法显示设计布局”建议 如果有人能帮助解决问题,那将是对我很大的帮助和安慰。感谢您阅读这么长的问题。 经过多次尝试,我找到了解决问题的方法。 事实上,您在活动中使用的主题并不是所需要的。在我的例子中,消息表明该活动需要“AppCompat”来实例化 textInputLayout 和 textInputEditText。我添加了添加新样式 下面的代码是我在活动中使用的主题 <style name = "Theme.App.Fullscreen" parent= "Theme.AppCompat.DayNight.NoActionBar"> <item name="windowNoTitle">true</item> <item name="windowActionBar">false</item> <item name="android:windowFullscreen">true</item> <item name="android:windowContentOverlay">@null</item> </style> 我已经导航到 AndroidManifest.xml 并更改相关活动的主题 <activity android:name=".SignUpActivity" android:exported="false" android:theme="@style/Theme.App.Fullscreen"> <meta-data android:name="android.app.lib_name" android:value="" /> </activity> 相关代码全部改完后,我关闭了Android Studio,重新打开。它最终显示了文本输入布局和文本输入编辑文本。 但是,当你想更改textinputlayout的样式时,比如outlined box,你可能需要将主题从AppCompat更改为MaterialComponent以避免实例化错误

回答 1 投票 0

How to get Corner Radius in TextInputLayout OutlinedBox style on android

如何实现下面的设计 我可以实现以下设计。如何向盒子添加半径 这是我的代码 <p>如何实现下面的设计</p> <p><a href="https://i.stack.imgur.com/Prmo5.png" target="_blank"><img src="https://cdn.imgupio.com/i/AWkuc3RhY2suaW1ndXIuY29tL1BybW81LnBuZw==" alt=""/></a></p> <p>我可以实现下面的设计。我怎样才能给盒子添加半径<a href="https://i.stack.imgur.com/9rnGe.png" target="_blank"><img src="https://cdn.imgupio.com/i/AWkuc3RhY2suaW1ndXIuY29tLzlybkdlLnBuZw==" alt=""/></a></p> <p>这是我的代码</p> <pre><code> &lt;style name=&#34;TextInputLayoutStyle&#34; parent=&#34;@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox&#34;&gt; &lt;item name=&#34;boxBackgroundColor&#34;&gt;@color/neutralWhite&lt;/item&gt; &lt;item name=&#34;boxStrokeColor&#34;&gt;@color/secondaryOrange&lt;/item&gt; &lt;item name=&#34;hintTextColor&#34;&gt;@color/secondaryOrange&lt;/item&gt; &lt;item name=&#34;android:textColorHint&#34;&gt;@color/neutralDark&lt;/item&gt; &lt;item name=&#34;textColor&#34;&gt;@color/neutralDark&lt;/item&gt; &lt;item name=&#34;errorEnabled&#34;&gt;true&lt;/item&gt; &lt;item name=&#34;boxCornerRadiusTopEnd&#34;&gt;10dp&lt;/item&gt; &lt;item name=&#34;boxCornerRadiusTopStart&#34;&gt;10dp&lt;/item&gt; &lt;item name=&#34;boxCornerRadiusBottomStart&#34;&gt;10dp&lt;/item&gt; &lt;item name=&#34;boxCornerRadiusBottomEnd&#34;&gt;10dp&lt;/item&gt; &lt;item name=&#34;hintTextAppearance&#34;&gt;@style/HintText&lt;/item&gt; &lt;item name=&#34;errorTextAppearance&#34;&gt;@style/HintText&lt;/item&gt; &lt;/style&gt; </code></pre> <p>和我的 XML</p> <pre><code> &lt;com.google.android.material.textfield.TextInputLayout android:id=&#34;@+id/userId&#34; style=&#34;@style/TextInputLayoutStyle&#34; android:layout_width=&#34;match_parent&#34; android:layout_height=&#34;wrap_content&#34; android:layout_margin=&#34;8dp&#34; android:hint=&#34;@string/passwordPlaceholder&#34; app:layout_constraintStart_toStartOf=&#34;parent&#34; app:layout_constraintTop_toBottomOf=&#34;@id/signInHeader&#34;&gt; &lt;com.google.android.material.textfield.TextInputEditText style=&#34;@style/TextInputEditText&#34; android:layout_width=&#34;match_parent&#34; android:layout_height=&#34;wrap_content&#34; android:inputType=&#34;text&#34; /&gt; &lt;/com.google.android.material.textfield.TextInputLayout&gt; </code></pre> </question> </body></html>

回答 0 投票 0


在TextInputLayout Outlined样式中,错误信息间距不工作。

我试图使用MaterialComponents TextInputLayout实现一个表单。根据文档,它应该有一个错误信息的空间。我在布局xml中启用了错误信息,但它也显示...

回答 1 投票 0

使用TextInputLayout的线性布局,但面临一个问题。

这张图是我应用线性布局的片段的截图 布局的XML文件在下面

回答 1 投票 0



© www.soinside.com 2019 - 2024. All rights reserved.