android如何改变editText控件中部分文字的格式

作者:袖梨 2022-06-25

我们在使用editText控件的时候,会遇到这样的一问题,就是我在输入时候,当我选择让文字变粗时,我输入的文字就会变粗,当我去掉选择时,再输入文字时,文字就是正常情况了。

这种情况,大家一般认为很简单啊。editText中不是有setTypeface这个方法吗。只要使用edit_temp.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));就可以了。可是问题来了。这种方法,是将editText中所有的文字的格式全变了。可是我想要的格式是这样的:  正常格式变粗的格式正常的格式

 

 代码如下复制代码

publicclassFragmentAddNoteextendsFragmentimplementsOnClickListener {

 //定义输入文本控件

 privateEditText edit_temp;

 //定义屏幕下面菜单栏--字体变粗按钮

 privateLinearLayout linearLayout_Bold;

 privateImageView img_Bold;

 @Override

 publicView onCreateView(LayoutInflater inflater, ViewGroup container,

   Bundle savedInstanceState) {

  View view = inflater.inflate(R.layout.main_addnote, container,false);

  initView(view); 

  returnview;

 }

 publicvoidinitView(View view)

 {   

  //初始化屏幕下面菜单栏--字体变粗按钮

  linearLayout_Bold = (LinearLayout)view.findViewById(R.id.linearLayout_Bold);

  linearLayout_Bold.setOnClickListener(this);

  img_Bold = (ImageView)view.findViewById(R.id.img_Bold);

  //初始化输入文本控件

  edit_temp = (EditText)view.findViewById(R.id.edit_temp);

  edit_temp.addTextChangedListener(neweditTextChangedListener());

 }

 classeditTextChangedListenerimplementsTextWatcher{

  //定义当前输入的字符数

  privateintCharCount =0;

  //s:变化后的所有字符

  publicvoidafterTextChanged(Editable s) {   

   //将光标点,移动到最后一个字

   edit_temp.setSelection(s.length());

  }

  //s:变化前的所有字符; start:字符开始的位置; count:变化前的总字节数;after:变化后的字节数

  publicvoidbeforeTextChanged(CharSequence s,intstart,intcount,intafter) {

  }

  //S:变化后的所有字符;start:字符起始的位置;before: 变化之前的总字节数;count:变化后的字节数

  publicvoidonTextChanged(CharSequence s,intstart,intbefore,intcount) {

   //判断当前输入的字符数,与文本框内的字符数长度是否一样,如果一样,则不进行操作

   //主要用来跳出循环,当改变文字时,onTextChanged就认为有所变化,会进入死循环,所以采用这种方式结束循环

   if(CharCount!=edit_temp.length())

   {  

    //将当前字符串的长度给输入字符串变量

    CharCount = edit_temp.length();    

    //定义SpannableString,它主要的用途就是可以改变editText,TextView中部分文字的格式,以及向其中插入图片等功能

    SpannableString ss =newSpannableString(s);    

    if(linearLayout_Bold.getTag().toString().equals("1"))

    {     

     ss.setSpan(newStyleSpan(Typeface.BOLD_ITALIC), start, s.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

     edit_temp.setText(ss);

    }

   }  

  }  

 }

 @Override

 publicvoidonClick(View v) {

  switch(v.getId()) {

  caseR.id.linearLayout_Bold:

   if(linearLayout_Bold.getTag().toString().equals("0"))

   {

    img_Bold.setImageResource(R.drawable.ic_editor_bar_rtf_bold_on);

    linearLayout_Bold.setTag("1");

    //edit_temp.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));

   }elseif(linearLayout_Bold.getTag().toString().equals("1"))

   {

    img_Bold.setImageResource(R.drawable.ic_editor_bar_rtf_bold);

    linearLayout_Bold.setTag("0");   

    //edit_temp.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));

   }

   break;

  default:

   break;

  }

 }

}

 

相关文章

精彩推荐