使用TextView/EditText应该注意的地方

关于android软键盘enter键的替换与事件监听
软件盘的界面替换只有一个属性android:imeOptions,这个属性的可以取的值有 normal,actionUnspecified,actionNone,actionGo,actionSearch,actionSend,actionNext,actionDone, 例如当值为actionNext时enter键外观变成一个向下箭头,而值为actionDone时enter键外观则变成了“完成”两个字。
我们也可以重写enter的事件,方法如下:
Java代码  收藏代码
  1. TextView editText = new TextView(this);  
  2. editText.setOnEditorActionListene(  
  3. newTextView.OnEditorActionListener() {     
  4.           public boolean onEditorAction(TextView v, int actionId,     
  5.                             KeyEvent event){     
  6.                         if (actionId == EditorInfo.IME_ACTION_SEND)     
  7.                         {     
  8.                             // 在这里编写自己想要实现的功能     
  9.                         }     
  10.                         return false;     
  11.           }     
  12. });   

另附:拦截HOME按键

Android如何显示音标
http://marshal.easymorse.com/archives/4087

EditText设置光标位置问题
EditText中有一些预置文本的时候,想把光标调到最前面,一开始是使用的setSelection(0),结果发现在三星P1000上面有 问题。经过研究发现需要先调用EditText.requestFocus(),再调用setSelection(0)。否则的话,在2.x的机器上有问 题,但3.x上面是好着的。

EditText横屏时,弹出软件盘时不进行全屏
在使用EditText进行文本输入时,若不进行特殊的设置,使用Android自带的软键盘,该软键盘会占用整个界面,那么,如何让键盘只占用屏幕的一部分呢?
Xml代码  收藏代码
  1. <EditText   
  2.     android:id="@+id/text1"   
  3.     android:layout_width="150dip"   
  4.     android:layout_height="wrap_content"  
  5.     android:imeOptions="flagNoExtractUi"/>  

使用android:imeOptinos可对Android自带的软键盘进行一些界面上的设置:
Xml代码  收藏代码
  1. android:imeOptions="flagNoExtractUi"  //使软键盘不全屏显示,只占用一部分屏幕  
  2. 同时,这个属性还能控件软键盘右下角按键的显示内容,默认情况下为回车键  
  3. android:imeOptions="actionNone"  //输入框右侧不带任何提示  
  4. android:imeOptions="actionGo"    //右下角按键内容为'开始'  
  5. android:imeOptions="actionSearch"  //右下角按键为放大镜图片,搜索  
  6. android:imeOptions="actionSend"    //右下角按键内容为'发送'  
  7. android:imeOptions="actionNext"   //右下角按键内容为'下一步'  
  8. android:imeOptions="actionDone"  //右下角按键内容为'完成'   

同时,可能EditText添加相应的监听器,捕捉用户点击了软键盘右下角按钮的监听事件,以便进行处理。
Java代码  收藏代码
  1. editText.setOnEditorActionListener(new OnEditorActionListener() {  
  2.         @Override  
  3.         public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {  
  4.             Toast.makeText(MainActivity.this, "text2", Toast.LENGTH_SHORT).show();  
  5.             return false;  
  6.         }  
  7.     });  


在TextView控件中单击链接弹出Activity
http://blog.csdn.net/nokiaguy/article/details/6835916

文本框实现搜索和清空效果
http://407827531.iteye.com/blog/1114592

为TextView添加阴影
values/styles
Xml代码  收藏代码
  1. <style name="AudioFileInfoOverlayText">   
  2.     <item name="android:paddingLeft">4px</item>   
  3.     <item name="android:paddingBottom">4px</item>   
  4.     <item name="android:textColor">#ffffffff</item>   
  5.     <item name="android:textSize">12sp</item>   
  6.     <item name="android:shadowColor">#ff00ff00</item>   
  7.     <item name="android:shadowDx">5</item>   
  8.     <item name="android:shadowDy">3</item>   
  9.     <item name="android:shadowRadius">6</item>  
  10. </style>  
  11.   
  12. <TextView android:id="@+id/info"   
  13.        android:layout_width="fill_parent"   
  14.        android:layout_height="wrap_content"   
  15.        style="@style/AudioFileInfoOverlayText"   
  16.        android:text="aaaa"   
  17.        android:gravity="center" />  



如何将TextView中的中文设置成粗体?
在xml文件中使用android:textStyle="bold" 可以将英文设置成粗体,但是不能将中文设置成粗体,将中文设置成粗体的方法是:
TextView tv = (TextView)findViewById(R.id.TextView01);
TextPaint tp = tv.getPaint();
tp.setFakeBoldText(true);
其他还有:
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 24f);//设置成24sp 
textView.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));//可能中文加粗无效
textView.setTypeface(Typeface.defaultFromStyle(Typeface.ITALIC));//可能中文无效
textView.setText(Html.fromHtml("<u>"+texts[i]+"</u>"));//下划线
textView.setTypeface(Typeface.MONOSPACE,Typeface.ITALIC);//斜体,中文有效
textView.getPaint().setFlags(Paint. STRIKE_THRU_TEXT_FLAG );//中间加横线
textView.getPaint().setFlags(Paint. UNDERLINE_TEXT_FLAG );//底部加横线

