android系统字体调到超大后显示不全
来源:互联网 发布:广告图设计软件 编辑:程序博客网 时间:2024/04/29 20:27
昨天遇着这样一个Bug,系统设置里把字体设置为超大后并切换为英文模式下,程序中的字体便显示不全。
在这里总结一下,常用解决解决办法有两个:
一.在xml文件里设置字体:
把字体大小从textSize="18sp"设置为textSize="18dp",这样以后这个问题便解决了,但是缺点就是:字体大小不会再随系统设置字体大小变化而变化了
dp:
这个是最常用但也最难理解的尺寸单位。它与“像素密度”密切相关,所以首先我们解释一下什么是像素密度。假设有一部手机,屏幕的物理尺寸为1.5英寸x2英寸,屏幕分辨率为240x320,则我们可以计算出在这部手机的屏幕上,每英寸包含的像素点的数量为240/1.5=160dpi(横向)或320/2=160dpi(纵向),160dpi就是这部手机的像素密度,像素密度的单位dpi是Dots Per Inch的缩写,即每英寸像素数量。横向和纵向的这个值都是相同的,原因是大部分手机屏幕使用正方形的像素点。
不同的手机/平板可能具有不同的像素密度,例如同为4寸手机,有480x320分辨率的也有800x480分辨率的,前者的像素密度就比较低。Android系统定义了四种像素密度:低(120dpi)、中(160dpi)、高(240dpi)和超高(320dpi),它们对应的dp到px的系数分别为0.75、1、1.5和2,这个系数乘以dp长度就是像素数。例如界面上有一个长度为“80dp”的图片,那么它在240dpi的手机上实际显示为80x1.5=120px,在320dpi的手机上实际显示为80x2=160px。如果你拿这两部手机放在一起对比,会发现这个图片的物理尺寸“差不多”,这就是使用dp作为单位的效果,见下图。
更新20140701: 是不是所有android手机的屏幕宽度用dp衡量都是固定值(例如320dp)呢?答案是否定的,如果写一个程序画宽度等于320dp的横线,在不同手机上运行,会发现在有些手机上横线比手机屏幕短,有些则比屏幕长,在平板上与手机上相比差别则更加明显。
dip:
与dp完全相同,只是名字不同而已。在早期的Android版本里多使用dip,后来为了与sp统一就建议使用dp这个名字了。
sp:
与缩放无关的抽象像素(Scale-independent Pixel)。sp和dp很类似但唯一的区别是,Android系统允许用户自定义文字尺寸大小(小、正常、大、超大等等),当文字尺寸是“正常”时1sp=1dp=0.00625英寸,而当文字尺寸是“大”或“超大”时,1sp>1dp=0.00625英寸。类似我们在windows里调整字体尺寸以后的效果——窗口大小不变,只有文字大小改变。
二。跑马灯效果:
1.TextView中有个ellipsize属性,作用是当文字过长时,该控件该如何显示,解释如下:
android:ellipsize=”start”—–省略号显示在开头android:ellipsize=”end”——省略号显示在结尾
android:ellipsize=”middle”—-省略号显示在中间
android:ellipsize=”marquee”–以跑马灯的方式显示(动画横向移动)
<TextView android:layout_width="100dip" android:layout_height="wrap_content" android:ellipsize="marquee" android:focusable="true" android:focusableInTouchMode="true" android:marqueeRepeatLimit="marquee_forever" android:singleLine="true" android:text="这是跑马灯的效果这是跑马灯的效果" />
2.重写TextView达到多个TextView同时显示跑马灯的效果:
package com.android.camera;import android.content.Context;import android.graphics.Rect;import android.util.AttributeSet;import android.widget.TextView;import android.text.TextUtils.TruncateAt;public class MarqueeTextView extends TextView { public MarqueeTextView(Context context) { super(context); createView(); } public MarqueeTextView(Context context, AttributeSet attrs) { super(context, attrs); createView(); } public MarqueeTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); createView(); } private void createView() { setEllipsize(TruncateAt.MARQUEE); setMarqueeRepeatLimit(-1); setSingleLine(); setFocusable(true); setFocusableInTouchMode(true); } @Override protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { if (focused) { super.onFocusChanged(focused, direction, previouslyFocusedRect); } } @Override public void onWindowFocusChanged(boolean focused) { if (focused) { super.onWindowFocusChanged(focused); } } @Override public boolean isFocused() { return true; }}
由于常规执行跑马灯的属性:android:focusable="true"、android:focusableInTouchMode="true"、android:singleLine="true"、android:ellipsize="marquee"在代码中均已设置,故引用此控件时,无需添加上述4个属性。
- android系统字体调到超大后显示不全
- android 联系人中,在超大字体下,添加至联系人界面(ConfirmAddDetailActivity)上有字体显示不全的问题
- android 超大字体解决办法
- android原生音乐播放器界面字体显示不全
- android singleline ...显示不全
- React Native屏蔽系统超大字体
- 随系统字体放大,某个View内容显示不全问题怎么修改?
- android之仿微信双击放大字体及滑动冲突,文本显示不全
- 使用silverlight后,页面显示不全
- opendir打开后显示的不全
- 实习入职第九天:android中的seekbar加了图片后,拖动球显示不全问题
- Android中Scrollview嵌套recyclerView,recyclerview设置wrapcontent无法显示以及显示后item显示不全的问题
- android spinner 选中后显示字体的颜色设置
- ubuntu下安装新字体并更新字体缓存后,系统显示不正常,花屏,很卡
- ubuntu下安装新字体并更新字体缓存后,系统显示不正常,花屏,很卡
- android imageview显示不全或者gilde加载不全
- 常见字体显示不全、图片上文字覆盖等问题
- Android 6.0以上系统的 RecyclerView 在HorizontalScrollView或者Scrollview中显示不全问题
- android中模拟http协议表单上传
- C基础----控制流程
- 【并发编程】ThreadPoolExecutor参数详解
- 求圆的面积1【Java】
- Qt_OpenGL小探1
- android系统字体调到超大后显示不全
- Docker Serials 1: 安装Docker 和 编译Base Image
- Monkey源码分析番外篇之WindowManager注入事件如何跳出进程间安全限制
- Java 使用JSP页面生成随机验证码
- 如何在Android用FFmpeg+SDL2.0之同步视频
- Linux学习笔记之VI(VIM)编辑器
- CPP(十一):STL实现的底层数据结构简介
- source insight 3.5字体设置
- 大规模网站架构的缓存机制和几何分形学