在android中的编辑框中标记

aka*_*tra 12 android android-edittext

我的问题是,如何在android 中的editBox中添加标签?

例如,我想在联系人选择器的编辑框中放置"To:",即使我按下屏幕键盘上的退格键也不会被删除.

我尝试使用android:hint,但是当editBox被焦点或点击时它会被删除.

我尝试使用图像,但看起来并不好看.所以,我需要一种方法来实现这个标签.

请参见可视化图表 所需设计

XGo*_*het 14

我给你两个想法:

如果您只需要在几个地方使用它,则可以使用FrameLayout/merge在EditText上创建TextView.然后在编辑文本上使用填充,可以使TextView看起来像是在EditText的"内部".:

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="40dp" >

        <requestFocus />
    </EditText>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:paddingLeft="10dp"
        android:text="To : " />
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)

另外,您可以通过编写自己的类来补充自己的EditText版本.这是一个基本的例子,你需要稍微调整一下:

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.widget.EditText;

public class LabelledEditText extends EditText {

    public LabelledEditText(Context context) {
        super(context);
        mPaddingLeft = getPaddingLeft();
    }

    public LabelledEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        mPaddingLeft = getPaddingLeft();
    }

    protected void onDraw(Canvas canvas) {
        TextPaint textPaint = getPaint();
        Rect size = new Rect();
        textPaint.getTextBounds(mLabel, 0, mLabel.length(), size);
        setPadding(mPaddingLeft + size.width(), getPaddingTop(), getPaddingRight(), getPaddingBottom());
        super.onDraw(canvas);

        canvas.drawText(mLabel, mPaddingLeft + size.left, size.bottom + getPaddingTop(), textPaint);
    }


    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

    private String mLabel = "To :  ";
    private int mPaddingLeft;

}
Run Code Online (Sandbox Code Playgroud)


Luk*_*rog 9

你总是可以在下面看起来像一个TextView+ :EditTextLinearLayoutEditText

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@android:drawable/edit_text" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:text="To:" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="3dp"
        android:background="@null" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)