ellipsize和lines
Xml代码  收藏代码
  1. <TextView android:id="@+id/tv"  
  2.         android:layout_width="fill_parent"  
  3.         android:layout_height="wrap_content"  
  4.         android:textColor="#FF00FF00"  
  5.         android:textSize="20px"  
  6.         android:lines="4"  
  7.         android:ellipsize="end"  
  8.         android:text="Automatic Target Mode: using existing emulator running compatible AVD.Application already deployed. No need to reinstall.Application already deployed. No need to reinstall.Application already deployed. No need to reinstall"  
  9.         />  

不要将ellipsize和lines一起使用,否则会让人疑惑。像上面的代码会显示几行文字呢?
android:lines感觉是用于显示文字的行数,事实上是不确切的。假如文字不满足够的行数呢?android:lines更适合用于设置 TextView的高度,像上面的代码指定了TextView的高度可以显示4行文字,如果文字不满4行,则TextView仍旧显示4行的高度!
android:ellipsize用于当文字过长时缩略显示,默认会缩略显示2行!如果和android:singleLine="true" 一起使用则显示一行;但不要以为和android:lines="4"或和android:maxLines="4"一起使用会显示4行,当试验过了才知 道仍然显示2行!

如何对EditText输入字数做限制?
Java代码  收藏代码
  1. private EditText mEditText ;  
  2.         mEditText  = (EditText) findViewById(R.id.mEditText );  
  3. /** 限制字数 */  
  4.         mEditText  .addTextChangedListener(new TextWatcher() {  
  5.             private CharSequence temp;                
  6.             private int selectionStart ;                
  7.             private int selectionEnd ;  
  8.             @Override  
  9.             public void beforeTextChanged(CharSequence s, int start, int count,  
  10.                     int after) {  
  11.                 temp = s;   
  12.             }  
  13.               
  14.             @Override  
  15.             public void onTextChanged(CharSequence s, int start, int before,  
  16.                     int count) {  
  17.                   
  18.             }   
  19.               
  20.             @Override  
  21.             public void afterTextChanged(Editable s) {  
  22.                 selectionStart = mEditText  .getSelectionStart();                    
  23.                 selectionEnd = mEditText  .getSelectionEnd();                    
  24.                 Log.d(TAG,""+selectionStart);                    
  25.                 if (temp.length() > 8) {                        
  26.                     Toast.makeText(MAUpdateAty.this, "字数不能超过8个", Toast.LENGTH_SHORT).show();                        
  27.                     s.delete(selectionStart-1, selectionEnd);                        
  28.                     int tempSelection = selectionStart;                        
  29.                     mEditText  .setText(s);                        
  30.                     mEditText  .setSelection(tempSelection);                    
  31.                 }   
  32.                 Log.d(TAG," "+selectionEnd);  
  33.             }  
  34.         });  

或者试试这个:
Java代码  收藏代码
  1. private TextWatcher mTextWatcher = new TextWatcher(){  
  2.   Toast mToast = null;  
  3.   public void beforeTextChanged(CharSequence s, int start,   
  4.     int count,int after) {  
  5.   }  
  6.   
  7.   public void onTextChanged(CharSequence s, int start,   
  8.     int before,int count) {  
  9.   }  
  10.     
  11.   public void afterTextChanged(Editable s) {  
  12.    int nSelStart = 0;  
  13.    int nSelEnd = 0;  
  14.    boolean nOverMaxLength = false;  
  15.      
  16.    nSelStart = mEditText.getSelectionStart();  
  17.    nSelEnd   = mEditText.getSelectionEnd();  
  18.      
  19.    nOverMaxLength = (s.length() > Constants.MAX_TEXT_INPUT_LENGTH) ? true : false;  
  20.    if(nOverMaxLength){  
  21.     if(null == mToast){  
  22.      mToast = Toast.makeText(mContext,   
  23.        R.string.IDS_MSG_TEXT_OVER_MAXLENGTH,   
  24.        Toast.LENGTH_SHORT);  
  25.     }  
  26.     mToast.show();  
  27.       
  28.     s.delete(nSelStart - 1, nSelEnd);  
  29.   
  30.     mEditText.setTextKeepState(s);//请读者注意这一行,保持光标原先的位置,而 mEditText.setText(s)会让光标跑到最前面,就算是再加mEditText.setSelection(nSelStart) 也不起作用  
  31.     }  
  32.   }  
  33.  };  

或者试试这个:
用代码控制,可以用InputFilter限定20个字符:
editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(20)});
或者这个:
android:maxLength来设置输入的最大长度

