Android - 如何修复 EditText 左侧的卢比符号字体图标

Android - How to fix Rupee symbol font icon to the left of EditText

我想要一个在 EditText 左侧带有卢比符号修复的 EditText。

注意:它是一个浮动标签的EditText。我用过android.support.design.widget.TextInputLayout。当我删除 EditText 中的文本时,除了卢比符号外,所有文本都应该被清除。

我想使用卢比字体字符串 <string name="rs"> \u20B9 </string> 而不是卢比 png 文件。

如果建议只使用卢比png文件,那么我们可以使用drawableStart。但是如何控制那个图标的大小呢?

我需要建议。

您可以使用以下代码:

      ediText.setText(getText(R.string.rs) );
      Selection.setSelection(ediText.getText(), ediText.getText().length());

是的,您可以使用图标执行此操作。但如果你不想为此使用图标,那就是技巧

试试这个布局

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:paddingLeft="5dp"
        android:text="\u20B9"
        android:textColor="#222"
        android:textSize="18sp" />

    <android.support.v7.widget.AppCompatEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="18dp"
        android:text="500" />
</RelativeLayout>

结果

编辑:

如果您仍想为此使用图标。你可以从 Actionbar Icon Generator 生成图标,将所有图标复制到所需的文件夹,然后你就知道了 :D

编辑 2:

TextInputLayout

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="22dp"
        android:paddingLeft="5dp"
        android:text="\u20B9"
        android:textColor="#222"
        android:textSize="18sp" />

    <android.support.design.widget.TextInputLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <android.support.v7.widget.AppCompatEditText
            android:id="@+id/f_name"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:hint="Amount"
            android:inputType="text"
            android:paddingLeft="18dp"
            android:singleLine="true" />

    </android.support.design.widget.TextInputLayout>
</RelativeLayout>

结果:

快乐编码..

//Get Rupee symbol from String resource file
String mTextInitial =getText(R.string.rupeesymbol);

直接用这个符号作为Activity/Fragments中EditText的初始值

mRuppeTxt.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                                          int after) {
            }
            @Override
            public void afterTextChanged(Editable s) {
                if(!s.toString().startsWith(mTextInitial)){
                    mRuppeTxt.setText(mTextInitial);
                    Selection.setSelection(mRuppeTxt.getText(), mRuppeTxt.getText().length());
                }
            }
        });

现在用户将无法 edit/delete 将 mTextInitial 值分配给 EditText

您可以在运行时生成可绘制对象。下面是生成drawable

的代码
public Drawable getSymbol(Context context, String symbol, float textSize, int color) {
    Paint paint = new Paint(ANTI_ALIAS_FLAG);
    paint.setTextSize(textSize);
    paint.setColor(color);
    paint.setTextAlign(Paint.Align.LEFT);
    float baseline = -paint.ascent(); // ascent() is negative
    int width = (int) (paint.measureText(symbol) + 0.5f); // round
    int height = (int) (baseline + paint.descent() + 0.5f);
    Bitmap image = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(image);
    canvas.drawText(symbol, 0, baseline, paint);
    return new BitmapDrawable(context.getResources(), image);
}

现在像这样传递值。

Drawable drawable = getSymbol(context, "\u20B9"/*Your Symbol*/, editText.getTextSize(), editText.getCurrentTextColor()); // This will return a drawable

要将此可绘制对象设置为您的 EditText,请使用此代码

editText.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null);