我的安卓应用有电子邮件、联系方式、地址和城市名称等字段。我希望这些字段成为用户必填项,因此需要在这些字段旁加上红色星号标记。如何实现此功能?
我的安卓应用有电子邮件、联系方式、地址和城市名称等字段。我希望这些字段成为用户必填项,因此需要在这些字段旁加上红色星号标记。如何实现此功能?
<TextView
android:layout_width="171dp"
android:layout_height="132dp"
android:text="@string/name1" />
<TextView
android:layout_width="171dp"
android:layout_height="132dp"
android:text="@string/name2" />
请在资源标签下的strings.xml文件中添加以下内容:
<string name="name1">Mandatory field 1<font color='#FF0000'>*</font></string>
<string name="name2">Mandatory field 2<font color='#FF0000'>*</font></string>
<TextView
....
android:drawableRight = "@drawable/redAsterisk"
/>
<TextView
....
android:drawableLeft = "@drawable/redAsterisk"
/>
EditText editText= (EditText ) findViewById(R.id.myTxtView);
//just find an icon asterisk and put it to drawable folder
editText.setCompoundDrawablesWithIntrinsicBounds(R.drawable.icon, 0, 0, 0);
editText.setCompoundDrawablePadding(10)
。 - Amr Jyniat您需要创建自定义的TextView。请查看下面我使用的代码。
创建自定义的TextView Java类。
public class AsteriskTextView extends AppCompatTextView {
String colored = "*";
SpannableStringBuilder builder = new SpannableStringBuilder();
public AsteriskTextView(Context context) {
super(context);
updateText();
}
public AsteriskTextView(Context context, AttributeSet attrs) {
super(context, attrs);
updateText();
}
public AsteriskTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
updateText();
}
public void updateText() {
try {
builder.append(getText()); //get string
builder.append(" "); // add space between text and start
int start = builder.length();
builder.append(colored);
int end = builder.length();
builder.setSpan(new ForegroundColorSpan(Color.RED), start, end,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
setText(builder);
} catch (Exception e) {
e.printStackTrace();
}
}
}
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.expertbrains.widgets.AsteriskTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:text="@string/company" />
</androidx.constraintlayout.widget.ConstraintLayout>
ImageView
并将其与EditText右对齐。然后,您可以在ImageView
中放置一个红色*图像,并将其缩放到fit-xy
。最后,在您的Activity类中,在执行下一个任务之前检查EditText是否为空。希望这可以帮助到您。创建一个简单的Java类 AestrickSpanAdjuster
import android.text.TextPaint;
import android.text.style.MetricAffectingSpan;
public class AestrickSpanAdjuster extends MetricAffectingSpan {
double ratio = 0.5;
public AestrickSpanAdjuster(double ratio) {
this.ratio = ratio;
}
@Override
public void updateDrawState(TextPaint paint) {
paint.baselineShift += (int) (paint.ascent() * ratio);
}
@Override
public void updateMeasureState(TextPaint paint) {
paint.baselineShift += (int) (paint.ascent() * ratio);
}
}
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
public class AestrickUtils {
public static void setAsterick(EditText edittext, String hint, String aestringWithSpace)
{
SpannableString mString = new SpannableString(hint+aestringWithSpace);
if(mString.length() > 0) {
mString.setSpan(new AestrickSpanAdjuster(0.2), mString.length() - 1,
mString.length(), SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);
}
/*edittext.append("\n");
edittext.append(mString);*/
edittext.setHint(mString);
}
/**
* This function will apply the a colorful mandatory field aestrick with different type of views mentioned and set as hint or text accordingly
* @param view View to be modified
* @param hint Text with black
* @param aestrickWithSpace text with Custom color
* @param isText weather to set text or hint with these values
* @param colorCode color needed for aestrickWithSpace
*/
public static void setTextViewAsterick(View view, String hint, String aestrickWithSpace, boolean isText, int colorCode)
{
SpannableString mString = new SpannableString(hint+aestrickWithSpace);
if(mString.length() > 0) {
mString.setSpan(new AestrickSpanAdjuster(0.2), mString.length() - 1,
mString.length(), SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);
mString.setSpan(new ForegroundColorSpan(colorCode), mString.length() - 1, mString.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
}
/*txtView.append("\n");
txtView.append(mString);*/
// txtView.setHint(mString);
if (view instanceof TextView)
{
if (isText)
((TextView)view).setText(mString);
else
((TextView)view).setHint(mString);
}
else if (view instanceof EditText)
{
if (isText)
((EditText)view).setText(mString);
else
((EditText)view).setHint(mString);
}
else if (view instanceof CheckBox)
{
if (isText)
((CheckBox)view).setText(mString);
else
((CheckBox)view).setHint(mString);
}
}
}
现在您可以在Activity或Fragment类中执行以下操作:
AestrickUtils.setTextViewAsterick(findViewById(R.id.txtLable), getString(R.string.txt_hint), " *",
true, getResources().getColor(R.color.asterisk_red_color));