标签: android-textinputlayout

Android TextInputLayouts 在片段事务中返回时丢失文本/内容

我已经搜索了一段时间,但我认为大多数报告的错误(并且有很多)android.support.design.widget.TextInputLayout与这个略有不同。至少,我已经解决了大多数其他错误,但在这个问题上很挣扎。我目前Fragment在我的活动中有几个TextInputLayout这样的

<android.support.design.widget.TextInputLayout
    android:id="@+id/input1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/hint1"
        android:inputType="numberSigned" />
</android.support.design.widget.TextInputLayout>

<android.support.design.widget.TextInputLayout
    android:id="@+id/input2
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/hint2"
        android:inputType="numberSigned"/>
</android.support.design.widget.TextInputLayout>

<android.support.design.widget.TextInputLayout
    android:id="@+id/input3"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/hint3"
        android:inputType="numberSigned">
</android.support.design.widget.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)

并且,在满足一些外部条件(不重要)之后,我打开并显示隐藏上述片段的另一个片段(100% 屏幕)。如果您想知道这个新片段要求我在特定情况下需要的一些额外字段。这是处理新创建的代码Fragment

Fragment2 fragment2 = new Fragment2();
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction()
                                .replace(((ViewGroup) getView().getParent()).getId(), fragment2);
transaction.addToBackStack(Fragment1.class.getSimpleName());
transaction.commit();
Run Code Online (Sandbox Code Playgroud)

但问题是,当返回(按下后退按钮、工具栏/操作栏主页按钮等)到第一个片段时。我所有的人都TextInputLayouts失去了插入他们的文字。这真的很烦人,而且在专门使用 时并没有发生EditText,就像我们之前的 Material Design 过渡一样。

此外,如果不是使用 a 替换片段FragmentTransaction,而是开始一个新的Activity. 不幸的是,这并不是我们真正想要的。我们不应该需要做这种解决方法。

有任何想法吗?有人遇到过这种情况吗?

android android-fragments fragmenttransaction material-design android-textinputlayout

4
推荐指数
1
解决办法
820
查看次数

Android | 使用styles.xml更改TextInputLayout的主题

我想在一个主题中应用自定义样式TextInputLayout's hint并将error其全局应用,即在styles.xml中定义它,并以某种方式将其TextInputLayouts应用于整个应用程序中使用的所有内容,而无需像这样添加内联:

<android.support.design.widget.TextInputLayout
    android:id="@+id/usernameWrapper"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/email_username"
    android:textColorHint="@color/grey_text"
    app:theme="@style/my_custom_style">

<style name="my_custom_style" parent="Widget.Design.TextInputLayout">
    <item name="android:textColorHint">@color/success_accent</item>
    <item name="android:textSize">20sp</item>
</style>
Run Code Online (Sandbox Code Playgroud)

我们可以像这样做Button小部件:

styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="buttonStyle">@style/my.Widget.Button</item>
    <item name="android:buttonStyle">@style/my.Widget.Button</item>
</style>

<style name="my.Widget.Button" parent="@android:style/Widget.TextView">
    <item name="android:gravity">center</item>
    <item name="android:textSize">@dimen/some_dimen</item>
    <item name="android:textAllCaps">false</item>
</style>
Run Code Online (Sandbox Code Playgroud)

注意:我目前正在考虑将子类化TextInputLayout作为最后的手段,因此,请在回答时牢记这一点.

谢谢 :)

xml android android-styles android-textinputlayout

4
推荐指数
2
解决办法
7309
查看次数

使用 TextInputLayout 计算 EditText 中的字符数

我正在尝试使用 TextInputLayout 来计算 EditText 中的字符数。问题是,当我将 editText 包装在 TextInputLayout 的代码中时,editText 消失了。