控制输入小数的位数
Java代码  收藏代码
  1. // 设置小数位数控制  
  2.         InputFilter lengthfilter = new InputFilter() {  
  3.             public CharSequence filter(CharSequence source, int start, int end,  
  4.                     Spanned dest, int dstart, int dend) {  
  5.                 // 删除等特殊字符,直接返回  
  6.                 if ("".equals(source.toString())) {  
  7.                     return null;  
  8.                 }  
  9.                 String dValue = dest.toString();  
  10.                 String[] splitArray = dValue.split("\\.");  
  11.                 if (splitArray.length > 1) {  
  12.                     String dotValue = splitArray[1];  
  13.                     int diff = dotValue.length() + 1 - digLength;  
  14.                     if (diff > 0) {  
  15.                         return source.subSequence(start, end - diff);  
  16.                     }  
  17.                 }  
  18.                 return null;  
  19.             }  
  20.         };  
  21.         inputEdit.setFilters(new InputFilter[] { lengthfilter });  


一 . 设置焦点
如果在单击某个 EditText 的时候想让其他的 EditText 获得输入的焦点,那么可以使用下面的语句,
Java代码  收藏代码
  1. getCurrentFocus().setFocusable(false);  
  2. getCurrentFocus().setFocusableInTouchMode(false);  

而要获得焦点的 EditText :
Java代码  收藏代码
  1. mSearchEdit.setFocusable(true);  
  2. mSearchEdit.setFocusableInTouchMode(true);  
  3. mSearchEdit.requestFocus();  


二 . 设置输入格式过滤器
为 EditText 设置输入的过滤器。InputFilter, 首先要注意的是对一个 EditText 的对象设置 setFilters(InputFilter[] filters) ,其参数是一个 inputFilter 数组,即对一个 EditText 你可以同时设置多个输入过滤器。而我们平时用的时候一般设置一个过滤器就可以了,所以可以作如下使用(以输入数字为例):
InputFilter[] mDigitsFilters = new InputFilter[1];
mDigitsFilters[0] = new DigitsKeyListener(true, true);
ps: DigitsKeyListener 第一个参数是 Sign, 如果设置为 true ,表示允许在数字最左端有负号,否则只能输入正数;第二个参数是 decimal, 如果设置为 true, 表示允许在数字中有一个小数点存在。
最后 setFilters(mDigitsFilters); 就 OK 了,
InputFilter 是一个接口,其实现的子类有:
DateKeyListener, DateTimeKeyListener, DialerKeyListener, DigitsKeyListener, InputFilter.AllCaps, InputFilter.LengthFilter, LoginFilter, LoginFilter.PasswordFilterGMail, LoginFilter.UsernameFilterGMail, LoginFilter.UsernameFilterGeneric, NumberKeyListener, TimeKeyListener

DateKeyListener        For entering dates in a text field.
DateTimeKeyListener    For entering dates and times in the same text field.
DialerKeyListener       For dialing-only text entry 
DigitsKeyListener               For digits-only text entry 
InputFilter.AllCaps              This filter will capitalize all the lower case letters that are added through edits.
InputFilter.LengthFilter         This filter will constrain edits not to make the length of the text greater than the specified length.
LoginFilter                  Abstract class for filtering login-related text (user names and passwords) 
LoginFilter.PasswordFilterGMail  This filter is compatible with GMail passwords which restricts characters to the Latin-1 (ISO8859-1) char set.
LoginFilter.UsernameFilterGMail          This filter rejects characters in the user name that are not compatible with GMail account creation.
LoginFilter.UsernameFilterGeneric        This filter rejects characters in the user name that are not compatible with Google login.
NumberKeyListener            For numeric text entry 
TimeKeyListener         For entering times in a text field.

根据解释应该不难理解,根据你自己的需要选择吧。
实例:
EditText与InputFilter实现文本对比
      此功能类似于临摹。已知被临摹的字符串,将字符串与EditText中输入进行
对比,输入错误,则用“×”替换所输入的字符。
Java代码  收藏代码
  1. import android.app.Activity;  
  2. import android.os.Bundle;  
  3. import android.text.InputFilter;  
  4. import android.text.Spanned;  
  5. import android.util.Log;  
  6. import android.widget.EditText;  
  7. import android.widget.TextView;  
  8. import android.widget.Toast;  
  9.   
  10. public class MyFilterTest extends Activity {  
  11.     /** Called when the activity is first created. */  
  12.     TextView myText;  
  13.     EditText myEdit;  
  14.     @Override  
  15.     public void onCreate(Bundle savedInstanceState) {  
  16.         super.onCreate(savedInstanceState);  
  17.         setContentView(R.layout.main);  
  18.         final String str = "Hello,Android!";  
  19.           
  20.         myText=(TextView)findViewById(R.id.myText);  
  21.         myText.setText(str);  
  22.         myEdit=(EditText)findViewById(R.id.myEdit);  
  23.           
  24.         myEdit.setFilters(new InputFilter[]{ new MyInputFilter(str) });  
  25.           
  26.     }  
  27.     public class MyInputFilter implements InputFilter{  
  28.         String str=null;  
  29.         public MyInputFilter(String str){  
  30.             this.str=str;  
  31.         }  
  32.         @Override  
  33.         public CharSequence filter(CharSequence src, int start, int end,  
  34.                 Spanned dest, int dstart, int dend) {  
  35.             // TODO Auto-generated method stub  
  36.             String ch=null;  
  37.             String TAG="Filter";  
  38.             Log.w(TAG,"src:"+src+";start:"+start+";end:"+end);  
  39.             Log.w(TAG,"dest:"+dest+";dstart:"+dstart+";dend:"+dend);  
  40.             if(dest.length()<str.length()){  
  41.                 ch=str.substring(dstart+start, dstart+end);  
  42.             }else{  
  43.                 return dest.subSequence(dstart, dend);  
  44.             }  
  45.                   
  46.             if(ch.equals(src)){  
  47.               
  48.                 Toast.makeText(MyFilterTest.this, "match", Toast.LENGTH_SHORT).show();  
  49.                 return dest.subSequence(dstart, dend)+src.toString();  
  50.             }else{  
  51.                 Toast.makeText(MyFilterTest.this, "mismatch", Toast.LENGTH_SHORT).show();  
  52.                 return dest.subSequence(dstart, dend)+"×";  
  53.             }  
  54.         }                 
  55.     }  
  56. }  

