12

您好我必须进行如下布局,编辑文本必须TextInputLayout具有错误和浮动提示功能,右侧的微调器必须有下划线。我的问题是如何做到这一点,因为当我添加时EditTextTextInputLayout一个填充波纹管,两个下划线不在同一行。是否有可能以某种方式测量这个错误容器的高度? 在此处输入图像描述

4

2 回答 2

4

所以有两种可能做到这一点:

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

这是一个常见问题,前几天我不得不自己处理这个问题。您可以随时查看此处指南中的测量值,而无需查看代码。

关于进行微调匹配,您可以从添加像这样的可绘制背景开始

<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,而不是使用simple_...添加与 EditText 不匹配的填充的布局之一,返回纯 TextView 作为从适配器返回的视图,但继续使用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 上的边距匹配,它们就会对齐。虽然在某些布局中我必须设置android:layout_marginTop="0dp"Spinner

于 2016-03-03T12:06:47.620 回答