我正在尝试创建一个EditText,其中包含EditText内的标签 ,并且我一直在使用接受回答here的第二个建议。
我设法让它运转起来,但有一些问题。以下是目前的情况:
没关系,直到你尝试输入一些文字。最初,标签和输入的文本之间没有边距:
此外,使用退格键无法删除标签,但当您输入足够的文本以将其从左侧推出时,它确实会消失:
这是我的自定义EditText的代码 - 几乎与上面提到的线程相同:
public class KingdomSpasEditText extends EditText {
private int paddingLeft;
private String label = "";
public KingdomSpasEditText(Context context) {
super(context);
paddingLeft = getPaddingLeft();
}
public KingdomSpasEditText(Context context, AttributeSet attrs) {
super(context, attrs);
paddingLeft = getPaddingLeft();
label = attrs.getAttributeValue("http://www.kingdomspas.com/android/custom", "label");
if (label == null) {
label = "";
}
}
protected void onDraw(Canvas canvas) {
TextPaint textPaint = getPaint();
Rect size = new Rect();
textPaint.getTextBounds(label, 0, label.length(), size);
setPadding(paddingLeft + size.width(), getPaddingTop(), getPaddingRight(), getPaddingBottom());
super.onDraw(canvas);
canvas.drawText(label, paddingLeft + size.left, size.bottom + getPaddingTop() + 50, textPaint);
}
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
您可能会注意到在drawText()中我向顶部填充添加了50。如果我不是这样的话:
这对我来说似乎是个黑客。
以下是用于创建每个EditText的XML - 唯一的区别是标签。它们都在TableRow中,显然是TableLayout的一部分:
<com.kingdomspas.android.kingdomspasforms.formfields.KingdomSpasEditText
android:id="@+id/editText1" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:maxLines="1"
android:singleLine="true" android:background="@drawable/round"
android:paddingTop="2dp"
android:paddingLeft="8dp"
android:layout_weight="1"
kingdomspas:label="Test Text 1: ">
<requestFocus />
</com.kingdomspas.android.kingdomspasforms.formfields.KingdomSpasEditText>
好的,谢谢你坚持下去。以下是我的问题摘要:
1)如何在标签和输入的文本之间创建边距? 2)如何防止标签消失在右边? 3)在Edittext
中是否有更好的标签方式