参见其他:
http://www.blogjava.net/improviser/archive/2010/11/08/337501.html
http://wang-peng1.iteye.com/blog/1022523

如何设置EditText隐藏键盘 ?
Java代码  收藏代码
  1. (EditText)mMarket.setInputType(0);  


如何设置EditText不被输入法遮盖 ?
Java代码  收藏代码
  1. getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);  

如何解决软键盘弹出引起的各种不适


如何隐藏Activity刚进来焦点在EditText时显示输入键盘?
一个Activity刚进来时焦点在EditText时,会弹出输入的键盘,这不是我想要的,然后就想办法隐藏掉输入键盘。尝试了EditText的clearFocus不行,也试过其它控件ruquestFocus也不行,用隐藏键盘的方法http://mingkg21.iteye.com/blog/548642
不行。试试下面这种:
Java代码  收藏代码
  1. getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);  

这个方法的意思是,只有点击EditText时才会弹出输入键盘。


TextView实现多行本文滚动
Android中我们为了实现文本的滚动可以在ScrollView中嵌入一个TextView,其实TextView自己也可以实现多行滚动的,毕竟ScrollView必须只能有一个直接的子类布局。只要在layout中简单设置几个属性就可以轻松实现
  <TextView 
    android:id="@+id/tvCWJ" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:scrollbars="vertical"   <!--垂直滚动条 -->
    android:singleLine="false"       <!--实现多行 -->
    android:maxLines="15"            <!--最多不超过15行 -->
    android:textColor="#FF0000"
    />
   当然我们为了让TextView动起来,还需要用到TextView的setMovementMethod方法设置一个滚动实例,代码如下
TextView tv = (TextView)findViewById(R.id.tvCWJ);  
tv.setMovementMethod(ScrollingMovementMethod.getInstance());

设置EditText显示或隐藏密码
Java代码  收藏代码
  1. if (isChecked) {  
  2.             System.out.println("checked");  
  3.             // 显示密码  
  4.             password_edit.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);   
  5.         } else {  
  6.             System.out.println("not checked");  
  7.             // 隐藏密码  
  8.             password_edit.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);  
  9.         }  


EditView小写转大写
Java代码  收藏代码
  1. final EditText input = new EditText(this);  
  2. InputFilter[] FilterArray = new InputFilter[1];  
  3. FilterArray[0] = new InputFilter.AllCaps();  
  4. input.setFilters(FilterArray);  


阻止EditText一开始就获得焦点
程序在加载视图时总是会把输入的焦点自动移动到第一个输入框(这样导致在某些机器上程序一启动就弹出输入法框,很是不爽),如何让他不获得焦点呢?
EditText.setSelected(false);
上述命令是不行的。
clearFocus() 才是可以的。
如果你是用AutoCompleteTextView
Xml代码  收藏代码
  1. <!-- Dummy item to prevent AutoCompleteTextView from receiving focus -->  
  2. <!-- 最简单的方法是在TextView的父容器(通常是LinearLayout)中设置 android:focusable="true" android:focusableInTouchMode="true",这样就把焦点从 EditText上移走了。-->  
  3. <LinearLayout  
  4.     android:focusable="true" android:focusableInTouchMode="true"  
  5.     android:layout_width="0px" android:layout_height="0px">  
  6. <!-- :nextFocusUp and :nextFocusLeft have been set to the id of this component  
  7.      to prevent the dummy from receiving focus again -->  
  8.     <AutoCompleteTextView android:id="@+id/text"  
  9.         android:layout_width="fill_parent" android:layout_height="wrap_content"  
  10.         android:nextFocusUp="@+id/text" android:nextFocusLeft="@+id/text"/>  
  11. </LinearLayout>  


