注:本文是對(duì)網(wǎng)上一些方法的整理搭盾,以便查閱之用
易理解屬性
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="好好學(xué)習(xí)天天向上"
android:digits="abc123" //限定輸入文本
android:letterSpacing="2" //設(shè)置字符間距咳秉,默認(rèn)0
android:lineSpacingMultiplier="2" //設(shè)置行間距比例,默認(rèn)1
android:lineSpacingExtra="15dp" //設(shè)置額外行間距鸯隅,默認(rèn)0dp
android:textScaleX="2"http://文字橫向縮放比澜建,默認(rèn)1
android:scaleX="2" //控件View沿X軸拉伸
android:scaleY="8"
android:background="@null" //去除EditText底部背景線
/>
粗體設(shè)置
android:textStyle=”bold” //xml中設(shè)置方式
textView.getPaint().setFakeBoldText(true); //代碼設(shè)置方式
字體設(shè)置
android:typeface="monospace" //設(shè)置字型,現(xiàn)有字型如下:
noraml (普通字體,系統(tǒng)默認(rèn)使用的字體)
sans(非襯線字體蝌以,與noraml樣式相同)
serif (襯線字體,字體含)
monospace(等寬字體)
效果圖(來自網(wǎng)絡(luò)):
- 導(dǎo)入自選字體方式:
- 將字體庫包放在assets中fonts文件夾下跟畅,代碼設(shè)置如下:
Typeface TypeFaceYaHei = Typeface.createFromAsset(mActivity.getAssets(), "fonts/xiaowei.otf"); textView.setTypeface(TypeFaceYaHei, Typeface.BOLD);
- 將字體庫包放在res/font/目錄下咽筋,代碼設(shè)置如下:
布局方式配置:
代碼方式:android:fontFamily="@font/myfont" //fontFamily可理解為是對(duì) typeface的加強(qiáng)版
@SuppressLint("RestrictedApi") Typeface typeface = TypefaceCompat.createFromResourcesFontFile(activity, activity.getResources(), R.font.din_alternate_bold, "", 0); textView.setTypeface(TypeFaceYaHei, Typeface.BOLD);
- 將字體庫包放在assets中fonts文件夾下跟畅,代碼設(shè)置如下:
TextView多樣式文本設(shè)置,兩種方式:
-
Html 樣式:
textView.setText(Html.fromHtml("<font color=\'#217aff\' ><big>3.07</big></font><font color=\'#217aff\' ><small>萬元</small></font>"));
注意:Android 中只支持 標(biāo)簽的 color 和 face 標(biāo)簽碍彭,不支持 size 標(biāo)簽晤硕,想控制大小只能通過 <big> 和 <small> 標(biāo)簽悼潭,但是兩者的大小比較固定,沒辦法精確控制舞箍。如果遇到需要控制字體大小的需求舰褪,可以考慮用下面的 SpannableString 來實(shí)現(xiàn)。
-
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);
字?jǐn)?shù)限制
- 在xml中設(shè)置
android:maxLength="50"
- 在代碼中設(shè)置
etRemarkMsg.setFilters(new InputFilter[]{new InputFilter.LengthFilter(50)});
線條及角度設(shè)置
editText.getPaint().setStrikeThruText(boolean strikeThruText)疏橄; //是否加刪除線
editText.getPaint().setUnderlineText(boolean underlineText)占拍; //是否加下劃線
editText.getPaint().setTextSkewX(float skewX); //設(shè)置文字橫向錯(cuò)切角度
此處推薦一個(gè)比較好的文章:Canvas DrawText詳解
控制是否可編輯
//設(shè)置不可編輯狀態(tài)
editText.setFocusable(false);
editText.setFocusableInTouchMode(false);
//設(shè)置可編輯狀態(tài)
editText.setFocusableInTouchMode(true);
editText.setFocusable(true);
editText.requestFocus();
焦點(diǎn)控制:
不讓EditText默認(rèn)就會(huì)自動(dòng)獲取焦點(diǎn)捎迫,需要在EditText的 "父級(jí)"
控件中添加這兩個(gè)屬性:
android:focusable="true"
android:focusableInTouchMode="true"
光標(biāo)設(shè)置
- 光標(biāo)樣式設(shè)置
drawable/color_cursor 文件代碼如下(圖片晃酒、矢量圖均可):android:cursorVisible="true" //光標(biāo)設(shè)置可見 android:textCursorDrawable="@drawable/color_cursor" //光標(biāo)樣式設(shè)置
<?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" /> <!-- 特別注意:必須明確標(biāo)明size屬性中的寬度,否則光標(biāo)不可見 --> <size android:width="@dimen/width_theme_margin_2"/> </shape>
- 光標(biāo)定位設(shè)置
CharSequence text = editText.getText(); if (text instanceof Spannable) { Spannable spanText = (Spannable)text; Selection.setSelection(spanText, text.length()); //方式一 //editText.setSelection(text.length()); //方式二 editText.requestFocus(); //顯示光標(biāo) }
文本長按選中樣式設(shè)置
android:textSelectHandleLeft //左邊指示器資源文件
android:textSelectHandleRight //右邊指示器資源文件
android:textSelectHandle //垂直指示器資源文件
android:textColorHighlight //文本選中高亮顏色
輸入類型及鍵盤行為控制 android:inputType:
可以接受的參數(shù)舉例:
"text" 普通文本鍵盤
"textEmailAddress" 帶有@字符的普通文本鍵盤
"textUri" 帶有/字符的普通文本鍵盤.
"number" 基本數(shù)字鍵盤.
"phone" 電話樣式鍵盤.
"datetime" 時(shí)間日期.
"date" 日期.
"textCapSentences" 普通的文本鍵盤,大寫每個(gè)新句子的第一個(gè)字母.
"textCapWords" 大寫每個(gè)單詞的正常文本鍵盤.適合標(biāo)題或人名.
"textAutoCorrect" 正常文本鍵盤,可糾正拼寫錯(cuò)誤的字詞.
"textPassword" 這個(gè)就和設(shè)置password="true"是一樣的效果.以原點(diǎn)的形式顯示輸入的文本.
"textMultiLine" 普通文本鍵盤,允許用戶輸入包含換行符的長字符串(回車符)
android:imeOptions 與inputType配合 能夠設(shè)置右下角IME動(dòng)作與編輯框相關(guān)的動(dòng)作窄绒,如actionDone右下角將顯示一個(gè)“完成”贝次,而不設(shè)置默認(rèn)是一個(gè)回車符號(hào),imeOptions可接受的參數(shù)及對(duì)應(yīng)大致效果如下:
注意: 這里需要注意的是,如果想讓鍵盤顯示Action,需要inputType和imeOptions結(jié)合使用才可以,只使用imeOptions是不會(huì)有效果的.只會(huì)顯示默認(rèn)的換行action.(不同手機(jī)的輸入法不一樣,可能顯示的會(huì)有差別)
監(jiān)聽鍵盤action響應(yīng)事件
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) { //點(diǎn)擊的按鍵判斷
Toast.makeText(this, "點(diǎn)擊actionSearch ", Toast.LENGTH_SHORT).show();
handled = true;
}
return handled;
}
});
軟鍵盤的調(diào)起彰导、關(guān)閉
-
EditTex有焦點(diǎn)(focusable為true)阻止輸入法彈出
editText.setOnTouchListener(new OnTouchListener(){ public boolean onTouch(View view,MotionEvent event){ editText.setInputType(Input.TYPE_NULL);//關(guān)閉軟鍵盤 return false; }});
-
EditText無焦點(diǎn)(focusable=false)時(shí)阻擋輸入法彈出
InputMethodManager imm=(InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(editText.getWindowToken(),0);
-
鍵盤永遠(yuǎn)不會(huì)彈出
android:focusable="false"http:// 鍵盤永不彈出
-
調(diào)用數(shù)字鍵盤并設(shè)置輸入類型和鍵盤為英文
editText.setInputType(InputType.TYPE_CLASS_NUMBER);//調(diào)用數(shù)字鍵盤 editText.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);//英文
軟鍵盤的調(diào)起導(dǎo)致原來的界面被擠上去蛔翅,或?qū)е陆缑嫦旅娴膖ab導(dǎo)航被擠上去,解決方法:
Mainfest中的Activity的android:windowSfotInputMdoe的“adjustPan"屬性
有關(guān)軟鍵盤的問題可參考android:windowSoftInputMode中的屬性位谋,防止toolbar與EditText共用出現(xiàn)的toolBar拉伸現(xiàn)象,可以這樣設(shè)置:
android:windowSoftInputMode="stateVisible|adjustPan|stateHidden"針對(duì)軟鍵盤遮擋輸入框問題:
- 可以使用ScrollView嵌套EditText來解決這一問題
- 更優(yōu)雅姿勢(shì) 軟鍵盤擋住輸入框問題的終極解決方案
其他:輸入法跟表情切換 Android鍵盤面板沖突 布局閃動(dòng)處理方案
設(shè)置不可被粘貼
(參考網(wǎng)址: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;
}
}
若存在不足山析,大家不吝指教