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

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

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

  这种情况,有人会用SpannableString方法来实现,(http://blog.sina.com.cn/s/blog_83940dfb0100zc56.html这里有很好的说明,可以了解一下SpannableString)它也有一个问题,它是一次性变化,就是说如果你有五个字变粗,它就一次把五个字变粗,不会随着你的输入,让你看到你输入的字变粗了。

  遇到这些问题,我也很头痛,我感觉想让他实现部分文字格式的改变,并且随着你的输入进行改变,就得用editText中的addTextChangedListener和SpannableString方法相结合来完成,当文本框内的文字有变化的时候,它随着变化,开始修改文字的格式。不多说,上代码。

package com.example.mynote.fragment;

import com.example.mynote.R;


import android.annotation.SuppressLint;
import android.graphics.Typeface;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.text.Editable;
import android.text.SpannableString;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextWatcher;
import android.text.style.StyleSpan;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnKeyListener;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.EditText;
import android.widget.HorizontalScrollView;
import android.widget.ImageView;
import android.widget.LinearLayout;

public class FragmentAddNote extends Fragment implements OnClickListener {


	
	//定义输入文本控件
	private EditText edit_temp;
	
	//定义屏幕下面菜单栏--字体变粗按钮
	private LinearLayout linearLayout_Bold;
	private ImageView img_Bold;
	
	
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.main_addnote, container, false);
        
        initView(view);
        
       
		
		return view;
	}
	
	
	//初始化各控件
	@SuppressLint("NewApi") public void initView(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(new editTextChangedListener());
	}
	
	
	class editTextChangedListener implements TextWatcher{

		//定义当前输入的字符数
		private int CharCount = 0;

		
		//s:变化后的所有字符
		public void afterTextChanged(Editable s) {
			
			//将光标点,移动到最后一个字
			edit_temp.setSelection(s.length());
		}

		//s:变化前的所有字符; start:字符开始的位置; count:变化前的总字节数;after:变化后的字节数
		public void beforeTextChanged(CharSequence s, int start, int count,int after) {
			
		}

		//S:变化后的所有字符;start:字符起始的位置;before: 变化之前的总字节数;count:变化后的字节数
		public void onTextChanged(CharSequence s, int start, int before, int count) {
			
            //判断当前输入的字符数,与文本框内的字符数长度是否一样,如果一样,则不进行操作
			//主要用来跳出循环,当改变文字时,onTextChanged就认为有所变化,会进入死循环,所以采用这种方式结束循环
			if(CharCount!=edit_temp.length())
			{		
				//将当前字符串的长度给输入字符串变量
				CharCount = edit_temp.length();
				
				//定义SpannableString,它主要的用途就是可以改变editText,TextView中部分文字的格式,以及向其中插入图片等功能
				SpannableString ss = new SpannableString(s);
				
				if(linearLayout_Bold.getTag().toString().equals("1"))
				{					
					ss.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), start, s.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
					edit_temp.setText(ss);
				}
			}
			
		}
		
		
	}
	
	
	
	@Override
	public void onClick(View v) {
		
		switch (v.getId()) {
		
   
		case R.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));
				
			}else if(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;
		}

	}

}

这里我只是加了一个让文字变粗,你可以根据SpannableString 的方法,加上很多格式,斜体,加个图什么的

  

你可能感兴趣的:(android如何改变editText控件中部分文字的格式)