android解决百分⽐布局适配时Textview的字体Textsize⽐例缩
放问题
转⾄:blog.csdn/qq_29777823/article/details/51792630
版权声明:本⽂为博主原创⽂章,未经博主允许不得转载。
在使⽤百分⽐布局的过程中,⼤家可能会遇到⼀个问题,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中创建⼀个l⽂件⽤于做⾃定义属性
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="PercentTextView">
<attr name="baseScreenHeight" format="integer"/>
</declare-styleable>
</resources>
2、把下⾯的代码复制的Android⼯程中(实现⽅式很简单,相信不⽤解释就能看懂)
public class PercentTextView extends TextView {
private static final String TAG = SimpleName();
private static int baseScreenHeight = 1200;
private float mTextSizePercent = 1f;
public PercentTextView(Context context) {
super(context);
setDefaultPercent(context);
setTextSize(getTextSize());
}
public PercentTextView(Context context, AttributeSet attrs) {
super(context, attrs);
getAttrs(context, attrs);
setDefaultPercent(context);
LogUtil.i(TAG, "PercentTextView() getTextSize() == "+getTextSize());
setTextSize(getTextSize());
setTextSize(getTextSize());
}
public PercentTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
getAttrs(context, attrs);
setDefaultPercent(context);
setTextSize(getTextSize());
}
@Override
public void setTextSize(int unit, float size) {
size = (int)(size * mTextSizePercent);
LogUtil.i(TAG, "setTextSize() == "+size);
super.setTextSize(unit, size);
}
@Override
public void setPaintFlags(int flags) {
super.setPaintFlags(flags);
}
@Override
public void setTextSize(float size) {
setTextSize(TypedValue.COMPLEX_UNIT_PX,size);
}
public float getTextSizePercent() {
return mTextSizePercent;
}
public void setTextSizePercent(int unit, float textSizePercent) {
mTextSizePercent = textSizePercent;
setTextSize(unit, getTextSize());
}
public void setTextSizePercent(float textSizePercent) {
mTextSizePercent = textSizePercent;
setTextSize(TypedValue.COMPLEX_UNIT_PX, getTextSize());
}
/**
* 得到⾃定义的属性值
*
* @param context
* @param attrs
*/
private void getAttrs(Context context, AttributeSet attrs) {
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.PercentTextView);
baseScreenHeight = ta.getInt(R.styleable.PercentTextView_baseScreenHeight, baseScreenHeight);
textstyle}
/**
* 获取当前设备屏幕的宽⾼
*
* @param context
* @return
*/
public static int getScreenHeight(Context context) {
WindowManager wm = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
int height = wm.getDefaultDisplay().getHeight();
return height;
return height;
}
/**
* 设置默认的百分⽐
*
* @param context
*/
private void setDefaultPercent(Context context) {
float screenHeight = getScreenHeight(context);
mTextSizePercent = screenHeight / baseScreenHeight;
}
}
3、在布局⽂件中使⽤此控件,只需要引⼊全类名,如下:唯⼀⽐官⽅textview多的⼀个属性就是
app:baseScreenHeight="1200"
这个属性是我⾃定义的,所需要填的参数是美⼯给你标注图所参照的设备的屏幕⾼度,⽐如美⼯给你的切图都是以720*1280的设备为基准,那么你就填720,要是嫌写这个属性⿇烦,你也可以直接在percentTextview⾥
private static int baseScreenHeight = 1200;
直接把值修改成你⾃⼰⼯作所需要的720就⾏,就不⽤在布局⾥写这个属性了
<com.*****.****.PercentTextView
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%" />
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论