测量TextInputLayout错误容器的高度

时间:2016-02-25 15:12:28

标签: android layout android-textinputlayout

您好我必须按如下所示进行布局,编辑文本必须在TextInputLayout中才能有错误和浮动提示功能,并且右侧的微调器必须有下划线。我的问题是如何做到这一点,因为当我将EditText添加到TextInputLayout时,有一个填充波纹管,并且两个下划线都不在同一行。是否有可能以某种方式测量这个错误的容器高度? enter image description here

2 个答案:

答案 0 :(得分:4)

因此有两种可能性:

  1. errorEnabled设为false,并使用错误文字创建自定义TextView
  2. 在第二个视图的底部添加额外的不可见TextView,其样式和字体大小可以在TextInputLayout构造函数中找到。我没有使用这种方法,但在我的情况下它是12sp。

答案 1 :(得分:4)

这是一个常见的问题,而且前几天我不得不处理这个问题。您始终可以查看guidelines here上的度量值,而不需要查看代码。

关于制作微调器匹配,你可以从添加像这个drawable

这样的背景开始
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:top="-1dp"
        android:left="-1dp"
        android:right="-1dp"
        android:bottom="1dp" >
        <shape android:shape="rectangle">
            <padding android:top="4dp" android:bottom="4dp" />
            <stroke android:width="1dp" android:color="@color/my_grey"/>
        </shape>
    </item>
</layer-list>

您可能希望将android:padding="0dp"添加到Spinner,而不是使用添加与EditText不匹配的填充的simple_...布局之一,返回纯文本视图,因为您从适配器,但继续使用下拉视图的simple_...布局,如下面的适配器示例

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        //convertView = mInflater.inflate(R.layout.support_simple_spinner_dropdown_item, parent, false);
        convertView = new TextView(parent.getContext());
    }
    //if you want to mimick the floating hint behaviour from the edit text,      
    //you can animate the label visibility here
    return populateView(position, convertView, parent);
}

private View populateView(int position, View convertView, ViewGroup parent) {
    // in here set your values as you usually would
    return convertView;
}

@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.support_simple_spinner_dropdown_item, parent, false);
    }
    return populateView(position, convertView, parent);
}

现在提供EditText和Spinner匹配的边距,它们将排成一行。虽然在某些布局中我必须在Spinner上设置android:layout_marginTop="0dp"