这是我的 XML 代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:fab="http://schemas.android.com/apk/res-auto"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    tools:context="com.construct.v2.activities.plan.PlanChooserActivity"
    android:background="@android:color/white"
    android:id="@+id/relativeLayout">

    <include android:id="@+id/toolbar" layout="@layout/toolbar_shadow"/>

    <LinearLayout
        android:layout_below="@+id/toolbar"
        android:id="@+id/add_category_layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="invisible">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/add_blue"
        android:paddingTop="20dp"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"
        android:paddingBottom="20dp"/>

    <android.support.design.widget.TextInputLayout
        android:id="@+id/inputLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:counterEnabled="true"
        app:counterMaxLength="55" >

    <EditText
        android:id="@+id/edittext_category"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="@string/add_new_category"
        android:textColorHint="#b1b1b1"
        android:textColor="@color/text_color"
        android:textSize="@dimen/s_text_size"
        android:paddingTop="20dp"
        android:background="#ffffff"
        android:maxLines="1"
        android:inputType="text"/>

    </android.support.design.widget.TextInputLayout>

    </LinearLayout>

    <LinearLayout
        android:id="@+id/layout_bar"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:background="#f5f5f5"
        android:layout_below="@+id/add_category_layout"
        android:visibility="invisible">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginLeft="25dp"
            android:layout_marginRight="15dp"
            android:gravity="center_vertical"
            android:id="@+id/movie_name"
            android:textSize="@dimen/s_text_size"
            android:textColor="#b1b1b1"
            android:text="@string/added_categories"/>

    </LinearLayout>

    <android.support.v7.widget.RecyclerView …
Run Code Online (Sandbox Code Playgroud)

android android-edittext android-textinputlayout

4
推荐指数
1
解决办法
2575
查看次数

TextInputLayout 中分隔线和错误文本之间的填充

如何在 a 中设置divider lineerror text(用图像中的问号​​标记)之间的填充TextInputLayout?我尝试以指定的样式添加填充, errorTextAppearance但没有效果。

在此处输入图片说明

编辑:这是布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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="test.textinputlayouttest.MainActivity">

    <android.support.design.widget.TextInputLayout
        android:id="@+id/address"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:errorEnabled="true"
        app:errorTextAppearance="@style/Error">

        <EditText
            android:id="@+id/username"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Enter address"
            android:inputType="textEmailAddress"
            android:padding="26dp"/>
    </android.support.design.widget.TextInputLayout>

</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

和风格:

<style name="Error" parent="TextAppearance.AppCompat">
    <item name="android:textColor">@color/red</item>
    <item name="android:paddingBottom">300dp</item>
</style>
Run Code Online (Sandbox Code Playgroud)

android android-layout android-textinputlayout

4
推荐指数
1
解决办法
2868
查看次数

新 com.google.android.material.textfield.TextInputEditText 的全局样式

是否可以在com.google.android.material.textfield.TextInputEditText不为每个组件额外设置的情况下设置新组件的样式?

例如:

对于新的,TextInputLayout我可以通过以下方式全局设置样式:

<style name="Theme.MyTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
                                .
                                .
                                .
    <item name="textInputStyle">@style/MyTextInputLayoutStyle</item>
</style>
Run Code Online (Sandbox Code Playgroud)

我希望TextInputEditText有类似的方式,例如:

<item name="editTextStyle">@style/MyTextInputEditTextStyle</item>
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

是一个类似的帖子,但仅适用于旧的设计支持组件。

android material-design android-textinputlayout material-components material-components-android

4
推荐指数
1
解决办法
2577
查看次数

在合并布局根标签的自定义视图中应用样式

我有一个TextInputLayout需要大量重用的自定义样式,因此我尝试将其转换为自定义视图。

这是要重用的 xml:

<com.google.android.material.textfield.TextInputLayout
        style="@style/TextInputLayoutAppearance"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </com.google.android.material.textfield.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)

TextInputLayoutAppearance是我在中创建的自定义样式styles.xml

