测量 TextInputLayout 错误容器的高度
Measure height of TextInputLayout error container
您好,我必须按如下所示进行布局,编辑文本必须在 TextInputLayout
中才能具有错误和浮动提示功能,并且右侧的微调器必须具有下划线。我的问题是如何做到这一点,因为当我将 EditText
添加到 TextInputLayout
时,下面有一个填充波纹管,并且两个下划线不在同一行中。是否有可能以某种方式测量这个错误容器的高度?
所以有两种可能性:
- 将
errorEnabled
设置为 false 并使用错误文本创建自定义 TextView
。
- 在第二个视图的底部添加额外的不可见
TextView
,其样式和字体大小可以在 TextInputLayout
构造函数中找到。我没有使用这种方法,但在我的情况下它是 12sp。
这是一个常见问题,也是我前几天不得不自己处理的问题。您可以随时查看 guidelines here 上的测量值,而无需查看代码。
关于制作微调器匹配,您可以从添加像这样的可绘制背景开始
<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 不匹配的填充,return 一个普通的 TextView作为您从适配器 return 编辑的视图,但继续为下拉视图使用 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"
您好,我必须按如下所示进行布局,编辑文本必须在 TextInputLayout
中才能具有错误和浮动提示功能,并且右侧的微调器必须具有下划线。我的问题是如何做到这一点,因为当我将 EditText
添加到 TextInputLayout
时,下面有一个填充波纹管,并且两个下划线不在同一行中。是否有可能以某种方式测量这个错误容器的高度?
所以有两种可能性:
- 将
errorEnabled
设置为 false 并使用错误文本创建自定义TextView
。 - 在第二个视图的底部添加额外的不可见
TextView
,其样式和字体大小可以在TextInputLayout
构造函数中找到。我没有使用这种方法,但在我的情况下它是 12sp。
这是一个常见问题,也是我前几天不得不自己处理的问题。您可以随时查看 guidelines here 上的测量值,而无需查看代码。
关于制作微调器匹配,您可以从添加像这样的可绘制背景开始
<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 不匹配的填充,return 一个普通的 TextView作为您从适配器 return 编辑的视图,但继续为下拉视图使用 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"