Android 实现新闻客户端字号设置的几种方法

</pre>公司有个类似新闻客户端的项目到了后期,需要增加需求需要设置大中小三种字号可供选择设置。<p></p><p></p><p>在网上找了资料,列出几种实现方法:</p><p>1.利用Activity生命周期,在Onresume里面遍历View去实现。</p><p>2.利用广播通知,然后遍历View去实现</p><p></p><p>这里列出获取当前Activity中最外侧View的方法:</p><p></p><pre name="code" class="java">public static ViewGroup getLayoutForActivity(Activity activity) {
		return (ViewGroup) activity.findViewById(android.R.id.content);
	}


我考虑了一下遍历View这种方法,因为是项目后期修改,遍历所有的View 没有办法给具体的View去设置字号,可以给当前字号加一点减一点来解决这个问题,但是切换后的效果肯定不会太好。


这里给出另外一种方法:

下面是实现思路

用样式和Activity生命周期实现这个功能。

在style种样式定义不同的字号(注:也可自定义属性,用android:textSize 改变的只是默认字号)

    <style name="AppTheme" parent="AppBaseTheme">
        <item name="android:textSize">16dp</item>
    </style>
    <!-- Application theme. -->
    <style name="AppTheme1" parent="AppBaseTheme">
          <item name="android:textSize">25dp</item>
    </style>
    <!-- Application theme. -->
    <style name="AppTheme2" parent="AppBaseTheme">
          <item name="android:textSize">13dp</item>
    </style>

在样式中这样定义字号:

  android:textSize="?android:attr/textSize"

在App中定义三种字号模式。

	//字号(小)
	public static final int TEXTMODE_SAMLL = -1;
	//字号(中)
	public static final int TEXTMODE_NORMAL = 0;
	//字号(大)
	public static final int TEXTMODE_BIG = 1;
	public static int TEXTMODEL = TEXTMODE_NORMAL;

在每个ActivityOnCreate的时候记录下当前Activity的的字号模式,

	textModle = SysConfigeUtil.TEXTMODEL;

切换字号模式

		switch (item.getItemId()) {
		case R.id.big:
			SysConfigeUtil.TEXTMODEL = SysConfigeUtil.TEXTMODE_BIG;
			SysConfigeUtil.reload(this);
			break;
		case R.id.normal:
			SysConfigeUtil.TEXTMODEL = SysConfigeUtil.TEXTMODE_NORMAL;
			SysConfigeUtil.reload(this);
			break;
		case R.id.small:
			SysConfigeUtil.TEXTMODEL = SysConfigeUtil.TEXTMODE_SAMLL;
			SysConfigeUtil.reload(this);
			break;

		default:
			break;
		}
//SysConfigeUtil.reload(this);// 可用recreate(); 替换掉

在Android 3.0以后,Activity提供了重启Activity的方法onReCreate方法,这个方法只能在top-level的时候使用,也就是说Activity在栈顶的时候调用。

所以要在onResume中重新设置样式

	if (textModle != SysConfigeUtil.TEXTMODEL) {
			SysConfigeUtil.reload(this);
		}


Demo链接:http://download.csdn.net/detail/liuyaoyue/8083875


记得还有一种方法是在Manifest文件中设置Activity的onConfigChanged属性为fontScane,具体怎么搞我也忘记了,如果有知道的请告诉我下~


修改: 上面的方法(重启Activity的方法会导致黑屏,求解决方案)







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值