Android textview 中文居中

项目中需要显示大段的中文news,用TextView 实现,英文的都好搞定,到了中文就麻烦了,文中有 »,«,‚,¡ 书名号,逗号,句号,感叹号 等特殊符号的情况下,在换行的地方会出现 或多或少一个半个字的情况.

搜索了下,主要有一下两种做法:

一: TextView 设置 gravity

  

 1 TextView tView = new TextView(mContext);                    tView.setText("\u3000\u3000"+pBean.getContent());
 2 //                      首行缩进两个中文   从bean 中获取要显示的content 
 3 tView.setTextSize(16);
 4                     tView.setTextColor(getResources().getColor(R.color.base_content));
 5                     tView.setTypeface(Typeface.DEFAULT,Typeface.NORMAL);
 6 //设置字体
 7 tView.setLineSpacing(10, 1.1f);
 8 //设置行间距
 9 //tView.setPadding(left, top, right, bottom);
10 //tView.setGravity(Gravity.LEFT);   //中文 左对齐
11                     //tView.setGravity(Gravity.CENTER_HORIZONTAL); 
12  //中文 居中对齐 不足一行的 居中显示 (不符合设计的要求....)   
13 tView.setGravity(Gravity.Right|Gravity.Left);
14 // 偶然试了试这个 发现 效果还不错,差不多符合设计需求

  需要注意的地方:TextView  有的说设置layout_gravity 属性 这个不能和gravity 搞混了

  textview.setGravity(Gravity.Center);这是设置textview 中显示的文字居中;xml 中的 android:gravity="center";

  layout_gravity属性 是跟 LayoutParams 有关的.就是 该 textview 父控件中textview 的显示方式,

  假如textView 外面有一层LinearLayout ,  LinearLayout layout = new LinearLayout(mContext);   

LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);

llp.gravity = Gravity.CENTER;

layout.addView(textView, llp);//加入 layout 的textview 居中显示.

  假如textView外面是一层RelativeLayout :

  

1 RelativeLayout rlayout = new RelativeLayout(mContext);
2 RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
3                     lp.addRule(RelativeLayout.ALIGN_PARENT_TOP);// 靠parent top
4                     lp.addRule(RelativeLayout.CENTER_HORIZONTAL);//水平居中
5 rlayout.addView(tView,lp);
6 // RelativeLayout 中没有 layout_gravity 属性.

二 , 使用webView 显示(个人试过,感觉不中,http://stackoverflow.com/questions/1292575/android-textview-justify-text

http://www.seal.io/2010/12/only-way-how-to-align-text-in-block-in.html

可以详细看看相关讨论)

For html formating you don't need to call the Webkit, you could use Html.fromHtml(text) to do the job.

可以不用weview,试过原理一样..效果一样.

1 WebView wView = new WebView(mContext);
2 String text = "<html><body>"
3          + "<p align=\"justify\">"                
4          + "\u3000\u3000"+pBean.getContent()
5          + "</p> "
6          + "</body></html>";
7                         wView.loadDataWithBaseURL(null,text, "text/html", "utf-8",null);
//wView.getSettings().setDefaultTextEncodingName("utf-8"); //set encoding mode.
8 //wView.loadDataWith(); //会产生中文乱码....

 综上所述:中文还是方法一 靠谱...

如果你有更好的实现,请分享下...感激涕零.

 

 

posted @ 2013-04-09 00:23  hardiman  阅读(2192)  评论(0编辑  收藏  举报