您的位置:首页 > 移动开发

[Android]使用webview模拟textview显示两端对齐

2015-09-08 21:30 453 查看
先来效果吧,有图有真相



在android中,使用默认TextView显示文本的时候,总会难免出现上图下部的难堪情况,这个是由于源码判断固定如此,API并未提供方法像上图上部那样显示文本,于是,代码狗的辛苦生活又再苦逼一些了。。。

我百度了一阵,一般是两种方法,一个是自定义TextView,根据文字的大小和屏幕大小的判断当添加文字到一定程度时添加换行字符,但是这样做效果不佳(可以是我找的不是很好吧),总会出现卡顿等问题,而另外一种方法,就是本文着重讲的方法,就是使用webview模拟textview显示两端对齐。

为什么使用webview?假如我们仔细查看的话,会发现网页的文本显示是不会出现我们所看的那种难堪效果,那是因为在css中有着text-align:justify;属性,该属性可以使用两端对齐的效果,而我们需要使用css的属性,就需要使用到webview了。

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.xiaoyan.testtestview.MainActivity" >

    <WebView
        android:id="@+id/mywebview"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</RelativeLayout>


MainActivity.class

package com.xiaoyan.testtestview;

import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;

public class MainActivity extends Activity {

	private WebView myWebView;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		// 文字排版
		myWebView = (WebView) findViewById(R.id.mywebview);
		// 设置webview不允许竖直滚动
		myWebView.setVerticalScrollBarEnabled(false);

		myWebView.loadDataWithBaseURL("", getString(R.string.android_test),
				"text/html", "utf-8", "");
	}

}
以上代码就没有什么好说的,毕竟就那几句。

string.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">TestTestView</string>
    <string name="hello_world">Hello world!</string>
    <string name="action_settings">Settings</string>
    <string name="android_test">
<![CDATA[
<html>
 <head></head>
 <body style="background-color:#F5F5F5;">
	<p style="text-align:justify;font-size:18px;color:#323232;text-indent:2em;">
	Android一词的本义指“机器人”,同时也是Google于2007年11月5日 宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成。
	</p>
	  </body>
</html>
]]>
    </string>

</resources>
这里重点就是android_test这个键值对了,里面的内容就是一个网页的内容,background-color:#F5F5F5;设置背景颜色,text-align:justify;设置两端对齐,font-size:18px;设置文字大小,color:#323232;字体颜色,text-indent:2em;开头空两个字符。

以上就是全部代码了,可以实现相应的效果,但是,假如每个文本都需要这样在string.xml里面如此添加数据,那将会是其变得非常巨大,让人看起来很难受,我尝试将其封装为以下代码:

package com.xiaoyan.testtextview;

import android.webkit.WebView;

/**
 * 
 * @author xiejinxiong
 * 
 *         对文字进行修改,从而以网页的表示方式显示
 * 
 *         默认:字体:16px,字体颜色:#323232,背景颜色:#FFFFFF
 */
public class WebFont {

	public static void showWebFont(WebView myWebView, String content) {

		showWebFont(myWebView, content, 16);

	}

	public static void showWebFont(WebView myWebView, String content,
			int fontSize) {

		showWebFont(myWebView, content, fontSize, "#323232");

	}

	public static void showWebFont(WebView myWebView, String content,
			int fontSize, String fontColor) {

		showWebFont(myWebView, content, fontSize, fontColor, "#FFFFFF");

	}

	/**
	 * 显示文字
	 * 
	 * @param myWebView
	 *            显示文字的webview
	 * @param content
	 *            显示的文字
	 * @param fontSize
	 *            文字大小
	 * @param fontColor
	 *            文字颜色
	 * @param backgroundColor
	 *            显示文字的背景
	 */
	public static void showWebFont(WebView myWebView, String content,
			int fontSize, String fontColor, String backgroundColor) {

		// 设置webview不允许竖直滚动
		myWebView.setVerticalScrollBarEnabled(false);

		myWebView.loadDataWithBaseURL("",
				"<![CDATA[<html> <head></head> <body style=\"background-color:"
						+ backgroundColor + ";text-align:justify;font-size:"
						+ fontSize + "px;color:" + fontColor
						+ ";text-indent:2em;\"> " + content
						+ " <p> </body></html>", "text/html", "utf-8", "");

	}
}


源码地址:http://download.csdn.net/detail/u011596810/9090009
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: