Android 将基线与包装在TextInputLayout中的TextView对齐

Android 将基线与包装在TextInputLayout中的TextView对齐,android,android-layout,android-textinputlayout,android-percent-library,Android,Android Layout,Android Textinputlayout,Android Percent Library,我想将TextView“缺陷”的基线与EditText“10000”的基线对齐。它们都在 我尝试了以下方法,但无法使其起作用 <android.support.percent.PercentRelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.design.

我想将TextView“缺陷”的基线与EditText“10000”的基线对齐。它们都在

我尝试了以下方法,但无法使其起作用

<android.support.percent.PercentRelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.design.widget.TextInputLayout
        android:id="@+id/textInputLayout_soil_nitrogen"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        app:layout_widthPercent="63%">

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Enter N of soil"
            tools:text="10000" />

    </android.support.design.widget.TextInputLayout>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toEndOf="@id/textInputLayout_soil_nitrogen"
        android:layout_toRightOf="@id/textInputLayout_soil_nitrogen"
        app:layout_widthPercent="37%"
        tools:text="Deficient" />

</android.support.percent.PercentRelativeLayout>

给TextView一个20dp的顶部填充可以达到这个效果,但是最好是对齐它们的基线。在这种情况下可能吗


顺便说一句,我已经删除了textAppearance和id属性。

请替换下面的代码行

 <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toEndOf="@id/textInputLayout_soil_nitrogen"
        android:layout_toRightOf="@id/textInputLayout_soil_nitrogen"
        app:layout_widthPercent="37%"
        tools:text="Deficient" />


希望它能帮助你

请尝试以下代码



老问题,但这里是我的解决方案

本质上,没有向其父级提供基线值。我们需要通过扩展
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();
    }
}

我假设
PercentRelativeLayout
支持基线校准。否则,您可以将
ctdeputLayout
TextView
包装在
RelativeLayout
中,以实现基线对齐。

TextInputLayout
中,将
RelativeLayout
EditText
TextView
作为子项放置在一起:

         <android.support.design.widget.TextInputLayout
                android:id="@+id/textInputLayout_soil_nitrogen"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:layout_alignParentTop="true"
                android:layout_widthPercent="63%">

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">

                    <EditText
                        android:id="@+id/edittext_soil_nitrogen"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:hint="Enter N of soil"
                        android:text="10000" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignBaseline="@id/edittext_soil_nitrogen"
                        android:layout_alignParentRight="true"
                        android:layout_widthPercent="37%"
                        android:text="Deficient" />

                </RelativeLayout>

            </android.support.design.widget.TextInputLayout>` 

` 

No,这样一来,textView的基线与editText的行(上图中的紫色行)处于同一级别,这不是我想要的。我想把它们的基线对齐。我认为这是不可能的,因为TextView位于TextInputLayout中。我想我只能在上面加一个20dp的填充物了。我希望这里有人知道如何做到这一点。谢谢你的回答。您好。:)“确定”表示您希望使用“基于文本”设置edittext和textview的相同底部基线。为此,我认为您需要定义相同的字体大小,并提供textview的底部填充。这很有效。是的,填充是唯一能让这成为可能的方法。这对我很有帮助。谢谢如果您不介意在RelativeLayout周围显示提示和错误,这是可以的
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();
    }
}
         <android.support.design.widget.TextInputLayout
                android:id="@+id/textInputLayout_soil_nitrogen"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:layout_alignParentTop="true"
                android:layout_widthPercent="63%">

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">

                    <EditText
                        android:id="@+id/edittext_soil_nitrogen"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:hint="Enter N of soil"
                        android:text="10000" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignBaseline="@id/edittext_soil_nitrogen"
                        android:layout_alignParentRight="true"
                        android:layout_widthPercent="37%"
                        android:text="Deficient" />

                </RelativeLayout>

            </android.support.design.widget.TextInputLayout>`