zoukankan      html  css  js  c++  java
  • 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(); //会产生中文乱码....

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

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

  • 相关阅读:
    js中的面向对象part2
    js中值类型和引用类型的区别
    js中三大引用类型
    js中的重点
    html和css区别
    面向对象part1
    null和undefined的区别
    前端面试题js篇
    行内元素和块级元素的区别
    学习网站
  • 原文地址:https://www.cnblogs.com/lavenderone/p/3009215.html
Copyright © 2011-2022 走看看