彻底隐藏软键盘
Java代码  收藏代码
  1. EditText et=(EditText)findViewById(R.id.edit);  
  2. et.setInputType(InputType.TYPE_DATETIME_VARIATION_NORMAL);  


tv.setCompoundDrawables()不起作用?
Java代码  收藏代码
  1. Drawable leftDrawable;  
  2. leftDrawable= getResources().getDrawable(R.drawable.left_drawable);  
  3. // user setCompoundDrawables()  method , you must call Drawable.setBounds()  method !Or  the Image can't show .  
  4. leftDrawable.setBounds(0, 0, leftDrawable.getMinimumWidth(), leftDrawable.getMinimumHeight());  
  5. mTextView.setCompoundDrawables(leftDrawable, null, null, null);   

其实就是android:drawableLeft="@drawable/icon"啦!

Enter键图标的设置
软键盘的Enter键默认显示的是“完成”文本,我们知道按Enter建表示前置工作已经准备完毕了,要去什么什么啦。比如,在一个搜索中,我们 输入要搜索的文本,然后按Enter表示要去搜索了,但是默认的Enter键显示的是“完成”文本,看着不太合适,不符合搜索的语义,如果能显示“搜索” 两个字或者显示一个表示搜索的图标多好。事实证明我们的想法是合理的,Android也为我们提供的这样的功能。通过设置 android:imeOptions来改变默认的“完成”文本。这里举几个常用的常量值:

Xml代码  收藏代码
  1. <EditText    
  2.     android:id="@+id/edit_text"      
  3.     android:layout_width="fill_parent"     
  4.     android:layout_height="wrap_content"    
  5.     android:imeOptions="actionSearch"/>  


EditText的取值、全选、部分选择、获取选中文本
       下面通过一个例子来演示EditText的取值、全选、部分选择和获取选中文本.main.xml如下:
Xml代码  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7. <EditText  
  8.     android:id="@+id/edit_text"    
  9.     android:layout_width="fill_parent"   
  10.     android:layout_height="wrap_content"  
  11.     android:imeOptions="actionSearch"/>  
  12. <Button   
  13.     android:id="@+id/btn_get_value"  
  14.     android:text="取值"  
  15.     android:layout_width="wrap_content"  
  16.     android:layout_height="wrap_content"/>  
  17. <Button   
  18.     android:id="@+id/btn_all"  
  19.     android:text="全选"  
  20.     android:layout_width="wrap_content"  
  21.     android:layout_height="wrap_content"/>  
  22. <Button   
  23.     android:id="@+id/btn_select"  
  24.     android:text="从第2个字符开始选择"  
  25.     android:layout_width="wrap_content"  
  26.     android:layout_height="wrap_content"/>  
  27. <Button   
  28.     android:id="@+id/btn_get_select"  
  29.     android:text="获取选中文本"  
  30.     android:layout_width="wrap_content"  
  31.     android:layout_height="wrap_content"/>  
  32. </LinearLayout>  

代码:
Java代码  收藏代码
  1. package com.flysnow;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.text.Editable;  
  6. import android.text.Selection;  
  7. import android.view.KeyEvent;  
  8. import android.view.View;  
  9. import android.view.View.OnClickListener;  
  10. import android.widget.Button;  
  11. import android.widget.EditText;  
  12. import android.widget.TextView;  
  13. import android.widget.Toast;  
  14. import android.widget.TextView.OnEditorActionListener;  
  15. /** 
  16.  * EditText演示 
  17.  * @author 飞雪无情 
  18.  * @since 2010-11-29 
  19.  */  
  20. public class HelloEditText extends Activity {  
  21.     /** Called when the activity is first created. */  
  22.     @Override  
  23.     public void onCreate(Bundle savedInstanceState) {  
  24.         super.onCreate(savedInstanceState);  
  25.         setContentView(R.layout.main);  
  26.         final EditText editText=(EditText)findViewById(R.id.edit_text);  
  27.         //监听回车键  
  28.         editText.setOnEditorActionListener(new OnEditorActionListener() {  
  29.             @Override  
  30.             public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {  
  31.                 Toast.makeText(HelloEditText.this, String.valueOf(actionId), Toast.LENGTH_SHORT).show();  
  32.                 return false;  
  33.             }  
  34.         });  
  35.         //获取EditText文本  
  36.         Button getValue=(Button)findViewById(R.id.btn_get_value);  
  37.         getValue.setOnClickListener(new OnClickListener() {  
  38.             @Override  
  39.             public void onClick(View v) {  
  40.                 Toast.makeText(HelloEditText.this, editText.getText().toString(), Toast.LENGTH_SHORT).show();  
  41.             }  
  42.         });  
  43.         //让EditText全选  
  44.         Button all=(Button)findViewById(R.id.btn_all);  
  45.         all.setOnClickListener(new OnClickListener() {  
  46.             @Override  
  47.             public void onClick(View v) {  
  48.                 editText.selectAll();  
  49.             }  
  50.         });  
  51.         //从第2个字符开始选择EditText文本  
  52.         Button select=(Button)findViewById(R.id.btn_select);  
  53.         select.setOnClickListener(new OnClickListener() {  
  54.             @Override  
  55.             public void onClick(View v) {  
  56.                 Editable editable=editText.getText();  
  57.                 Selection.setSelection(editable, 1,editable.length());  
  58.             }  
  59.         });  
  60.       //获取选中的文本  
  61.         Button getSelect=(Button)findViewById(R.id.btn_get_select);  
  62.         getSelect.setOnClickListener(new OnClickListener() {  
  63.             @Override  
  64.             public void onClick(View v) {  
  65.                 int start=editText.getSelectionStart();  
  66.                 int end=editText.getSelectionEnd();  
  67.                 CharSequence selectText=editText.getText().subSequence(start, end);  
  68.                 Toast.makeText(HelloEditText.this, selectText, Toast.LENGTH_SHORT).show();  
  69.             }  
  70.         });  
  71.     }  
  72.     /** 
  73.      * 交换两个索引 
  74.      * @param start 开始索引 
  75.      * @param end 结束索引 
  76.      */  
  77.     protected void switchIndex(int start, int end) {  
  78.         int temp=start;  
  79.         start=end;  
  80.         end=temp;  
  81.     }  
  82. }  



