注:本文是对网上一些方法的整理,以便查阅之用
易理解属性
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="好好学习天天向上"
android:digits="abc123" //限定输入文本
android:letterSpacing="2" //设置字符间距,默认0
android:lineSpacingMultiplier="2" //设置行间距比例,默认1
android:lineSpacingExtra="15dp" //设置额外行间距,默认0dp
android:textScaleX="2"//文字横向缩放比,默认1
android:scaleX="2" //控件View沿X轴拉伸
android:scaleY="8"
android:background="@null" //去除EditText底部背景线
/>
粗体设置
android:textStyle=”bold” //xml中设置方式
textView.getPaint().setFakeBoldText(true); //代码设置方式
字体设置
android:typeface="monospace" //设置字型,现有字型如下:
noraml (普通字体,系统默认使用的字体)
sans(非衬线字体,与noraml样式相同)
serif (衬线字体,字体含)
monospace(等宽字体)
效果图(来自网络):
typeface.png fontFamily.png- 导入自选字体方式:
- 将字体库包放在assets中fonts文件夹下,代码设置如下:
Typeface TypeFaceYaHei = Typeface.createFromAsset(mActivity.getAssets(), "fonts/xiaowei.otf"); textView.setTypeface(TypeFaceYaHei, Typeface.BOLD);
- 将字体库包放在res/font/目录下,代码设置如下:
布局方式配置:
代码方式:android:fontFamily="@font/myfont" //fontFamily可理解为是对 typeface的加强版
@SuppressLint("RestrictedApi") Typeface typeface = TypefaceCompat.createFromResourcesFontFile(activity, activity.getResources(), R.font.din_alternate_bold, "", 0); textView.setTypeface(TypeFaceYaHei, Typeface.BOLD);
- 将字体库包放在assets中fonts文件夹下,代码设置如下:
TextView多样式文本设置,两种方式:
-
Html 样式:
textView.setText(Html.fromHtml("<font color=\'#217aff\' ><big>3.07</big></font><font color=\'#217aff\' ><small>万元</small></font>"));
注意:Android 中只支持 标签的 color 和 face 标签,不支持 size 标签,想控制大小只能通过 <big> 和 <small> 标签,但是两者的大小比较固定,没办法精确控制。如果遇到需要控制字体大小的需求,可以考虑用下面的 SpannableString 来实现。
-
SpannableString方式:
SpannableString s1 = new SpannableString("6.12万元"); s1.setSpan(new AbsoluteSizeSpan(16, true), 0, s1.length()-2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); s1.setSpan(new AbsoluteSizeSpan(11, true), s1.length()-2, s1.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); tv3.setTextColor(Color.parseColor("#113aff")); tv3.setText(s1);
字数限制
- 在xml中设置
android:maxLength="50"
- 在代码中设置
etRemarkMsg.setFilters(new InputFilter[]{new InputFilter.LengthFilter(50)});
线条及角度设置
editText.getPaint().setStrikeThruText(boolean strikeThruText); //是否加删除线
editText.getPaint().setUnderlineText(boolean underlineText); //是否加下划线
editText.getPaint().setTextSkewX(float skewX); //设置文字横向错切角度
此处推荐一个比较好的文章:Canvas DrawText详解
控制是否可编辑
//设置不可编辑状态
editText.setFocusable(false);
editText.setFocusableInTouchMode(false);
//设置可编辑状态
editText.setFocusableInTouchMode(true);
editText.setFocusable(true);
editText.requestFocus();
焦点控制:
不让EditText默认就会自动获取焦点,需要在EditText的 "父级"
控件中添加这两个属性:
android:focusable="true"
android:focusableInTouchMode="true"
光标设置
- 光标样式设置
drawable/color_cursor 文件代码如下(图片、矢量图均可):android:cursorVisible="true" //光标设置可见 android:textCursorDrawable="@drawable/color_cursor" //光标样式设置
<?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <!-- 填充的颜色 --> <solid android:color="@color/colorE7453C" /> <!-- 特别注意:必须明确标明size属性中的宽度,否则光标不可见 --> <size android:width="@dimen/width_theme_margin_2"/> </shape>
- 光标定位设置
CharSequence text = editText.getText(); if (text instanceof Spannable) { Spannable spanText = (Spannable)text; Selection.setSelection(spanText, text.length()); //方式一 //editText.setSelection(text.length()); //方式二 editText.requestFocus(); //显示光标 }
文本长按选中样式设置
android:textSelectHandleLeft //左边指示器资源文件
android:textSelectHandleRight //右边指示器资源文件
android:textSelectHandle //垂直指示器资源文件
android:textColorHighlight //文本选中高亮颜色
SelectHandle 效果图.png
输入类型及键盘行为控制 android:inputType:
可以接受的参数举例:
"text" 普通文本键盘
"textEmailAddress" 带有@字符的普通文本键盘
"textUri" 带有/字符的普通文本键盘.
"number" 基本数字键盘.
"phone" 电话样式键盘.
"datetime" 时间日期.
"date" 日期.
"textCapSentences" 普通的文本键盘,大写每个新句子的第一个字母.
"textCapWords" 大写每个单词的正常文本键盘.适合标题或人名.
"textAutoCorrect" 正常文本键盘,可纠正拼写错误的字词.
"textPassword" 这个就和设置password="true"是一样的效果.以原点的形式显示输入的文本.
"textMultiLine" 普通文本键盘,允许用户输入包含换行符的长字符串(回车符)
android:imeOptions 与inputType配合 能够设置右下角IME动作与编辑框相关的动作,如actionDone右下角将显示一个“完成”,而不设置默认是一个回车符号,imeOptions可接受的参数及对应大致效果如下:
imeOptions.png注意: 这里需要注意的是,如果想让键盘显示Action,需要inputType和imeOptions结合使用才可以,只使用imeOptions是不会有效果的.只会显示默认的换行action.(不同手机的输入法不一样,可能显示的会有差别)
监听键盘action响应事件
EditText editText = (EditText) findViewById(R.id.search);
editText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
boolean handled = false;
if (actionId == EditorInfo.IME_ACTION_SEND) { //点击的按键判断
Toast.makeText(this, "点击actionSearch ", Toast.LENGTH_SHORT).show();
handled = true;
}
return handled;
}
});
软键盘的调起、关闭
-
EditTex有焦点(focusable为true)阻止输入法弹出
editText.setOnTouchListener(new OnTouchListener(){ public boolean onTouch(View view,MotionEvent event){ editText.setInputType(Input.TYPE_NULL);//关闭软键盘 return false; }});
-
EditText无焦点(focusable=false)时阻挡输入法弹出
InputMethodManager imm=(InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(editText.getWindowToken(),0);
-
键盘永远不会弹出
android:focusable="false"// 键盘永不弹出
-
调用数字键盘并设置输入类型和键盘为英文
editText.setInputType(InputType.TYPE_CLASS_NUMBER);//调用数字键盘 editText.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);//英文
软键盘的调起导致原来的界面被挤上去,或导致界面下面的tab导航被挤上去,解决方法:
Mainfest中的Activity的android:windowSfotInputMdoe的“adjustPan"属性
有关软键盘的问题可参考android:windowSoftInputMode中的属性,防止toolbar与EditText共用出现的toolBar拉伸现象,可以这样设置:
android:windowSoftInputMode="stateVisible|adjustPan|stateHidden"针对软键盘遮挡输入框问题:
- 可以使用ScrollView嵌套EditText来解决这一问题
- 更优雅姿势 软键盘挡住输入框问题的终极解决方案
其他:输入法跟表情切换 Android键盘面板冲突 布局闪动处理方案
设置不可被粘贴
(参考网址:https://blog.csdn.net/nwlyf/article/details/51200093)
public class NullMenuEditText extends EditText {
boolean canPaste() {
return false;
}
boolean canCut() {
return false;
}
boolean canCopy() {
return false;
}
boolean canSelectAllText() {
return false;
}
boolean canSelectText() {
return false;
}
boolean textCanBeSelected() {
return false;
}
public NullMenuEditText(Context context, AttributeSet attrs) {
super(context, attrs);
setLongClickable(false);
setTextIsSelectable(false);
setCustomSelectionActionModeCallback(new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
});
}
@Override
public boolean onTextContextMenuItem(int id) {
return true;
}
}
若存在不足,大家不吝指教
网友评论