3

我正在使用一個應用程序顯示下拉SpinnerEditText作爲TextInputLayout旁邊的孩子。TextInputLayout錯誤對齊問題與AppCompat微調器

當下劃線的錯誤顯示在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> 

我試過搜索很多關鍵字,術語和方法,但不幸的是沒有運氣。

如果有人對此問題有任何破解,我將不勝感激。

回答

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

在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(""); 
    

*請注意,使用textInputLayout.setErrorEnable(false)刪除錯誤將從textInputLayout中取出錯誤的整個文本視圖,這將干擾您的對齊。

+0

第一眼看上去,事情似乎確定,但在隨後的錯誤說明你鍵入'EditText'裏面的東西,然後導航遠離它,在'TextInputLayout'進入底部,相同的錯誤空間! – blueware

+0

你如何禁用錯誤?你使用setErrorEnabled(false); ? – HBB20

+0

有問題。這將擾亂佈局對齊。而不是''setErrorEnable(false);'''你應該使用'''setError(「」);'''去除錯誤文本。 – HBB20

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> 
+0

當'TextInputLayout'出現錯誤時,佈局錯過。'TextInputLayout'上升,spinner保持關閉狀態,這個? – blueware

+0

我解決了我的問題,請檢查我的答案 – blueware