2016-10-11 3 views
4

Ich versuche, Spinner und Bearbeiten von Text durch Basislinie auszurichten, aber es funktioniert nicht:Basisausgerichtet TextInputLayout und Spinner

enter image description here

Es nach dem Update Support-Bibliothek Abhängigkeit von 24.1.1 bis 24.2 passieren starten. 1 (support-v4, appcompat-v7, design). Das ist mein xml-Code:

 <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 Stil:

<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

Bitte schwimmt, Ihr 'spinner_textfield_background' ziehbar und' spinner_tint' Farbressourcen hinzufügen. – Sevastyan

+0

@Sevastyan ich habe keinen Zugriff mehr auf diesen Code –

+0

Das ist schlecht. Obwohl die Grundlinien ausgerichtet sind, ist die Unterstreichung des "Spinner" nicht auf die Unterstreichung des 'EditText' ausgerichtet. – Sevastyan

Antwort

4

Wesentlichen die TextInputLayout ist kein Ausgangswert bereitstellt, um es Eltern. Wir müssen die korrekte Basislinie des EditText durch Verlängerung TextInputLayout pipen. Das funktioniert für mich, aber ich bin mir nicht sicher, ob sich die Baseline aufgrund anderer Ereignisse von TextInputLayout ändern würde.

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

danke danke danke danke danke danke – Eric

1

Ich denke, diese Version besser ist, wenn Hinweis Label

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()); 
} 
}