2016-10-11 2 views
4

を整列:ベースライン私は、ベースラインでスピナーとエディットテキストを整列するためにしようと、それは動作しませんTextInputLayoutとスピナー

enter image description here

それは24.1.1から24.2への更新プログラムのサポートライブラリの依存関係の後に起こり始めます。 1(サポート-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は、ベースライン値を提供されていません。 を拡張して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()); 
} 
} 
関連する問題