如何在其中创建具有永久提示的编辑文本

时间:2012-10-30 07:55:26

标签: android

我有一个编辑文本,用户输入金额。我想要做的是在它之前设置一个文本视图值,用户不能像“INR”那样编辑,然后用户将输入它前面的金额。我希望edittext看起来像下面的那个。我怎么能这样做?

enter image description here

<EditText
        android:id="@+id/Eamnt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/button1"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="180dp"
        android:ems="10"
        android:inputType="numberDecimal"

4 个答案:

答案 0 :(得分:15)

尝试使用包含TextView和EditText的RelativeLayout。我在下面做了一些事情,尝试一下。

<RelativeLayout
  android:layout_width="match_parent"
  android:layout_height="50dp"
  android:background="@android:drawable/editbox_background" >

<TextView 
    android:id="@+id/constant_text"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true"
    android:gravity="center_vertical|center_horizontal"
    android:textStyle="bold"
    android:textColor="#C0C0C0"
    android:text="INR"
    android:background="@android:color/transparent" />

<EditText 
    android:id="@+id/amount"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_toRightOf="@+id/constant_text"
    android:textColor="#000000"
    android:textStyle="bold"
    android:background="@android:color/transparent"
    android:paddingLeft="5dp"
    android:text="100 000" />


</RelativeLayout>

答案 1 :(得分:0)

您可以使用包含TextView(用于提示)的RelativeLayout和用于文本输入的EditText。 此代码显示示例:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ll_parent"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="PasswordHint"
        android:textColor="#aaaaaaaa"
        android:textSize="30dip" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/textView1"
        android:layout_alignBottom="@+id/textView1"
        android:layout_alignParentLeft="true"
        android:background="#00000000"
        android:textSize="30dip" >

    </EditText>

</RelativeLayout>

答案 2 :(得分:0)

我的建议是使用背景图片来绘制您想要的文字。使用9补丁来限制用户可以输入的位置。这不是提示,但它可以解决您的问题。Like this one, hope it helps

答案 3 :(得分:0)

MyEditText.java

package com.example.myapplication24.UI;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;

import com.example.myapplication24.R;

public class MyEditText extends androidx.appcompat.widget.AppCompatEditText {
    private String mhint = "";
    private Paint mPaint;
    private Context mContext;
    private float paddingLeft = 0 ;

    public MyEditText(Context context) {
        super(context);
        this.mContext = context;
        init();
    }

    public MyEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.mContext = context;
        init();
        TypedArray a = mContext.obtainStyledAttributes(attrs,R.styleable.MyEditText);
        mhint = a.getString(R.styleable.MyEditText_mhint);
        setPadding((int)(mPaint.measureText(mhint)),getPaddingTop(),getPaddingRight(),getPaddingBottom());
        a.recycle();
    }

    public MyEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        this.mContext = context;
        init();
        TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.MyEditText,defStyleAttr,0);
        mhint = a.getString(R.styleable.MyEditText_mhint);
        setPadding((int)(mPaint.measureText(mhint)),getPaddingTop(),getPaddingRight(),getPaddingBottom());
        a.recycle();

    }
    private void init() {
        mPaint = new Paint();
        mPaint.setTextSize(getTextSize());
        mPaint.setColor(Color.GRAY);
        paddingLeft = getPaddingLeft();
    }

    private int dp2px(float dp) {
        return (int) (mContext.getResources().getDisplayMetrics().density * dp + 0.5f);
    }
    @Override
    protected void onDraw(Canvas canvas) {
        //Drawing mhint
        canvas.drawText(mhint,dp2px(5),getHeight()*0.65f,mPaint);


        super.onDraw(canvas);
    }



}

layout.xml

<com.example.myapplication24.UI.MyEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:mhint="Username: "
        android:text="asd"
        ></com.example.myapplication24.UI.MyEditText>

attrs.xml

    <!--my hint-->
    <attr name="mhint" format="string"/>

    <declare-styleable name="MyEditText">
        <attr name="mhint"/>

    </declare-styleable>

</resources>

希望对后来者有帮助...

demo