这是我的自定义视图的类:

 class OutlinedTextInput @JvmOverloads constructor(
    context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : TextInputLayout(context, attrs, defStyleAttr) {

    init {
        LayoutInflater.from(context).inflate(R.layout.view_outlined_textinput, this, true)
    }
}
Run Code Online (Sandbox Code Playgroud)

这是view_outlined_textinput我根据上面的原始 xml 改编的,用于自定义视图:

<merge xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:parentTag="com.google.android.material.textfield.TextInputLayout">

    <com.google.android.material.textfield.TextInputEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</merge>
Run Code Online (Sandbox Code Playgroud)

这里有件事需要注意:

  1. 布局使用合并标签来避免视图层次结构中的冗余视图。

  2. 应用自定义样式至关重要。使用 style= 语法在原始 xml 中应用样式。但是,由于合并标签用于自定义视图,因此无法以这种方式完成。

我尝试按如下方式设置样式,但没有成功:

class OutlinedTextInput @JvmOverloads constructor(
    context: Context, attrs: AttributeSet? = …
Run Code Online (Sandbox Code Playgroud)

android-custom-view android-layout android-styles android-textinputlayout android-textinputedittext

4
推荐指数
1
解决办法
1165
查看次数

使用新的 prefixText 时如何更改 TextInputLayout 的提示填充?

我尝试TextInputLayout使用 new实现prefixText,使用com.google.android.material:material:1.2.0-alpha02. 这是一个非常酷的功能,但是当我添加前缀文本时,提示标签会浮动并在前缀之后对齐。这看起来不太好,特别是如果您在同一页面上有更多没有前缀的输入字段,浮动标签不会对齐。

截屏

我的布局代码的相关部分:

 <LinearLayout
       android:id="@+id/login_input_fields"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:orientation="vertical">

    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/login_username_input"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/username_hint"
        app:prefixText="Prefix">

        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/login_username_edit_text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="number"
            android:singleLine="true" />
    </com.google.android.material.textfield.TextInputLayout>

    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/login_password_input"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/default_margin"
        android:imeOptions="actionDone"
        app:endIconMode="password_toggle">

        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/password_hint"
            android:inputType="textPassword"
            android:singleLine="true"/>

    </com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

android android-textinputlayout material-components material-components-android

4
推荐指数
1
解决办法
1749
查看次数

如何更改 TextInputLayout 提示文本的背景颜色

我正在编写 TextInputLayout 的视图

我的 style.xml 是:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

    <style name="MyTextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense">
        <item name="boxStrokeColor">@color/colorPrimary</item>
        <item name="hintTextColor">@color/colorPrimary</item>
        <item name="boxBackgroundColor">@android:color/white</item>
        <item name="boxStrokeWidth">2dp</item>
    </style>
</resources>
Run Code Online (Sandbox Code Playgroud)

我在 color.xml 中的颜色覆盖是:

<color name="mtrl_textinput_default_box_stroke_color" tools:override="true">#c2261a</color>
Run Code Online (Sandbox Code Playgroud)

我的文本输入布局是:

<com.google.android.material.textfield.TextInputLayout
        android:id="@+id/weightInput"
        style="@style/MyTextInputLayoutStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:layout_marginBottom="15dp"
        android:hint="@string/hint_weight"
        app:errorEnabled="true"
        app:helperTextEnabled="false"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textViewTitle">

        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:imeOptions="actionDone"
            android:importantForAutofill="no"
            android:inputType="numberDecimal"
            android:maxLength="5"
            android:maxLines="1"
            android:singleLine="true"
            android:textAlignment="center"
            android:textColor="@color/colorPrimary" />

    </com.google.android.material.textfield.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)

最终结果是

最后结果

我们可以看到提示文本的背景颜色是透明的。我怎样才能找到那个视图。

我尝试了这种风格但没有成功:

我的 style.xml …

android material-design android-textinputlayout

4
推荐指数
1
解决办法
4935
查看次数

更改箭头颜色材质 ExposedDropdownMenu / TextInputLayout

我想将箭头颜色更改为白色。 怎么做? 这是我的代码

我想将箭头颜色更改为白色。怎么做?这是我的代码

<com.google.android.material.textfield.TextInputLayout
    style="@style/ExposedDropdownMenu"
    android:hint="Select"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <AutoCompleteTextView
        android:focusable="false"
        android:textSize="17sp"
        android:padding="15dp"
        android:textColorHint="@color/white"
        android:textColor="@color/white"
        android:id="@+id/actv_pool"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        tools:ignore="LabelFor" />

</com.google.android.material.textfield.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)

这是我的风格:

<style name="ExposedDropdownMenu" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu">
    <item name="boxStrokeColor">#fff</item>
    <item name="boxStrokeWidth">1dp</item>
    <item name="android:textColorHint">#fff</item>
</style>
Run Code Online (Sandbox Code Playgroud)

我希望很清楚。提前致谢。

android material-design android-textinputlayout material-components material-components-android

4
推荐指数
2
解决办法
1434
查看次数

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

下面是在 jetpack-compose 中 OutlinedTextField 代码的样子:

OutlinedTextField(
    value = "",
    onValueChange = {},
    label = {Text("Input")}
)
Run Code Online (Sandbox Code Playgroud)

此 TextField 轮廓的默认颜色为紫色。我想明显地改变轮廓颜色和标签。

android android-theme android-textinputlayout material-ui android-jetpack-compose

4
推荐指数
2
解决办法
1632
查看次数