
先说正确的获取屏幕高度方式
使用以下的方法去获取获取应用的屏幕高度
此处通过 getMetrics() 获取的高度其实是去除了虚拟按键后的高度。所以和手机的实际屏幕高度可能有差异
getReaMetrics() 则是真正原始的屏幕尺寸
//遍历设置字体
public static void changeViewSize(ViewGroup viewGroup,int screenWidth,int screenHeight) {//传入Activity顶层Layout,屏幕宽,屏幕高
int adjustFontSize = adjustFontSize(screenWidth,screenHeight);
for(int i = 0; i<viewGroupgetChildCount(); i++ ){
View v = viewGroupgetChildAt(i);
if(v instanceof ViewGroup){
changeViewSize((ViewGroup)v,screenWidth,screenHeight);
}else if(v instanceof Button){//按钮加大这个一定要放在TextView上面,因为Button也继承了TextView
( (Button)v )setTextSize(adjustFontSize+2);
}else if(v instanceof TextView){
if(vgetId()== Ridtitle_msg){//顶部标题
( (TextView)v )setTextSize(adjustFontSize+4);
}else{
( (TextView)v )setTextSize(adjustFontSize);
}
}
}
}
//获取字体大小
public static int adjustFontSize(int screenWidth, int screenHeight) {
screenWidth=screenWidth>screenHeightscreenWidth:screenHeight;
/
1 在视图的 onsizechanged里获取视图宽度,一般情况下默认宽度是320,所以计算一个缩放比率
rate = (float) w/320 w是实际宽度
2然后在设置字体尺寸时 paintsetTextSize((int)(8rate)); 8是在分辨率宽为320 下需要设置的字体大小
实际字体大小 = 默认字体大小 x rate
/
int rate = (int)(5(float) screenWidth/320); //我自己测试这个倍数比较适合,当然你可以测试后再修改
return rate<1515:rate; //字体太小也不好看的
}
最后在Avtivity的oncreate完后调用一下changeViewSize就行了。。。文字大了那么它对应的背景也就跟着大,所以建议控件的背景用9宫格类型的,看起来舒服。
另外附加,如果你开发的应用想在平板电脑上浏览无碍请在AndroidManifestxml文件中的manifest节点(DTD建议放在application节点上面)里加入:
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:resizeable="true"/>
如果你指的是文字写入时的宽度的话,是可以获取的到的。
高度等于字体大小,即size。
宽度可以通过FontMetrics接口可以获取的到。
参考代码如下:
// 创建对象
BufferedImage bImg = new BufferedImage(width, height, BufferedImageTYPE_INT_ARGB);
//得到Graphics2D 对象
Graphics2D g2d = (Graphics2D) bimggetGraphics();
// 设置字体
Font font = new Font("宋体", FontBOLD, 30);
g2dsetFont(font);
FontMetrics fm = g2dgetFontMetrics(font);
// 获取文字宽度
int textWidth = fmstringWidth(text);
你是指修改系统字体吗?字体本身是无法设置的,只能修改字体。修改字体的方法主要有2类:
一、通过软件修改android系统字体
这类系统字体修改软件较多,可以在各大android手机论坛(机锋论坛等等)里搜索一下,比如《字体替换》这个软件。
二、手动修改android系统字体
1、首先需要获取root权限,然后手机需要安装类似REexplorer这样的高级文件管理器。
2、将需要替换的字体放置在手机SD卡中,并重命名。重命名按照以下形式命名:
英文字体重命名为:DroidSansttf;中文字体重命名为:DroidSansFallbackttf
3、以REexplorer为例,打开该文件管理器后,访问SD卡中存放替换字体的文件夹,然后选择需要替换的字体,长按该字体,选择“复制”。在不关闭REexplorer文件管理器的前提下,点击文件管理器上的返回按钮,访问system/fonts文件夹,然后点击“粘贴”
4、粘贴完成后,需要设置替换文件的权限。(替换的DroidSansttf则设置DroidSansttf的权限,替换的DroidSansFallbackttf则设置DroidSansFallbackttf的权限)长按该文件后,选择“权限”,设置权限。(也可以参考其他文件的权限配置,和其他文件一样配置为rw-r--r--)
5、替换完成后,重启手机
常见问题:
Q1:替换后为什么部分中文字体是方框?
A1:出现该情况是由于替换字体本身就不支持部分中文汉字的显示,需要换一个字体。一般微软雅黑、圆体等常见字体都不会出现该异常情况。
Q2:替换后为什么英文字体还是原样?
A2:英文字体和中文字体由两个字体文件分别管理,如果只替换了中文字体,英文字体就仍然是默认的样式。
Q3:为什么没有替换英文字体,英文字体的样式也变了呢?
A3:出现该情况,一般是由于替换的中文字体本身就包含了英文字符的样式。替换这样的中文字体后,当需要显示英文时,会显示中文字体包中含有的英文字符样式
1 TextView tv=new TextView(this);
tvgetPaint()setFlags(PaintUNDERLINE_TEXT_FLAG);//下划线
tvsetText("使用代码实现下划线样式");
tvsetTextColor(ColorWHITE);
2 tv=new TextView(this);
tvsetText(HtmlfromHtml("<u>使用html实现下划线样式</u>"));
下面给出我的实现方式吧,希望对你有帮助
public class MySimpleAdapter extends SimpleAdapter {private LayoutInflater mInflater;
private final float titleFontSize;
private final float screenWidth; //屏幕宽
private final float screenHeight; //屏幕高
public MySimpleAdapter(Context context,
List< extends Map<String, >> data, int resource, String[] from,
int[] to) {
super(context, data, resource, from, to);
// 获取屏幕的长和宽
DisplayMetrics dm = new DisplayMetrics();
dm = contextgetResources()getDisplayMetrics();
screenWidth = dmwidthPixels;
screenHeight = dmheightPixels;
//设置标题字体大小
titleFontSize = adjustTextSize();
mInflater = (LayoutInflater) contextgetSystemService(ContextLAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
convertView = mInflaterinflate(Rlayoutjudge_item, null);
}
TextView tv_title = (TextView) convertViewfindViewById(RiditemTitle);
TextView tv_content = (TextView) convertViewfindViewById(RiditemContext);
tv_titlesetTextSize(titleFontSize); //设置字体大小,
return supergetView(position, convertView, parent);
}
float adjustTextSize(){
float textsize = 12;
//在这实现你自己的字体大小算法,可根据之前计算的屏幕的高和宽来按比例显示
textsize = screenWidth/320 12;
return textsize;
}
}
这是我的算法,希望对你有帮助哈。用的时候直接把SimpleAdapter替换成MySimpleAdapter即可~
主题里添加如下,可以修改title的字体的大小和样式
比如没有ActionBar的Activity中,定义如下的样式
<style name="AppTheme" parent="android:ThemeLight">
<!-- 不要ActionBar -->
<item name="android:windowActionBar">false</item>
<item name="android:windowTitleStyle">@style/WindowTitle</item>
</style>
<style name="WindowTitle" parent="@android:style/TextAppearance">
<item name="android:textColor">#fff</item>
<item name="android:textSize">20sp</item>
<item name="android:textStyle">bold</item>
</style>
如果是在ActionBar存在的前提下,主题样式要如下
<style name="AppTheme" parent="android:ThemeLight">
<!-- 这个是设置ActionBar上的menu的文本显示样式-->
<item name="android:actionMenuTextAppearance">@style/TextAppearance</item>
<!-- 这个是设置ActionBar上的menu的文本显示颜色-->
<item name="android:actionMenuTextColor">@color/main_color</item>
<item name="android:actionBarStyle">@style/ActionBar</item>
</style>
<style name="ActionBar" parent="@android:style/WidgetActionBar">
<!-- 这个是设置ActionBar上的title的文本显示样式-->
<item name="android:titleTextStyle">@style/TextAppearance</item>
</style>
以上就是关于Android 获取手机屏幕高度 getMetrics和getRealMetrics的区别全部的内容,包括:Android 获取手机屏幕高度 getMetrics和getRealMetrics的区别、android自定义样式的字体大小咋样改、java 能获取到文字所使用某种字体后的宽度及高度吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)