【问题标题】:How to add a asterisk red mark for textview/edittext in android for making it as a mandatory field?如何在 android 中为 textview/edittext 添加星号红色标记以使其成为必填字段?
【发布时间】:2019-12-28 08:51:07
【问题描述】:

我的 android 应用程序中有电子邮件、联系人、地址和城市名称等字段。我想让这些字段强制由用户填写,并且相同。我需要一个星号红色标记领域..我该怎么做?

【问题讨论】:

    标签: java android xml android-studio android-layout


    【解决方案1】:

    此代码会将图标星号设置在左侧

    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 conmorales 的解决方案
    • 这很有帮助。对于像我这样想从视图中添加一些填充的任何人,此功能可以满足您的需求editText.setCompoundDrawablePadding(10)
    【解决方案2】:

    插入带有读取颜色的星号 -

    将此添加到您的 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中显示,但会在移动设备中显示。我添加了 2 个示例。同样,您可以添加许多文本视图.. 希望对您有所帮助!

    【讨论】:

    • 嘿,感谢 saurabh 的解决方案。但我已经应用了这个逻辑,它工作正常。我的问题是如何为字段添加星号红色标记。谢谢
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

       <TextView
          .... 
            android:drawableRight = "@drawable/redAsterisk"
        />
      

      如果在左边(希伯来语和其他从右到左的字母表),那么这个:

       <TextView
          .... 
            android:drawableLeft = "@drawable/redAsterisk"
        />
      

      【讨论】:

        【解决方案5】:

        您必须创建自定义 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>
        

        【讨论】:

          【解决方案6】:

          制作一个简单的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));
          

          【讨论】:

            猜你喜欢
            • 2019-05-16
            • 2011-12-18
            • 2011-06-03
            • 2014-06-02
            • 2017-03-20
            • 1970-01-01
            • 1970-01-01
            • 2012-06-27
            相关资源
            最近更新 更多