Source line TextInputLayout and Spinner

I am trying to align the spinner and edit the text at a basic level, but it does not work:

enter image description here

It starts after the dependencies of the support library for updates from 24.1.1 to 24.2.1 (support-v4, appcompat-v7, design). This is my 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 Style:

<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>
+4
source share
2 answers

Essentially, TextInputLayout does not provide a base value for the parent. We need to direct the correct baseline EditText, expanding TextInputLayout. This works for me, however, I'm not sure if the base level will change due to other events from 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();
    }
}
+4
source

, ,

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

Source: https://habr.com/ru/post/1657373/


All Articles