2条回答 默认 最新
- huge_tang 2015-02-04 07:52关注
在android中的webview中,可以对文本内容进行对齐,具体方法如下:
public class MainActivity extends Activity {@Override 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.widthPixels;
//根据屏幕调整文字大小
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.ArrayList;
import android.graphics.Paint;
import android.text.TextUtils;
import android.widget.TextView;
import android.widget.TextView.BufferType;public class TextJustification {
public static void justify(TextView textView, float contentWidth) { String text=textView.getText().toString(); String tempText; 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 paraList; } //分开每一行,使每一行填入最多的单词数 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+" "+word; else{ int totalSpacesToInsert=(int)((contentWidth-paint.measureText(myText))/paint.measureText(" ")); lineList.add(justifyLine(myText,totalSpacesToInsert)); myText=word; } } lineList.add(myText); return lineList; } //已填入最多单词数的一行,插入对应的空格数直到该行满 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); } int i=0; String justifiedText=""; for(String word:wordArray){ if(i<totalSpacesToInsert) justifiedText=justifiedText+word+" "+toAppend; else justifiedText=justifiedText+word+toAppend; i++; } return justifiedText; }
}这个类完成了TextView内部文字的排版工作,主要分3个步骤:
1、将一篇文章按段落分成若干段(如果只有一段可以略去该步骤);2、将每一段的文字拆分成各个单词,然后根据控件长度确定每一行最多可以填入的单词数,并且算出排满该行还需要填入几个空格。
3、填入空格。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 删除虚拟显示器驱动 删除所有 Xorg 配置文件 删除显示器缓存文件 重启系统 可是依旧无法退出虚拟显示器
- ¥15 vscode程序一直报同样的错,如何解决?
- ¥15 关于使用unity中遇到的问题
- ¥15 开放世界如何写线性关卡的用例(类似原神)
- ¥15 关于并联谐振电磁感应加热
- ¥60 请查询全国几个煤炭大省近十年的煤炭铁路及公路的货物周转量
- ¥15 请帮我看看我这道c语言题到底漏了哪种情况吧!
- ¥66 如何制作支付宝扫码跳转到发红包界面
- ¥15 pnpm 下载element-plus
- ¥15 解决编写PyDracula时遇到的问题