`
dengbaoleng
  • 浏览: 1133090 次
文章分类
社区版块
存档分类
最新评论

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

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

为TextView添加阴影
values/styles
Xml代码 收藏代码
  1. <stylename="AudioFileInfoOverlayText">
  2. <itemname="android:paddingLeft">4px</item>
  3. <itemname="android:paddingBottom">4px</item>
  4. <itemname="android:textColor">#ffffffff</item>
  5. <itemname="android:textSize">12sp</item>
  6. <itemname="android:shadowColor">#ff00ff00</item>
  7. <itemname="android:shadowDx">5</item>
  8. <itemname="android:shadowDy">3</item>
  9. <itemname="android:shadowRadius">6</item>
  10. </style>
  11. <TextViewandroid:id="@+id/info"
  12. android:layout_width="fill_parent"
  13. android:layout_height="wrap_content"
  14. style="@style/AudioFileInfoOverlayText"
  15. android:text="aaaa"
  16. 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. <TextViewandroid: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="AutomaticTargetMode:usingexistingemulatorrunningcompatibleAVD.Applicationalreadydeployed.Noneedtoreinstall.Applicationalreadydeployed.Noneedtoreinstall.Applicationalreadydeployed.Noneedtoreinstall"
  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. privateEditTextmEditText;
  2. mEditText=(EditText)findViewById(R.id.mEditText);
  3. /**限制字数*/
  4. mEditText.addTextChangedListener(newTextWatcher(){
  5. privateCharSequencetemp;
  6. privateintselectionStart;
  7. privateintselectionEnd;
  8. @Override
  9. publicvoidbeforeTextChanged(CharSequences,intstart,intcount,
  10. intafter){
  11. temp=s;
  12. }
  13. @Override
  14. publicvoidonTextChanged(CharSequences,intstart,intbefore,
  15. intcount){
  16. }
  17. @Override
  18. publicvoidafterTextChanged(Editables){
  19. selectionStart=mEditText.getSelectionStart();
  20. selectionEnd=mEditText.getSelectionEnd();
  21. Log.d(TAG,""+selectionStart);
  22. if(temp.length()>8){
  23. Toast.makeText(MAUpdateAty.this,"字数不能超过8个",Toast.LENGTH_SHORT).show();
  24. s.delete(selectionStart-1,selectionEnd);
  25. inttempSelection=selectionStart;
  26. mEditText.setText(s);
  27. mEditText.setSelection(tempSelection);
  28. }
  29. Log.d(TAG,""+selectionEnd);
  30. }
  31. });

或者试试这个:
Java代码 收藏代码
  1. privateTextWatchermTextWatcher=newTextWatcher(){
  2. ToastmToast=null;
  3. publicvoidbeforeTextChanged(CharSequences,intstart,
  4. intcount,intafter){
  5. }
  6. publicvoidonTextChanged(CharSequences,intstart,
  7. intbefore,intcount){
  8. }
  9. publicvoidafterTextChanged(Editables){
  10. intnSelStart=0;
  11. intnSelEnd=0;
  12. booleannOverMaxLength=false;
  13. nSelStart=mEditText.getSelectionStart();
  14. nSelEnd=mEditText.getSelectionEnd();
  15. nOverMaxLength=(s.length()>Constants.MAX_TEXT_INPUT_LENGTH)?true:false;
  16. if(nOverMaxLength){
  17. if(null==mToast){
  18. mToast=Toast.makeText(mContext,
  19. R.string.IDS_MSG_TEXT_OVER_MAXLENGTH,
  20. Toast.LENGTH_SHORT);
  21. }
  22. mToast.show();
  23. s.delete(nSelStart-1,nSelEnd);
  24. mEditText.setTextKeepState(s);//请读者注意这一行,保持光标原先的位置,而mEditText.setText(s)会让光标跑到最前面,就算是再加mEditText.setSelection(nSelStart)也不起作用
  25. }
  26. }
  27. };

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

一 . 设置焦点
如果在单击某个 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. importandroid.app.Activity;
  2. importandroid.os.Bundle;
  3. importandroid.text.InputFilter;
  4. importandroid.text.Spanned;
  5. importandroid.util.Log;
  6. importandroid.widget.EditText;
  7. importandroid.widget.TextView;
  8. importandroid.widget.Toast;
  9. publicclassMyFilterTestextendsActivity{
  10. /**Calledwhentheactivityisfirstcreated.*/
  11. TextViewmyText;
  12. EditTextmyEdit;
  13. @Override
  14. publicvoidonCreate(BundlesavedInstanceState){
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.main);
  17. finalStringstr="Hello,Android!";
  18. myText=(TextView)findViewById(R.id.myText);
  19. myText.setText(str);
  20. myEdit=(EditText)findViewById(R.id.myEdit);
  21. myEdit.setFilters(newInputFilter[]{newMyInputFilter(str)});
  22. }
  23. publicclassMyInputFilterimplementsInputFilter{
  24. Stringstr=null;
  25. publicMyInputFilter(Stringstr){
  26. this.str=str;
  27. }
  28. @Override
  29. publicCharSequencefilter(CharSequencesrc,intstart,intend,
  30. Spanneddest,intdstart,intdend){
  31. //TODOAuto-generatedmethodstub
  32. Stringch=null;
  33. StringTAG="Filter";
  34. Log.w(TAG,"src:"+src+";start:"+start+";end:"+end);
  35. Log.w(TAG,"dest:"+dest+";dstart:"+dstart+";dend:"+dend);
  36. if(dest.length()<str.length()){
  37. ch=str.substring(dstart+start,dstart+end);
  38. }else{
  39. returndest.subSequence(dstart,dend);
  40. }
  41. if(ch.equals(src)){
  42. Toast.makeText(MyFilterTest.this,"match",Toast.LENGTH_SHORT).show();
  43. returndest.subSequence(dstart,dend)+src.toString();
  44. }else{
  45. Toast.makeText(MyFilterTest.this,"mismatch",Toast.LENGTH_SHORT).show();
  46. returndest.subSequence(dstart,dend)+"×";
  47. }
  48. }
  49. }
  50. }

参见其他:
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("notchecked");
  7. //隐藏密码
  8. password_edit.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_PASSWORD);
  9. }


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


阻止EditText一开始就获得焦点
程序在加载视图时总是会把输入的焦点自动移动到第一个输入框(这样导致在某些机器上程序一启动就弹出输入法框,很是不爽),如何让他不获得焦点呢?
EditText.setSelected(false);
上述命令是不行的。
clearFocus() 才是可以的。
如果你是用AutoCompleteTextView
Xml代码 收藏代码
  1. <!--DummyitemtopreventAutoCompleteTextViewfromreceivingfocus-->
  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. <!--:nextFocusUpand:nextFocusLefthavebeensettotheidofthiscomponent
  7. topreventthedummyfromreceivingfocusagain-->
  8. <AutoCompleteTextViewandroid: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. EditTextet=(EditText)findViewById(R.id.edit);
  2. et.setInputType(InputType.TYPE_DATETIME_VARIATION_NORMAL);


tv.setCompoundDrawables()不起作用?
Java代码 收藏代码
  1. DrawableleftDrawable;
  2. leftDrawable=getResources().getDrawable(R.drawable.left_drawable);
  3. //usersetCompoundDrawables()method,youmustcallDrawable.setBounds()method!OrtheImagecan'tshow.
  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. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns: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. packagecom.flysnow;
  2. importandroid.app.Activity;
  3. importandroid.os.Bundle;
  4. importandroid.text.Editable;
  5. importandroid.text.Selection;
  6. importandroid.view.KeyEvent;
  7. importandroid.view.View;
  8. importandroid.view.View.OnClickListener;
  9. importandroid.widget.Button;
  10. importandroid.widget.EditText;
  11. importandroid.widget.TextView;
  12. importandroid.widget.Toast;
  13. importandroid.widget.TextView.OnEditorActionListener;
  14. /**
  15. *EditText演示
  16. *@author飞雪无情
  17. *@since2010-11-29
  18. */
  19. publicclassHelloEditTextextendsActivity{
  20. /**Calledwhentheactivityisfirstcreated.*/
  21. @Override
  22. publicvoidonCreate(BundlesavedInstanceState){
  23. super.onCreate(savedInstanceState);
  24. setContentView(R.layout.main);
  25. finalEditTexteditText=(EditText)findViewById(R.id.edit_text);
  26. //监听回车键
  27. editText.setOnEditorActionListener(newOnEditorActionListener(){
  28. @Override
  29. publicbooleanonEditorAction(TextViewv,intactionId,KeyEventevent){
  30. Toast.makeText(HelloEditText.this,String.valueOf(actionId),Toast.LENGTH_SHORT).show();
  31. returnfalse;
  32. }
  33. });
  34. //获取EditText文本
  35. ButtongetValue=(Button)findViewById(R.id.btn_get_value);
  36. getValue.setOnClickListener(newOnClickListener(){
  37. @Override
  38. publicvoidonClick(Viewv){
  39. Toast.makeText(HelloEditText.this,editText.getText().toString(),Toast.LENGTH_SHORT).show();
  40. }
  41. });
  42. //让EditText全选
  43. Buttonall=(Button)findViewById(R.id.btn_all);
  44. all.setOnClickListener(newOnClickListener(){
  45. @Override
  46. publicvoidonClick(Viewv){
  47. editText.selectAll();
  48. }
  49. });
  50. //从第2个字符开始选择EditText文本
  51. Buttonselect=(Button)findViewById(R.id.btn_select);
  52. select.setOnClickListener(newOnClickListener(){
  53. @Override
  54. publicvoidonClick(Viewv){
  55. Editableeditable=editText.getText();
  56. Selection.setSelection(editable,1,editable.length());
  57. }
  58. });
  59. //获取选中的文本
  60. ButtongetSelect=(Button)findViewById(R.id.btn_get_select);
  61. getSelect.setOnClickListener(newOnClickListener(){
  62. @Override
  63. publicvoidonClick(Viewv){
  64. intstart=editText.getSelectionStart();
  65. intend=editText.getSelectionEnd();
  66. CharSequenceselectText=editText.getText().subSequence(start,end);
  67. Toast.makeText(HelloEditText.this,selectText,Toast.LENGTH_SHORT).show();
  68. }
  69. });
  70. }
  71. /**
  72. *交换两个索引
  73. *@paramstart开始索引
  74. *@paramend结束索引
  75. */
  76. protectedvoidswitchIndex(intstart,intend){
  77. inttemp=start;
  78. start=end;
  79. end=temp;
  80. }
  81. }



自定义View控件解决android文字排版和换行的问题(转,尚未测试)
http://www.eoeandroid.com/thread-64055-1-1.html
Java代码 收藏代码
  1. importjava.util.Vector;
  2. importandroid.content.Context;
  3. importandroid.graphics.Canvas;
  4. importandroid.graphics.Color;
  5. importandroid.graphics.Paint;
  6. importandroid.graphics.Paint.FontMetrics;
  7. importandroid.util.AttributeSet;
  8. importandroid.view.View;
  9. importandroid.view.WindowManager;
  10. importandroid.widget.LinearLayout;
  11. importandroid.widget.TextView;
  12. publicclassMyViewextendsTextView{
  13. privatefinalStringnamespace="http://www.nearmobile.net";
  14. privateintresourceId=0;
  15. /*声明Paint对象*/
  16. privatePaintmPaint=null;
  17. /*声明TextUtil对象*/
  18. privateTextUtilmTextUtil=null;
  19. publicstaticintm_iTextHeight;
  20. privateWindowManagerwm=null;
  21. privateStringstring="";
  22. publicMyView(Contextcontext,AttributeSetset){
  23. super(context,set);
  24. resourceId=set.getAttributeResourceValue(namespace,"text",0);
  25. if(resourceId==0)
  26. string=set.getAttributeValue(null,"text");
  27. else
  28. string=this.getResources().getString(resourceId);
  29. wm=(WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
  30. /*构建对象*/
  31. m_iTextHeight=2000;
  32. mPaint=newPaint();
  33. mPaint.setColor(Color.RED);
  34. mPaint.setStrokeWidth(40);
  35. mPaint.setTextSize(20);
  36. intm_iTextWidth=wm.getDefaultDisplay().getWidth();
  37. FontMetricsfm=mPaint.getFontMetrics();
  38. intm_iFontHeight=(int)Math.ceil(fm.descent-fm.top)+4;
  39. intline=0;
  40. intistart=0;
  41. intw=0;
  42. for(inti=0;i<string.length();i++)
  43. {
  44. charch=string.charAt(i);
  45. float[]widths=newfloat[1];
  46. Stringsrt=String.valueOf(ch);
  47. mPaint.getTextWidths(srt,widths);
  48. if(ch=='\n')
  49. {
  50. line++;
  51. istart=i+1;
  52. w=0;
  53. }
  54. else
  55. {
  56. w+=(int)(Math.ceil(widths[0]));
  57. if(w>m_iTextWidth)
  58. {
  59. line++;
  60. istart=i;
  61. i--;
  62. w=0;
  63. }
  64. else
  65. {
  66. if(i==(string.length()-1))
  67. {
  68. line++;
  69. }
  70. }
  71. }
  72. }
  73. m_iTextHeight=(line+2)*m_iFontHeight+2;
  74. //用反射机制得到m_iTextHeight值
  75. /*实例化TextUtil
  76. mTextUtil=newTextUtil(string,5,25,wm.getDefaultDisplay().getWidth(),this.getHeight(),0x0,0xffffff,255,15);
  77. 初始化TextUtil
  78. mTextUtil.InitText(string,5,25,wm.getDefaultDisplay().getWidth(),wm.getDefaultDisplay().getHeight(),0x0,0xffffff,255,15);*/
  79. }
  80. @Override
  81. protectedvoidonDraw(Canvascanvas){
  82. super.onDraw(canvas);
  83. /*设置背景颜色*/
  84. canvas.drawColor(Color.BLACK);
  85. mPaint.setAntiAlias(true);
  86. charch;
  87. intw=0;
  88. intistart=0;
  89. intm_iFontHeight;
  90. intm_iRealLine=0;
  91. intx=2;
  92. inty=60;
  93. Vectorm_String=newVector();
  94. intm_iTextWidth=wm.getDefaultDisplay().getWidth();
  95. FontMetricsfm=mPaint.getFontMetrics();
  96. m_iFontHeight=(int)Math.ceil(fm.descent-fm.top)+4;
  97. //m_ipageLineNum=m_iTextHeight/m_iFontHeight;
  98. for(inti=0;i<string.length();i++)
  99. {
  100. ch=string.charAt(i);
  101. float[]widths=newfloat[1];
  102. Stringsrt=String.valueOf(ch);
  103. mPaint.getTextWidths(srt,widths);
  104. if(ch=='\n')
  105. {
  106. m_iRealLine++;
  107. m_String.addElement(string.substring(istart,i));
  108. istart=i+1;
  109. w=0;
  110. }
  111. else
  112. {
  113. w+=(int)(Math.ceil(widths[0]));
  114. if(w>m_iTextWidth)
  115. {
  116. m_iRealLine++;
  117. m_String.addElement(string.substring(istart,i));
  118. istart=i;
  119. i--;
  120. w=0;
  121. }
  122. else
  123. {
  124. if(i==(string.length()-1))
  125. {
  126. m_iRealLine++;
  127. m_String.addElement(string.substring(istart,string.length()));
  128. }
  129. }
  130. }
  131. }
  132. m_iTextHeight=m_iRealLine*m_iFontHeight+2;
  133. System.out.println("m_iTextHeight----->"+m_iTextHeight);
  134. canvas.setViewport(m_iTextWidth,m_iTextWidth);
  135. for(inti=0,j=0;i<m_iRealLine;i++,j++)
  136. {
  137. canvas.drawText((String)(m_String.elementAt(i)),x,y+m_iFontHeight*j,mPaint);
  138. }
  139. }
  140. protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){
  141. intmeasuredHeight=measureHeight(heightMeasureSpec);
  142. intmeasuredWidth=measureWidth(widthMeasureSpec);
  143. this.setMeasuredDimension(measuredWidth,measuredHeight);
  144. this.setLayoutParams(newLinearLayout.LayoutParams(measuredWidth,measuredHeight));
  145. super.onMeasure(widthMeasureSpec,heightMeasureSpec);
  146. }
  147. privateintmeasureHeight(intmeasureSpec){
  148. intspecMode=MeasureSpec.getMode(measureSpec);
  149. intspecSize=MeasureSpec.getSize(measureSpec);
  150. //Defaultsizeifnolimitsarespecified.
  151. intresult=m_iTextHeight;
  152. if(specMode==MeasureSpec.AT_MOST)
  153. {
  154. //Calculatetheidealsizeofyour
  155. //controlwithinthismaximumsize.
  156. //Ifyourcontrolfillstheavailable
  157. //spacereturntheouterbound.
  158. result=specSize;
  159. }
  160. elseif(specMode==MeasureSpec.EXACTLY)
  161. {
  162. //Ifyourcontrolcanfitwithintheseboundsreturnthatvalue.
  163. result=specSize;
  164. }
  165. returnresult;
  166. }
  167. privateintmeasureWidth(intmeasureSpec){
  168. intspecMode=MeasureSpec.getMode(measureSpec);
  169. intspecSize=MeasureSpec.getSize(measureSpec);
  170. //Defaultsizeifnolimitsarespecified.
  171. intresult=500;
  172. if(specMode==MeasureSpec.AT_MOST)
  173. {
  174. //Calculatetheidealsizeofyourcontrol
  175. //withinthismaximumsize.
  176. //Ifyourcontrolfillstheavailablespace
  177. //returntheouterbound.
  178. result=specSize;
  179. }
  180. elseif(specMode==MeasureSpec.EXACTLY)
  181. {
  182. //Ifyourcontrolcanfitwithintheseboundsreturnthatvalue.
  183. result=specSize;
  184. }
  185. returnresult;
  186. }
  187. }

  • 大小: 47.2 KB
  • 大小: 28.1 KB
  • 大小: 21.5 KB

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics