【问题标题】:How to create a edit text with a permanent hint inside it如何创建带有永久提示的编辑文本
【发布时间】:2012-10-30 07:55:26
【问题描述】:

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

<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"

【问题讨论】:

    标签: android


    【解决方案1】:

    尝试使用包含 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>
    

    【讨论】:

    • 这不是我想要的..检查图像..文本视图在编辑文本内部..不在外部...
    • 您可以将编辑文本和文本视图的背景设置为透明,并为父级(RelativeLayout)创建一个新背景。让它看起来像一个完整的 EditText
    【解决方案2】:

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

    <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>
    

    【讨论】:

      【解决方案3】:

      我的建议只是使用背景图片,它可以绘制您想要的文字。使用 9-patch 来限制用户可以输入的位置。这不是提示,但可以解决您的问题。

      【讨论】:

      • 其实我觉得,你真正需要的不是提示,应该是背景。
      【解决方案4】:

      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>
      

      属性.xml

          <!--my hint-->
          <attr name="mhint" format="string"/>
      
          <declare-styleable name="MyEditText">
              <attr name="mhint"/>
      
          </declare-styleable>
      
      </resources>
      

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

      demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-03
        • 1970-01-01
        • 2013-10-14
        相关资源
        最近更新 更多