自定义View控件解决android文字排版和换行的问题(转,尚未测试)
http://www.eoeandroid.com/thread-64055-1-1.html
Java代码  收藏代码
  1. import java.util.Vector;  
  2. import android.content.Context;  
  3. import android.graphics.Canvas;  
  4. import android.graphics.Color;  
  5. import android.graphics.Paint;  
  6. import android.graphics.Paint.FontMetrics;  
  7. import android.util.AttributeSet;  
  8. import android.view.View;  
  9. import android.view.WindowManager;  
  10. import android.widget.LinearLayout;  
  11. import android.widget.TextView;  
  12. public class MyView extends TextView {  
  13. private final String namespace="http://www.nearmobile.net";  
  14.   
  15. private int resourceId=0;  
  16.   
  17.   
  18. /* 声明Paint对象 */  
  19. private Paint mPaint = null;  
  20. /* 声明TextUtil对象 */  
  21. private TextUtil mTextUtil = null;  
  22.   
  23. public  static  int m_iTextHeight;  
  24. private WindowManager wm=null;  
  25. private String string="";  
  26.     public MyView(Context context, AttributeSet set) {  
  27.         super(context,set);  
  28.           
  29.         resourceId=set.getAttributeResourceValue(namespace, "text", 0);  
  30.           
  31.          if(resourceId==0)  
  32.           string=set.getAttributeValue(null,"text");  
  33.          else  
  34.           string=this.getResources().getString(resourceId);  
  35.     
  36.         wm=(WindowManager)context.getSystemService(Context.WINDOW_SERVICE);  
  37.         /* 构建对象 */  
  38.         m_iTextHeight=2000;  
  39.   mPaint = new Paint();  
  40.   mPaint.setColor(Color.RED);  
  41.   mPaint.setStrokeWidth(40);  
  42.   mPaint.setTextSize(20);  
  43.     
  44.     
  45.   int m_iTextWidth=wm.getDefaultDisplay().getWidth();  
  46.   FontMetrics fm = mPaint.getFontMetrics();  
  47.     
  48.   int m_iFontHeight = (int) Math.ceil(fm.descent - fm.top) + 4;  
  49.   int line=0;  
  50.   int istart=0;  
  51.   int w=0;  
  52.   for (int i = 0; i < string.length(); i++)  
  53.   {  
  54.    char ch = string.charAt(i);  
  55.    float[] widths = new float[1];  
  56.    String srt = String.valueOf(ch);  
  57.    mPaint.getTextWidths(srt, widths);  
  58.    if (ch == '\n')  
  59.    {  
  60.     line++;  
  61.     istart = i + 1;  
  62.     w = 0;  
  63.    }  
  64.    else  
  65.    {  
  66.     w += (int) (Math.ceil(widths[0]));  
  67.     if (w > m_iTextWidth)  
  68.     {  
  69.      line++;  
  70.      istart = i;  
  71.      i--;  
  72.      w = 0;  
  73.     }  
  74.     else  
  75.     {  
  76.      if (i == (string.length() - 1))  
  77.      {  
  78.       line++;  
  79.      }  
  80.     }  
  81.    }  
  82.   }  
  83.   m_iTextHeight=(line+2)*m_iFontHeight+2;  
  84.   //用反射机制得到     m_iTextHeight  值  
  85.   
  86.     
  87. /*  实例化TextUtil  
  88.   mTextUtil = new TextUtil(string,5,25,wm.getDefaultDisplay().getWidth(),this.getHeight(),0x0,0xffffff,255,15); 
  89.    
  90.    初始化TextUtil  
  91.   mTextUtil.InitText(string,5,25,wm.getDefaultDisplay().getWidth(),wm.getDefaultDisplay().getHeight(),0x0,0xffffff,255,15);*/  
  92.     }  
  93.        
  94.       
  95.       
  96.       
  97.     @Override  
  98.     protected void onDraw(Canvas canvas) {  
  99.          
  100.        super.onDraw(canvas);  
  101.        /* 设置背景颜色 */  
  102.     canvas.drawColor(Color.BLACK);  
  103.       
  104.     mPaint.setAntiAlias(true);  
  105.     
  106.      char ch;  
  107.   int w = 0;  
  108.   int istart = 0;  
  109.   int m_iFontHeight;  
  110.   int m_iRealLine=0;  
  111.   int x=2;  
  112.   int y=60;  
  113.   Vector m_String=new Vector();  
  114.   int m_iTextWidth=wm.getDefaultDisplay().getWidth();  
  115.   FontMetrics fm = mPaint.getFontMetrics();  
  116.     
  117.   m_iFontHeight = (int) Math.ceil(fm.descent - fm.top) + 4;  
  118.   //m_ipageLineNum = m_iTextHeight / m_iFontHeight;  
  119.   for (int i = 0; i < string.length(); i++)  
  120.   {  
  121.    ch = string.charAt(i);  
  122.    float[] widths = new float[1];  
  123.    String srt = String.valueOf(ch);  
  124.    mPaint.getTextWidths(srt, widths);  
  125.    if (ch == '\n')  
  126.    {  
  127.     m_iRealLine++;  
  128.     m_String.addElement(string.substring(istart, i));  
  129.     istart = i + 1;  
  130.     w = 0;  
  131.    }  
  132.    else  
  133.    {  
  134.     w += (int) (Math.ceil(widths[0]));  
  135.     if (w > m_iTextWidth)  
  136.     {  
  137.      m_iRealLine++;  
  138.      m_String.addElement(string.substring(istart, i));  
  139.      istart = i;  
  140.      i--;  
  141.      w = 0;  
  142.     }  
  143.     else  
  144.     {  
  145.      if (i == (string.length() - 1))  
  146.      {  
  147.       m_iRealLine++;  
  148.       m_String.addElement(string.substring(istart, string.length()));  
  149.      }  
  150.     }  
  151.    }  
  152.   }  
  153.   m_iTextHeight=m_iRealLine*m_iFontHeight+2;  
  154.   System.out.println("m_iTextHeight----->"+m_iTextHeight);  
  155.   canvas.setViewport(m_iTextWidth, m_iTextWidth);  
  156.   for (int i = 0, j = 0; i < m_iRealLine; i++, j++)  
  157.   {  
  158.    canvas.drawText((String) (m_String.elementAt(i)), x,  y+m_iFontHeight * j, mPaint);  
  159.   }  
  160.     }    
  161.      
  162.       
  163.     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {    
  164.        
  165.      int measuredHeight = measureHeight(heightMeasureSpec);    
  166.          
  167.      int measuredWidth = measureWidth(widthMeasureSpec);    
  168.          
  169.       this.setMeasuredDimension(measuredWidth, measuredHeight);  
  170.        this.setLayoutParams(new LinearLayout.LayoutParams(measuredWidth,measuredHeight));  
  171.        super.onMeasure(widthMeasureSpec, heightMeasureSpec);  
  172.      }    
  173.          
  174.           
  175.          
  176.      private int measureHeight(int measureSpec) {    
  177.          
  178.      int specMode = MeasureSpec.getMode(measureSpec);    
  179.          
  180.      int specSize = MeasureSpec.getSize(measureSpec);    
  181.          
  182.           
  183.          
  184.      // Default size if no limits are specified.    
  185.          
  186.      int result = m_iTextHeight;    
  187.          
  188.      if (specMode == MeasureSpec.AT_MOST)     
  189.          
  190.      {    
  191.          
  192.      // Calculate the ideal size of your    
  193.          
  194.      // control within this maximum size.    
  195.          
  196.      // If your control fills the available    
  197.          
  198.      // space return the outer bound.    
  199.          
  200.      result = specSize;    
  201.          
  202.      }     
  203.          
  204.      else if (specMode == MeasureSpec.EXACTLY)     
  205.          
  206.      {    
  207.          
  208.      // If your control can fit within these bounds return that value.    
  209.          
  210.      result = specSize;    
  211.          
  212.      }    
  213.          
  214.      return result;    
  215.          
  216.      }    
  217.          
  218.           
  219.          
  220.      private int measureWidth(int measureSpec) {    
  221.          
  222.      int specMode = MeasureSpec.getMode(measureSpec);    
  223.          
  224.      int specSize = MeasureSpec.getSize(measureSpec);    
  225.          
  226.           
  227.          
  228.      // Default size if no limits are specified.    
  229.          
  230.      int result = 500;    
  231.          
  232.      if (specMode == MeasureSpec.AT_MOST)    
  233.         
  234.      {    
  235.          
  236.      // Calculate the ideal size of your control    
  237.          
  238.      // within this maximum size.     
  239.          
  240.      // If your control fills the available space    
  241.          
  242.      // return the outer bound.    
  243.          
  244.      result = specSize;    
  245.         
  246.      }     
  247.          
  248.      else if (specMode == MeasureSpec.EXACTLY)     
  249.          
  250.      {    
  251.          
  252.      // If your control can fit within these bounds return that value.    
  253.          
  254.      result = specSize;    
  255.          
  256.      }    
  257.          
  258.      return result;    
  259.          
  260.      }  
  261. }  


