有人能成功实现textview文字两端对齐齐吗

17:17 提问
Android阅读器如何实现文字两端对齐
Android阅读器如何实现文字两端对齐,达到类似ireader一样的效果
按赞数排序
在android中的webview中,可以对文本内容进行对齐,具体方法如下:
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String htmlText = " %s ";
String myData = "Hello World! This tutorial is to show demo of displaying text with justify alignment in WebView.";
WebView webView = (WebView) findViewById(R.id.webView1);
webView.loadData(String.format(htmlText, myData), "text/html", "utf-8");
方案二:使用textView改造:
MainActivity中:
Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics dm = new DisplayMetrics();
display.getMetrics(dm);
width = dm.widthP
//根据屏幕调整文字大小
mArticleTextView.setLineSpacing(0f, 1.5f);
mArticleTextView.setTextSize(8*(float)width/320f);
//设置TextView
mArticleTextView.setText("TextView需要显示的文本内容");
TextJustification.justify(mArticleTextView,mArticleTextView.getWidth());首先设置TextView的显示字体大小和文本内容,这里设置字体大小根据屏幕尺寸调整。然后调用自定义的类Textustification中的justify方法来实现TextView的分散对齐,两个参数分别是TextView控件以及控件的宽度。
自定义的类TextJustification内容如下:
import java.util.ArrayL
import android.graphics.P
import android.text.TextU
import android.widget.TextV
import android.widget.TextView.BufferT
public class TextJustification {
public static void justify(TextView textView, float contentWidth) {
String text=textView.getText().toString();
String tempT
String resultText = "";
Paint paint=textView.getPaint();
ArrayList&String& paraList = new ArrayList&String&();
paraList = paraBreak(text);
for(int i = 0; i&paraList.size(); i++) {
ArrayList&String& lineList=lineBreak(paraList.get(i).trim(),paint,contentWidth);
tempText = TextUtils.join(" ", lineList).replaceFirst("\\s*", "");
resultText += tempText.replaceFirst("\\s*", "") + "\n";
textView.setText(resultText);
//分开每个段落
public static ArrayList&String& paraBreak(String text, TextView textview) {
ArrayList&String& paraList = new ArrayList&String&();
String[] paraArray = text.split("\\n+");
for(String para:paraArray) {
paraList.add(para);
return paraL
//分开每一行,使每一行填入最多的单词数
private static ArrayList&String& lineBreak(String text, Paint paint, float contentWidth){
String [] wordArray=text.split("\\s");
ArrayList&String& lineList = new ArrayList&String&();
String myText="";
for(String word:wordArray){
if(paint.measureText(myText+" "+word)&=contentWidth)
myText=myText+" "+
int totalSpacesToInsert=(int)((contentWidth-paint.measureText(myText))/paint.measureText(" "));
lineList.add(justifyLine(myText,totalSpacesToInsert));
lineList.add(myText);
return lineL
//已填入最多单词数的一行,插入对应的空格数直到该行满
private static String justifyLine(String text,int totalSpacesToInsert){
String[] wordArray=text.split("\\s");
String toAppend=" ";
while((totalSpacesToInsert)&=(wordArray.length-1)){
toAppend=toAppend+" ";
totalSpacesToInsert=totalSpacesToInsert-(wordArray.length-1);
String justifiedText="";
for(String word:wordArray){
if(i&totalSpacesToInsert)
justifiedText=justifiedText+word+" "+toA
justifiedText=justifiedText+word+toA
return justifiedT
}这个类完成了TextView内部文字的排版工作,主要分3个步骤:
1、将一篇文章按段落分成若干段(如果只有一段可以略去该步骤);
2、将每一段的文字拆分成各个单词,然后根据控件长度确定每一行最多可以填入的单词数,并且算出排满该行还需要填入几个空格。
3、填入空格。
关于文本两端对齐的问题,可以参考如下:
To justify text in android I used WebView
setContentView(R.layout.main);
WebView view = new WebView(this);
view.setVerticalScrollBarEnabled(false);
((LinearLayout)findViewById(R.id.inset_web_view)).addView(view);
view.loadData(getString(R.string.hello), "text/html", "utf-8");
Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Nunc pellentesque, urna
nec hendrerit pellentesque, risus massa
I can't yet upload images to prove it but "it works for me".
主要思路:使用WebView来加载,用css来实现两端对齐。
注意:webview要设置成透明的,还有加载时使用
myWebView.loadDataWithBaseURL("", getString(R.string.desc), "text/html", "utf-8",""); 这个方法
// myWebView.loadData(getString(R.string.desc), "text/html", "utf-8");
// 这个方法遇到一些字符中会乱码
可参考以下链接
12796关注|1190收录
其他相似问题
相关参考资料css中怎么实现列表两端对齐(inline-block + justify)-经典案例-Css教程-壹聚教程网css中怎么实现列表两端对齐(inline-block + justify)
如果我们要实现两端对齐一般的办法是实现不了的,这里我们借助于inline-block + justify来实现列表两端对齐。
text-justify版本:IE5+专有属性 继承性:无
1.text-justify : auto |inter- | newspaper | distribute | distribute-all-lines | inter-ideograph 参数:
auto :  允许浏览器用户代理确定使用的两端对齐法则
inter-word :  通过增加字之间的空格对齐文本。该行为是对齐所有文本行最快的方法。它的两端对齐行为对段落的最后一行无效
newspaper :  通过增加或减少字或字母之间的空格对齐文本。是用于拉丁文字母表两端对齐的最精确格式
distribute :  处理空格很像newspaper,适用于东亚文档。尤其是泰国
distribute-all-lines :  两端对齐行的方式与distribute相同,也同样不包含两段对齐段落的最后一行。适用于表意字文档
inter-ideograph :  为表意字文本提供完全两端对齐。他增加或减少表意字和词间的空格
设置或检索对象内文本的对齐方式。
对应的脚本特性为textJustify。
适用条件:
1、一行的li间距宽度 小于两个li的宽度之和;
2、li个数刚好满行
条件1大部分都能满足的,所以主要就是刚好满行的情况。
相关代码片段
&&& text-align:
&&& text-justify:
&&& font-size:0;
&&& letter-spacing:-4/*解决inline-block间隙表现不一致 bug*/
&&& display:inline-
&&& *display:
&&& *zoom:1;
&&& font-size:12
&&& letter-spacing:0;
&&& vertical-align:
ul li.justify_fix {
&&& width:100%;
&&& height:0;
&&& line-height:0;
&&& font-size:0;
&&& overflow:
&&& margin:0;
&&& padding:0;
html结构如下
&div class=&container&&
&&&&&&& &li&&/li&
&&&&&&& &li&&/li&
&&&&&&& &li&&/li&
&&&&&&& &li&&/li&
&&&&&&& &li&&/li&
&&&&&&& &li&&/li&
&&&&&&& &li&&/li&
&&&&&&& &li&&/li&
&&&&&&& &li&&/li&
&&&&&&& &li&&/li&
&&&&&&& &li&&/li&
&&&&&&& &li&&/li&
&&&&&&& &!--& 必须空出一个li 来fix bug --&
&&&&&&& &li class=&justify_fix&&&/li&
上一页: &&&&&下一页:相关内容&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!}

我要回帖

更多关于 word两端对齐 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信