Android 将基线与包装在TextInputLayout中的TextView对齐
我想将TextView“缺陷”的基线与EditText“10000”的基线对齐。它们都在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.
我尝试了以下方法,但无法使其起作用
<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>`