android 字体百分比,android 解决百分比布局适配时Textview的字体Textsize比例缩放问题...

在使用百分比布局的过程中,大家可能会遇到一个问题,Textview的控件大小是由百分比分数算出来的,但是字体大小Textsize却没法确定。于是我想到继承textview写一个自定义的PercentTextView,使字体可以根据相应的设备屏幕尺寸进行百分比缩放。

适用场景:使用官方百分比布局库做屏幕适配,Textsize不能确定的情况(尤其是适配屏幕宽高比例一致的设备,效果最好)

用法:此控件用法与官方textview基本一致,可以使字体大小跟着屏幕尺寸和比例变化。

举个栗子:

美工给的标注图是1200*1920   字体标注为36px

用了本少侠的控件后,你可以直接在布局文件里面的textsize属性上写36px

然后app跑在1200*1920设备上,该textview里的字体大小依然是36px大小

在720*1280设备上,字体大小会变为21.6px

在800*1280设备上,字体大小会变为24px

下面是代码和具体用法。

1、首先需要在values中创建一个attrs.xml文件用于做自定义属性

2、把下面的代码复制的Android工程中(实现方式很简单,相信不用解释就能看懂)

public classPercentTextView extendsTextView {

private static finalString TAG= PercentTextView.class.getSimpleName();private static intbaseScreenHeight= 1200;private floatmTextSizePercent= 1f;publicPercentTextView(Context context) {

super(context);setDefaultPercent(context);setTextSize(getTextSize());}

publicPercentTextView(Context context,AttributeSet attrs) {

super(context,attrs);getAttrs(context,attrs);setDefaultPercent(context);LogUtil.i(TAG,"PercentTextView() getTextSize() == "+getTextSize());setTextSize(getTextSize());}

publicPercentTextView(Context context,AttributeSet attrs, intdefStyleAttr) {

super(context,attrs,defStyleAttr);getAttrs(context,attrs);setDefaultPercent(context);setTextSize(getTextSize());}

@Overridepublic voidsetTextSize(intunit, floatsize) {

size = (int)(size * mTextSizePercent);LogUtil.i(TAG,"setTextSize() == "+size);super.setTextSize(unit,size);}

@Overridepublic voidsetPaintFlags(intflags) {

super.setPaintFlags(flags);}

@Overridepublic voidsetTextSize(floatsize) {

setTextSize(TypedValue.COMPLEX_UNIT_PX,size);}

public floatgetTextSizePercent() {

returnmTextSizePercent;}

public voidsetTextSizePercent(intunit, floattextSizePercent) {

mTextSizePercent= textSizePercent;setTextSize(unit,getTextSize());}

public voidsetTextSizePercent(floattextSizePercent) {

mTextSizePercent= textSizePercent;setTextSize(TypedValue.COMPLEX_UNIT_PX,getTextSize());}

/*** 得到自定义的属性值**@paramcontext*@paramattrs*/private voidgetAttrs(Context context,AttributeSet attrs) {

TypedArray ta = context.obtainStyledAttributes(attrs,R.styleable.PercentTextView);baseScreenHeight= ta.getInt(R.styleable.PercentTextView_baseScreenHeight,baseScreenHeight);ta.recycle();}

/*** 获取当前设备屏幕的宽高**@paramcontext*@return*/public static intgetScreenHeight(Context context) {

WindowManager wm = (WindowManager) context

.getSystemService(Context.WINDOW_SERVICE);intheight = wm.getDefaultDisplay().getHeight();returnheight;}

/*** 设置默认的百分比**@paramcontext*/private voidsetDefaultPercent(Context context) {

floatscreenHeight = getScreenHeight(context);mTextSizePercent= screenHeight / baseScreenHeight;}

}

3、在布局文件中使用此控件,只需要引入全类名,如下:唯一比官方textview多的一个属性就是

app:baseScreenHeight="1200"

这个属性是我自定义的,所需要填的参数是美工给你标注图所参照的设备的屏幕高度,比如美工给你的切图都是以720*1280的设备为基准,那么你就填720,要是嫌写这个属性麻烦,你也可以直接在percentTextview里

private static intbaseScreenHeight= 1200;

直接把值修改成你自己工作所需要的720就行,就不用在布局里写这个属性了

android:layout_width="0dp"android:layout_height="0dp"android:gravity="center"android:textColor="#ffffff"android:textSize="240px"android:textStyle="bold"app:baseScreenHeight="1200"app:layout_heightPercent="73.17%"app:layout_widthPercent="100%"/>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值