AppCompat Spinner的TextInputLayout错误对齐问题

时间:2016-09-29 07:46:39

标签: android android-spinner android-appcompat android-textinputlayout

我正在使用一个应用,该应用会在Spinner旁边显示一个下拉EditText作为TextInputLayout的孩子。

TextInputLayout下显示带下划线的错误时,EditText会上升,对齐将会错过!!

请查看我的截图:

enter image description here

我想做的是:

enter image description here

这是我的xml代码:

<LinearLayout
    android:layout_width="@dimen/edittext_width"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:gravity="bottom">

    <android.support.v7.widget.AppCompatSpinner
        android:id="@+id/spinner_countries"
        style="@style/Widget.AppCompat.Spinner.Underlined"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="30"
        android:layout_gravity="start"
        android:spinnerMode="dialog" />

    <android.support.design.widget.TextInputLayout
        android:id="@+id/input_layout_mobile"
        style="@style/TextInputLayoutTheme"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="70">

        <com.cashu.app.ui.widgets.CustomEditText
            android:id="@+id/et_fragment_register_step_one_mobile"
            android:layout_width="@dimen/edittext_mobile_num_width"
            android:layout_height="wrap_content"
            android:ems="12"
            android:gravity="center_vertical"
            android:layout_gravity="start"
            android:hint="@string/mobile_hint"
            android:inputType="number"
            android:textSize="@dimen/font_size_normal" />
    </android.support.design.widget.TextInputLayout>

</LinearLayout>

这是我的TextInputLayout主题:

<!-- TextInputLayout Style -->
<style name="TextInputLayoutTheme" parent="Widget.Design.TextInputLayout">
    <item name="android:gravity">center</item>
    <item name="android:textColor">@color/white</item>
    <item name="android:textColorHint">@color/colorControlActivated</item>
    <item name="errorTextAppearance">@style/AppTheme.TextErrorAppearance</item>
    <item name="counterTextAppearance">@style/TextAppearance.Design.Counter</item>
    <item name="counterOverflowTextAppearance">@style/TextAppearance.Design.Counter.Overflow</item>
</style>

我尝试搜索许多关键字,条款和方法,但遗憾的是没有运气。

如果有人讨论这个问题,我将不胜感激。

3 个答案:

答案 0 :(得分:2)

在TextInputLayout中添加app:errorEnabled="true"

即使没有显示错误,也会留下错误空间。这会消耗更多空间,但会帮助您保持对齐。

将TextInputLayout设置如下。

 <android.support.design.widget.TextInputLayout
    android:id="@+id/input_layout_mobile"
    style="@style/TextInputLayoutTheme"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="70"
    app:errorEnabled="true">

后来在java中:

  1. 要设置错误文本,请使用

    textInputLayout.setError("Email can not be blank");
    
  2. 删除错误文本并将视图设置为正常

    textInputLayout.setError("");
    
  3. *请注意,使用textInputLayout.setErrorEnable(false)删除错误会从textInputLayout中取出错误的整个文本视图,这会干扰您的对齐。

答案 1 :(得分:1)

我弄清楚了我的问题,我将余量设置为我的AppCompatSpinner并将特定高度设置为最高重力。

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="bottom"
        android:orientation="horizontal">

        <android.support.v7.widget.AppCompatSpinner
            android:id="@+id/spinner_countries"
            style="@style/Widget.AppCompat.Spinner.Underlined"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginBottom="26dp"
            android:layout_weight="30"
            android:spinnerMode="dialog" />

        <android.support.design.widget.TextInputLayout
            android:id="@+id/input_layout_mobile"
            style="@style/TextInputLayoutTheme"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="70"
            app:errorEnabled="true">

            <com.cashu.app.ui.widgets.CustomEditText
                android:id="@+id/et_mobile"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="start"
                android:ems="12"
                android:gravity="center_vertical"
                android:hint="@string/mobile_hint"
                android:inputType="number"
                android:textSize="@dimen/font_size_normal" />
        </android.support.design.widget.TextInputLayout>

</LinearLayout>

<强> [编辑]

当我的TextInputLayout出错时,我会通过添加以下行删除它:

myTextInputLayout.setErrorEnabled(false);
myTextInputLayout.setErrorEnabled(true);
myTextInputLayout.setError(" ");

为什么?

  • 此行:myTextInputLayout.setErrorEnabled(false);将清除TextInputLayout

  • 中的错误
  • 此行:myTextInputLayout.setErrorEnabled(true);将再次为TextInputLayout启用错误

  • 此行:myTextInputLayout.setError(" ");将阻止布局对齐中断。

问题现在已经解决了。

答案 2 :(得分:0)

试试这个,

 <LinearLayout
    android:layout_width="300dp"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:gravity="bottom">

    <android.support.v7.widget.AppCompatSpinner
        android:id="@+id/spinner_countries"
        style="@style/Widget.AppCompat.Spinner.Underlined"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="30"
        android:spinnerMode="dialog" />

    <android.support.design.widget.TextInputLayout
        android:id="@+id/input_layout_mobile"
        style="@style/TextInputLayoutTheme"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="70">

        <EditText
            android:id="@+id/et_fragment_register_step_one_mobile"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:ems="12"
            android:gravity="center_vertical"
            android:layout_gravity="start"
            android:hint="Mobile No."
            android:inputType="number"
            android:textSize="20sp" />
    </android.support.design.widget.TextInputLayout>