TextView 垂直自动滚动
http://www.cnblogs.com/vaiyanzi/archive/2011/12/06/2277791.html

在TextView中自定义链接
http://handroid.diandian.com/post/2011-09-11/4961075

实现TextView中文字链接的方式
http://aichixihongshi.iteye.com/blog/1197726

极简JAVA学习营第五期(报名以后加助教微信:eduxy-1)

01-19
想学好JAVA必须要报两万的培训班吗? 【课程背景】 JAVA是市场份额最大的编程语言,每天各大招聘网站上都会有数万个JAVA开发工程师的在招岗位,但是JAVA的技术体系庞大复杂,要想扎实掌握JAVA不是一件容易的事,线上学习相比线下两万起的高昂费用便宜了很多,而且具备学习时间灵活的优势,但是线上学习的劣势也很明显,没有线下那种学习氛围,碰到问题没法解决,在家学习很容易偷懒,极简JAVA学习营充分考虑到这些问题,通过每日实战编程练习,分队pk,助教答疑,作业点评,作业讲解,项目答辩等诸多环节充分激发你的学习热情,解决你学习中碰到的问题,让你花十分之一的钱学到JAVA的精髓,开启你的人生逆袭之路。 【专项的贴心服务】 1. 学练结合:定期布置视频任务和编程实战练习:通过每天的视频任务统一大家的进度,以便同学更好的交流,针对每天的任务会有相应的编程实战练习,通过练习内化知识。 2. 分队PK:将就业营的同学分成几队,通过作业统计表统计每队提交作业情况进行PK,激发你的学习动力。 3. 助教讲师答疑:碰到任何问题,发到群里,助教和讲师十分钟内帮你解决问题,扫清学习中的障碍。 4. 助教点评讲解作业:你每天提交作业都会有助教进行点评,让你知道有什么问题怎么解决,每三天一次视频讲解作业,互动解答问题 5. 项目答辩:每个阶段学完会有项目答辩,通过做项目巩固前一阶段的知识点,锻炼编码能力。 【往期训练营学习展示】 【套餐内容简介】 本套课以市场就业和职位需求为核心,从JAVA入门到多领域实战,设计出学习路线,共分为二十大模块,分别是:JAVA面向对象、Object类与常用API、集合框架、IO流、反射注解、多线程与网络编程、Object类与常用API等等。 同时采用理论讲解加实战演练的方式,既能让学员听懂听明白达到理解透彻,又能够在一个个真实实战案例中,让学员掌握真正有用的开发技能,从而进阶 JAVA 工程师! 套餐中一共包含21门JAVA程,助你从零进阶JAVA工程师! 阶段一:JAVA基础 课程1:《极简JAVA学习营开营篇》 课程2:《极简JAVA:JAVA面向对象》 课程3:《极简JAVA:Object类与常用API》 课程4:《极简JAVA:集合框架》 课程5:《极简JAVA:IO流》 课程6:《极简JAVA:反射注解》 课程7:《极简JAVA:多线程与网络编程》 阶段二:数据库入门 课程8:《极简JAVA:MySql数据库》 课程9:《极简JAVA:JDBC与连接池》 阶段三:JAVA WEB 课程10:《极简JAVA:HTML5与CSS3》 课程11:《极简JAVA:极简JAVA十一:Javascript与Jquery》 课程12:《极简JAVA:BootStrap》 课程13:《极简JAVA:JAVA Web》 阶段四:框架实战 课程14:《极简JAVA:Mavean入门》 课程15:《极简JAVA:MyBatis框架》 课程16:《极简JAVA:Spring框架》 课程17:《极简JAVA:Spring Mvc》 课程18:《极简JAVA:Oracle数据库》 课程19:《极简JAVA:Git入门》 课程20:《极简JAVA:Linux入门》 课程21:《极简JAVA:SpringBoot》 【课程特色】 1、易理解:讲师思路清晰、节奏明确、从易到难讲解透彻明白; 2、知识全:知识全面系统,从JAVA入门到实战,由易到难,让你彻底掌握JAVA开发; 3、重实战:涵盖大量实战项目,锻炼你的动手实操能力,面向工作编程; 【面向人群】 1、在校计算机专业或者对软件编程感兴趣的学生; 2、零基础想学JAVA却不知道从何入手 3、囊中羞涩,面对两万起的JAVA培训班不忍直视 4、在职没有每天大块的时间专门学习JAVA 这么细致的服务,这么好的氛围,这样的学习效果,你还等什么?赶紧报名吧,抓紧抢位,本期只招100人,错过只有等时间待定的下一期了
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值