2016-10-11 68 views
4

我試圖通過基線對齊微調和編輯文本,但它不工作:基線對齊TextInputLayout和微調

enter image description here

它開始更新支持庫的依賴關係之後發生從24.1.1至24.2。 1(support-v4,appcompat-v7,設計)。 這是我的XML代碼:

 <RelativeLayout 
      android:id="@+id/email_layout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal"> 

      <android.support.v7.widget.AppCompatSpinner 
       android:id="@+id/spinner" 
       style="@style/MailSpinner" 
       android:layout_width="120dp" 
       android:layout_height="wrap_content" 
       android:layout_alignParentEnd="true" 
       android:dropDownWidth="wrap_content" /> 
      <android.support.design.widget.TextInputLayout 
       android:id="@+id/text_input_layout" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginEnd="8dp" 
       android:layout_alignBaseline="@id/spinner" 
       android:layout_toStartOf="@id/spinner" 
       android:baselineAlignedChildIndex="0"> 
       <android.support.v7.widget.AppCompatEditText 
        android:id="@+id/edit_text" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:hint="E-mail" 
        android:ellipsize="end" 
        android:imeOptions="actionNext" 
        android:inputType="textEmailAddress" 
        android:textSize="16sp"/> 
      </android.support.design.widget.TextInputLayout> 


     </RelativeLayout> 

MailSpinner風格:

<style name="MailSpinner" parent="Widget.AppCompat.Spinner.Underlined"> 
    <item name="android:background">@drawable/spinner_textfield_background</item> 
    <item name="backgroundTint">@color/spinner_tint</item> 
    <item name="backgroundTintMode">src_atop</item> 
</style> 
+0

請添加'spinner_textfield_background'繪製和'spinner_tint'顏色資源。 – Sevastyan

+0

@Sevastyan我再也無法訪問此代碼 –

+0

這很糟糕。儘管基線是對齊的,但「Spinner」的下劃線不與「EditText」的下劃線對齊。 – Sevastyan

回答

4

本質上TextInputLayout不提供基線值到它的父。我們需要通過擴展TextInputLayout來管理EditText的正確基線。這適用於我,但是,我不確定基線是否會由於其他來自TextInputLayout的事件而發生變化。

public class CTextInputLayout extends TextInputLayout { 
    public CTextInputLayout(Context context) { 
     super(context); 
    } 

    public CTextInputLayout(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public CTextInputLayout(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    @Override 
    public int getBaseline() 
    { 
     EditText editText = getEditText(); 
     return editText.getPaddingTop() + editText.getBaseline(); 
    } 
} 
+0

謝謝謝謝謝謝謝謝謝謝謝謝 – Eric

1

我覺得這個版本是更好時,提示標籤浮動

public class CTextInputLayout extends TextInputLayout { 
public CTextInputLayout(Context context) { 
    super(context); 
} 

public CTextInputLayout(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

public CTextInputLayout(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
} 

@Override 
public int getBaseline() { 
    EditText editText = getEditText(); 
    return getMeasuredHeight() - (editText.getMeasuredHeight() - editText.getBaseline()); 
} 
}