如何在Android中为TextView/EditText添加星号红色标记,将其设为必填字段?

3

我的安卓应用有电子邮件、联系方式、地址和城市名称等字段。我希望这些字段成为用户必填项,因此需要在这些字段旁加上红色星号标记。如何实现此功能?

6个回答

6
要在文本中插入带红色的星号符号 -
请将以下代码添加到您的mainactivity.xml文件中 -
<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>

星号的颜色在Android Studio中不会显示,但在移动设备上会显示。我已经添加了两个例子。同样,您可以添加许多文本视图... 希望这有所帮助!

嘿,感谢Saurabh提供的解决方案。但是我已经应用了这个逻辑,而且它运行良好。我的问题是如何为字段添加星号红色标记。谢谢。 - Akshay Dhone

2
如果您想以编程方式添加星号,请按照@Cyrille Con Morales的说明操作,在xml中,如果您想在文本右侧添加星号,请执行以下操作:

如果要以编程方式添加星号,请按照@Cyrille Con Morales的说明操作。如果您想在文本右侧添加星号,请在xml中执行以下操作:
 <TextView
    .... 
      android:drawableRight = "@drawable/redAsterisk"
  />

如果是从右往左阅读(如希伯来语和其他从右到左的字母表),则应该这样写:
 <TextView
    .... 
      android:drawableLeft = "@drawable/redAsterisk"
  />

2
这段代码将把星号图标设置在左边。最初的回答保留不变。
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);

感谢@cyrille con morales提供的解决方案。 - Akshay Dhone
这非常有用。对于像我这样想要添加视图间距的任何人来说,此函数可以满足你的需求: editText.setCompoundDrawablePadding(10) - Amr Jyniat

1

您需要创建自定义的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();
        }
    }

}

现在在XML布局中使用,请查看下面的示例。
<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>

0
你可以简单地放置一个ImageView并将其与EditText右对齐。然后,您可以在ImageView中放置一个红色*图像,并将其缩放到fit-xy。最后,在您的Activity类中,在执行下一个任务之前检查EditText是否为空。希望这可以帮助到您。

0

创建一个简单的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);
    }
}

创建另一个名为 AestrickUtils 的类。
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));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接