android-R.fraction
来源:互联网 发布:js new string 编辑:程序博客网 时间:2024/05/18 20:11
R.fraction
public static final class R.fraction
extends Object
Summary
Public constructors
R.fraction()
Inherited methods
java.lang.Object
Public constructors
R.fraction
Added in API level 11
R.fraction ()
在这个类里面有一个方法,找了好久才找到具体是什么意思。
context.getResources().getFraction(int id, int base, int pbase)
id参数我们传入了一个fraction的资源,后两个参数按官方文档的意思可以动态改变分子和分母的值,也就是分子*base,分母*pbase,在这里我们保持分数不变,所以两个都传入1。
我做了一个测试:在dimens.xml文件中定义
<resources> <item name="screen_offset_percentage" type="dimen">80%</item></resources>
代码测试:
Log.i("TAG", "fraction1--1:" + res.getFraction(R.dimen.screen_offset_percentage, 1, 1));// 64.00003float screenOffset = (getScreenWidth() * res.getFraction(R.dimen.screen_offset_percentage, 1, 1));Log.i("TAG", "screenOffset1--1:" + screenOffset);int screenOffset2 = (int) (getScreenWidth() * res.getFraction(R.dimen.screen_offset_percentage, 1, 1));Log.i("TAG", "screenOffset21--1:" + screenOffset2);Log.i("TAG", "fraction2--1:" + res.getFraction(R.dimen.screen_offset_percentage, 2, 1));// 64.00003float screenOffset3 = (getScreenWidth() * res.getFraction(R.dimen.screen_offset_percentage, 2, 1));Log.i("TAG", "screenOffset2--1:" + screenOffset3);int screenOffset33 = (int) (getScreenWidth() * res.getFraction(R.dimen.screen_offset_percentage, 2, 1));Log.i("TAG", "screenOffset22--1:" + screenOffset33);运行结果:
06-21 10:45:24.455: I/TAG(6832): fraction1--1:0.7999999506-21 10:45:24.455: I/TAG(6832): screenOffset1--1:639.9999406-21 10:45:24.455: I/TAG(6832): screenOffset21--1:63906-21 10:45:24.455: I/TAG(6832): fraction2--1:1.599999906-21 10:45:24.460: I/TAG(6832): screenOffset2--1:1279.999906-21 10:45:24.460: I/TAG(6832): screenOffset22--1:1279
下面引进一下别人的文章。这个属性对于屏幕自适应很有用,特别是弹窗
因为安卓的分辨率和尺寸繁多,所以我们在开发时需考虑控件的自适应,这不,在自定义对话框的时候是不是有这样的苦恼:对话框的宽度无法和系统的对话框宽度一样。这里就送大家一个可以自适应的对话框:
import android.app.DialogFragment;import android.view.WindowManager;/** * Created by solo on 15/1/19. */public class MinimumDialogFragment extends DialogFragment { @Override public void onStart() { super.onStart(); WindowManager.LayoutParams lp = DialogUtils.createLayoutParams(getDialog()); getDialog().getWindow().setAttributes(lp); } public static WindowManager.LayoutParams createLayoutParams(Dialog dialog) { Activity context = dialog.getOwnerActivity(); final DisplayMetrics metrics = context.getResources().getDisplayMetrics(); final boolean isPortrait = metrics.widthPixels < metrics.heightPixels; float percent; if (isPortrait) { percent = context.getResources().getFraction(R.fraction.dialog_min_width_minor, 1, 1); } else { percent = context.getResources().getFraction(R.fraction.dialog_min_width_major, 1, 1); } int width = (int) (context.getResources().getDisplayMetrics().widthPixels * percent); WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); lp.copyFrom(dialog.getWindow().getAttributes()); lp.width = width; lp.height = WindowManager.LayoutParams.WRAP_CONTENT; return lp; }}
上面的代码中,有个需要注意的方法:
context.getResources().getFraction(int id, int base, int pbase)
id参数我们传入了一个fraction的资源,后两个参数按官方文档的意思可以动态改变分子和分母的值,也就是分子*base,分母*pbase,在这里我们保持分数不变,所以两个都传入1。
最后根据屏幕宽度算出对话框占用的百分比:
int width = (int) (context.getResources().getDisplayMetrics().widthPixels * percent);
在这里我们还没有做完,因为平板上的对话框并不像手机一样那么窄,而且还有横竖屏之分,所以当横屏的时候,我们需要给予对话框不同的百分比宽度。分别添加以下xml文件(文件由官方源码提供):
.../values/dimens.xml
<item type="fraction" name="dialog_min_width_major">65%</item><item type="fraction" name="dialog_min_width_minor">95%</item>
.../values-large/dimens.xml
<item type="fraction" name="dialog_min_width_major">55%</item><item type="fraction" name="dialog_min_width_minor">80%</item>
.../values-xlarge/dimens.xml
<item type="fraction" name="dialog_min_width_major">45%</item><item type="fraction" name="dialog_min_width_minor">72%</item>
0 0
- android-R.fraction
- Fraction
- Fraction
- 洛谷 U2878 小R的分数比赛(fraction)
- android R
- R类 和 android.R
- POJ1930Dead Fraction
- XTU1236:Fraction
- proper fraction
- XTU1236 Fraction
- HDU5912-Fraction
- HDU5912 Fraction
- HDU5912-Fraction
- HDU5912 Fraction
- hdu5912 Fraction
- A. Fraction
- Android 的R类
- android R文件丢失
- Notification.Builder实现发送一个普通的消息通知
- 数据挖掘十大经典算法
- GitHub菜鸟级新手入门(前方多图预警),教你如何创建项目,如何创建个人主页,如何创建项目主页
- AndroidStudio打包处理
- 源代码安装vim以及安装完成后的配置
- android-R.fraction
- maven项目中依赖的jar包更新后, 本地项目无法下载对应版本的原因之一
- iOS10AdaptationTips
- Android仿58双圆环滚动效果
- 百度地图编译调试报错Error inflating class com.baidu.mapapi.map.MapView
- A、B、C、D、E五人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪
- MVC 控制器向View传值的三种方法
- 设计模式——单例模式
- hibernate3 NoClassDefFoundError: org/hibernate/engine/query/sql/NativeSQLQueryReturn