现在的位置: 首页 > 综合 > 正文

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

2013年12月03日 ⁄ 综合 ⁄ 共 6225字 ⁄ 字号 评论关闭

Android TextView 自动换行问题 

关于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设置光标颜色 
android:textCursorDrawable="@null" 

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 
TextView中做文字按钮实现点击事件 
http://www.eoeandroid.com/thread-168290-1-1.html 

Android使用TextView实现无下划线超链接 
http://orgcent.com/android-textview-no-underline-hyperlink/ 

文本框实现搜索和清空效果 
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 );//底部加横线 

android:ellipsize = "end"    省略号在结尾 
android:ellipsize = "start"   省略号在开头 
android:ellipsize = "middle"     省略号在中间 
android:ellipsize = "marquee"  跑马灯 
android:singleline = "true" 
当然也可以用代码语句: 
tv.setEllipsize(TextUtils.TruncateAt.valueOf("END")); 
tv.setEllipsize(TextUtils.TruncateAt.valueOf("START")); 
tv.setEllipsize(TextUtils.TruncateAt.valueOf("MIDDLE")); 
tv.setEllipsize(TextUtils.TruncateAt.valueOf("MARQUEE")); 
tv.setSingleLine(true); 


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) {                        

抱歉!评论已关闭.