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);
我想要一个在 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);