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(); //会产生中文乱码....
综上所述:中文还是方法一 靠谱...
如果你有更好的实现,请分享下...感激涕零.