TextView、EditText属性简介
2018-01-29 本文已影响59人
3Q竹林
- 字体粗体设置:
布局方式:
android:textStyle="bold"
android:typeface="sans"
代码方式:
Typeface font = Typeface.create(Typeface.SANS_SERIF, Typeface.BOLD);
p.setTypeface( font );
- TextView的其他不常用属性:
android:shadowColor指定文本阴影的颜色,需要与shadowRadius一起使用。
android:shadowDx设置阴影横向坐标开始位置。
android:shadowDy设置阴影纵向坐标开始位置。
android:shadowRadius设置阴影的半径。设置为0.1就变成字体的颜色了,一般设置为3.0的效果比较好。
android:cursorVisible设定光标为显示/隐藏,默认显示。
android:digits设置允许输入哪些字符。如 “1234567890.+-*/% ()”
android:textScaleX设置文字之间间隔,默认为1.0f。
Selection.setSelection(editText.getText(), editText.getText().length()); // 光标位置设置
android:textStyle设置字形[bold(粗体) 0, italic(斜体) 1, bolditalic(又粗又斜) 2] 可以设置一个或多个,用“|”隔开
android:typeface设置文本字体,必须是以下常量值之一:normal 0, sans 1, serif 2, monospace(等宽字体) 3]
- 给textView加下划线方法:
textView.getPaint().setFlags(Paint. UNDERLINE_TEXT_FLAG ); //下划线
textView.getPaint().setAntiAlias(true);//抗锯齿
textview.getPaint().setFlags(Paint. STRIKE_THRU_TEXT_FLAG); //中划线
setFlags(Paint. STRIKE_THRU_TEXT_FLAG|Paint.ANTI_ALIAS_FLAG); // 设置中划线并加清晰
textView.getPaint().setFlags(0); // 取消设置的的划线
- 字体其他设置方法:
SpannableStringBuilder style=new SpannableStringBuilder(str);
//五个参数分别是,字体名称,字体大小,字体颜色,字体链接颜色
style.setSpan(new ForegroundColorSpan(Color.parseColor(colorStr)),start,end,Spannable.SPAN_INCLUSIVE_INCLUSIVE);
style.setSpan(new AbsoluteSizeSpan(DisplayUtil.sp2px(getContext(),sp)),start,end,Spannable.SPAN_INCLUSIVE_INCLUSIVE);
- 设置输入监听
edit_text.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
LogUtil.showLog("Css", s); //这里的s指:在用户输入之前,EditText中“所有的”文本信息
}
@Override public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override public void afterTextChanged(Editable s) {
LogUtil.showLog("Css2", s); //这里的s指,在用户输入之后,EditText中“所有的”文本信息
}
});
//注意:上边这种方式无法实现对EditText内容的修改,只能监听提示。
/*
* Fileter方式: 禁止输空格+换行键
*/
editText.setFilters(new InputFilter[]{filter});
private InputFilter filter=new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
////这里的source指,在用户输入时,EditText中单次变化的字符
if(source.equals(" ") || source.toString().contentEquals("\n"))return "";
else return null; // 或者写成else return source;效果相同
}
};
/**
* 禁止EditText输入特殊字符
*/
public static void setEditTextInhibitInputSpeChat(EditText editText){
InputFilter filter=new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
String speChat="[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“'。,、?]";
Pattern pattern = Pattern.compile(speChat);
Matcher matcher = pattern.matcher(source.toString());
if(matcher.find())return "";
else return null;
}
};
editText.setFilters(new InputFilter[]{filter});
}
//注意:Filter方式能对输入的内容做限定和修改;
//通过digits 属性限定输入内容:
方法一:直接在布局中添加属性
android:digits = "abcdef"
方法二:代码设置方式
EditText mEditText = (EditText)findViewById(R.id.MyEditText);
String digits = "abcdef"; //限定只能输入a-f中的字符,可重复
mEditText.setKeyListener(DigitsKeyListener.getInstance(digits));
//注意:digits限定了只能输入那些字符
- 使用TextInputLayout:
它能让用户输入后,hint不会消失,会让hint变成一个在EditText上方的浮动标签。同时还包括一个漂亮的material动画,例子如下:
//布局中
<android.support.design.widget.TextInputLayout
android:id="@+id/usernameWrapper"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textEmailAddress"
android:hint="Username"/>
</android.support.design.widget.TextInputLayout>
//在代码中设置
final TextInputLayout usernameWrapper = (TextInputLayout)findViewById(R.id.usernameWrapper);
final TextInputLayout passwordWrapper = (TextInputLayout)findViewById(R.id.passwordWrapper);
//内容为空时设置hint提示
usernameWrapper.setHint("Username");
passwordWrapper.setHint("Password");
public void onClick(View v) {
hideKeyboard();
if (!validateEmail(username)) {
//被触发时,在上方显示的输入错误提示
usernameWrapper.setError("Not a valid email address!");
} else if (!validatePassword(password)) {
passwordWrapper.setError("Not a valid password!");
} else {
usernameWrapper.setErrorEnabled(false);
passwordWrapper.setErrorEnabled(false);
doLogin();
}
}
.