解决百分比布局适配时Textview的字体Textsize比例缩放问题
2016-10-31 18:29
537 查看
在使用百分比布局的过程中,大家可能会遇到一个问题,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工程中(实现方式很简单,相信不用解释就能看懂)
3、在布局文件中使用此控件,只需要引入全类名,如下:唯一比官方textview多的一个属性就是
app:baseScreenHeight="1200"
这个属性是我自定义的,所需要填的参数是美工给你标注图所参照的设备的屏幕高度,比如美工给你的切图都是以720*1280的设备为基准,那么你就填720,要是嫌写这个属性麻烦,你也可以直接在percentTextview里
直接把值修改成你自己工作所需要的720就行,就不用在布局里写这个属性了
适用场景:使用官方百分比布局库做屏幕适配,Textsize不能确定的情况(尤其是适配屏幕宽高比例一致的设备,效果最好)
用法:此控件用法与官方textview基本一致,可以使字体大小跟着屏幕尺寸和比例变化。
举个栗子:
美工给的标注图是1200*1920
字体标注为36px
用了本少侠的控件后,你可以直接在布局文件里面的textsize属性上写36px
然后app跑在1200*1920设备上,该textview里的字体大小依然是36px大小
在720*1280设备上,字体大小会变为21.6px
在800*1280设备上,字体大小会变为24px
下面是代码和具体用法。
1、首先需要在values中创建一个attrs.xml文件用于做自定义属性
<?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 = PercentTextView.class.getSimpleName(); 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()); } 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); ta.recycle(); } /** * 获取当前设备屏幕的宽高 * * @param context * @return */ public static int getScreenHeight(Context context) { WindowManager wm = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); int height = wm.getDefaultDisplay().getHeight(); 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%" />
相关文章推荐
- android 解决百分比布局适配时Textview的字体Textsize比例缩放问题
- 自定义View,解决百分比布局适配时Textview的字体Textsize比例缩放问题
- Android自定义TextView根据控件高度和宽度,解决字体适配问题
- 转: 安卓自动缩放布局,解决屏幕适配问题
- 开源,安卓自动缩放布局,解决屏幕适配问题
- 安卓自动缩放布局,解决屏幕适配问题
- AndroidTextView的跑马灯效果,解决复杂布局不能获取焦点的问题
- Android 解决TextVIew载入自己定义字体慢的问题
- 安卓自动缩放布局,解决屏幕适配问题
- Android--开源,安卓自动缩放布局,解决屏幕适配问题
- 对android里布局文件当中的TextView对象设置事件监听,但是不响应问题解决
- Android自定义控件:imageview重写onMeasure方法实现图片按指定比例显示,拉伸永不变形,解决屏幕适配问题
- Android百分比布局解决屏幕适配问题
- 安卓百分比布局---很好的解决屏幕适配问题
- 开源,安卓自动缩放布局,解决屏幕适配问题
- 在代码中修改textview的字体颜色(解决只能修改一次的问题)
- qq7.0的视频动态图登录界面实现讲解解决videoview黑屏问题解决图片视频各种手机适配与缩放衔接问题
- 开源,安卓自动缩放布局,解决屏幕适配问题
- RecyclerView嵌套多个布局,多个editText,解决文本输入框上下交换位置中的值问题
- Android—解决重写TextView设置字体大量引用后卡屯的问题