EditText屬性

注:本文是對(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ò)):

typeface.png
fontFamily.png
  • 導(dǎo)入自選字體方式:
    1. 將字體庫包放在assets中fonts文件夾下跟畅,代碼設(shè)置如下:
      Typeface TypeFaceYaHei = Typeface.createFromAsset(mActivity.getAssets(), "fonts/xiaowei.otf");
      textView.setTypeface(TypeFaceYaHei, Typeface.BOLD);
      
      
    2. 將字體庫包放在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);
      
      
TextView多樣式文本設(shè)置,兩種方式:
  1. 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)。

  2. 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ù)限制
  1. 在xml中設(shè)置
    android:maxLength="50"
    
  2. 在代碼中設(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è)置
     android:cursorVisible="true"  //光標(biāo)設(shè)置可見
     android:textCursorDrawable="@drawable/color_cursor" //光標(biāo)樣式設(shè)置
    
    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" />
    
    <!-- 特別注意:必須明確標(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 //文本選中高亮顏色
SelectHandle 效果圖.png
輸入類型及鍵盤行為控制 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)大致效果如下:

imeOptions.png

注意: 這里需要注意的是,如果想讓鍵盤顯示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)閉
  1. 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;
     }});
    
  2. EditText無焦點(diǎn)(focusable=false)時(shí)阻擋輸入法彈出

     InputMethodManager imm=(InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
     imm.hideSoftInputFromWindow(editText.getWindowToken(),0);
    
  3. 鍵盤永遠(yuǎn)不會(huì)彈出

     android:focusable="false"http:// 鍵盤永不彈出
    
  4. 調(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ì)軟鍵盤遮擋輸入框問題:

    1. 可以使用ScrollView嵌套EditText來解決這一問題
    2. 更優(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;
 }
}

若存在不足山析,大家不吝指教

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市掏父,隨后出現(xiàn)的幾起案子笋轨,更是在濱河造成了極大的恐慌,老刑警劉巖赊淑,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爵政,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡陶缺,警方通過查閱死者的電腦和手機(jī)茂卦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來组哩,“玉大人等龙,你說我怎么就攤上這事×娣。” “怎么了蛛砰?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長黍衙。 經(jīng)常有香客問我泥畅,道長,這世上最難降的妖魔是什么琅翻? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任位仁,我火速辦了婚禮柑贞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘聂抢。我一直安慰自己钧嘶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布琳疏。 她就那樣靜靜地躺著有决,像睡著了一般。 火紅的嫁衣襯著肌膚如雪空盼。 梳的紋絲不亂的頭發(fā)上书幕,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音揽趾,去河邊找鬼台汇。 笑死,一個(gè)胖子當(dāng)著我的面吹牛篱瞎,可吹牛的內(nèi)容都是我干的励七。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼奔缠,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了吼野?” 一聲冷哼從身側(cè)響起校哎,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瞳步,沒想到半個(gè)月后闷哆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡单起,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年抱怔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘀倒。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡屈留,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出测蘑,到底是詐尸還是另有隱情灌危,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布碳胳,位于F島的核電站勇蝙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏挨约。R本人自食惡果不足惜味混,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一产雹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧翁锡,春花似錦蔓挖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至哈踱,卻和暖如春荒适,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背开镣。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國打工刀诬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人邪财。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓陕壹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親树埠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子糠馆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344