【发布时间】:2019-12-28 08:51:07
【问题描述】:
我的 android 应用程序中有电子邮件、联系人、地址和城市名称等字段。我想让这些字段强制由用户填写,并且相同。我需要一个星号红色标记领域..我该怎么做?
【问题讨论】:
标签: java android xml android-studio android-layout
我的 android 应用程序中有电子邮件、联系人、地址和城市名称等字段。我想让这些字段强制由用户填写,并且相同。我需要一个星号红色标记领域..我该怎么做?
【问题讨论】:
标签: java android xml android-studio android-layout
此代码会将图标星号设置在左侧
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)
插入带有读取颜色的星号 -
将此添加到您的 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 个示例。同样,您可以添加许多文本视图.. 希望对您有所帮助!
【讨论】:
您可以简单地放置一个ImageView 并将其与EditText 对齐。然后,您可以在ImageView 中放置一个红色 * 图像并将其缩放为fit-xy。最后在您的 Activity 类中,在执行下一个任务之前检查 EditText 是否为空。希望这会有所帮助。
【讨论】:
如果您想以编程方式添加星号,请按照@Cyrille Con Morales 的说明进行操作,如果您想在文本右侧添加星号,请执行以下操作:
<TextView
....
android:drawableRight = "@drawable/redAsterisk"
/>
如果在左边(希伯来语和其他从右到左的字母表),那么这个:
<TextView
....
android:drawableLeft = "@drawable/redAsterisk"
/>
【讨论】:
您必须创建自定义 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>
【讨论】:
制作一个简单的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));
【讨论】: