安卓EditText输入时自动编号

来源:互联网 发布:如何修改tomcat端口 编辑:程序博客网 时间:2024/05/17 06:44

最近在做一个安卓文字输入框,发现有时候需要对每一行文字进行编号,手动输入编号比较麻烦,EditText控件又没有列表功能。于是做了这一个处理,在行首第一个字输入空格就自动编号。删除行时自动重新编号。


效果如图:(用法很简单,在换行后按一下空格就自动显示编号。不按空格不编号)


代码如下:

myText.addTextChangedListener(new TextWatcher() {
       
       @Override
       public void onTextChanged(CharSequence s, int start, int before, int count) {
           // 输入的内容变化的监听
        Editable editable = myText.getText();  
        String s1=editable.toString();
        //自动添加索引
        indexText(myText,editable,s1);
       }


@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub

}


@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub

}});

  public static void indexText(EditText etxt,Editable eab,String s1)
    {
    //添加自动编号。
    //String strlastSet="";
   
    int pos=etxt.getSelectionStart(); //前面是换行或第一行,后面是空格。
    int nLen=s1.length();
    if(pos>1 && pos<=nLen)
    {
    char[] chBuf=new char[8];
    eab.getChars(pos-2, pos, chBuf, 0);
    if(chBuf[1]=='\n' //删除
    ||chBuf[0]=='\n'
    ||chBuf[0]=='\n')
    {
    pos=0;
    }
    }
if(nLen>0 && pos==0||pos==1)//&& s1.equals(strlastSet)==false)
{
int nSel = etxt.getSelectionStart();  
    int nCount=s1.length();
    int n=-1;
    int nl=0;
    int nline=-1;
    do
    {
    nline++;
    char c=s1.charAt(n+1);
    if(c=='\n') //空行,号数不变。
    {
    nline--;
    }
    else if(c==' ') //空格开始的自动编号。
    {
    nl++;
    c=(char) (0x2776+(nline%10));
    s1=s1.substring(0,n+1)+String.valueOf(c)+s1.substring(n+2);
    //nCount++;
    //if(nSel>n)
    //nSel++;
    }
    else if((c<0x2460||c>0x2469)&&(c<0x2776||c>0x277f)) //不是编号。重新开始。
    {
    nline=-1;
    }
    else //检查是否需要重新编号。
    {
    if(c!=(char) (0x2776+(nline%10))) //
    {
    nl++;
    c=(char) (0x2776+(nline%10));
    s1=s1.substring(0,n+1)+String.valueOf(c)+s1.substring(n+2);
    }
    }
    n=s1.indexOf('\n',n+1);
   
    }while(n>0 && n<nCount-1);
    if(nl>0)
    {
   
    //strlastSet=s1;
    etxt.setText(s1); //会导致 再次调用 onTextChanged
    etxt.setSelection(nSel);
    //Log.d(TAG,s1);
    }
}
    }

源码下载网站:http://www.nnv1.com/source.htm 在绿色区域其他源码中找到"安卓TextEditer自动编号"下载源码。