1、动态获取资源id
int getIdentifier(String name, String defType, String defPackage) 获得资源id
正常情况下,我们可以通过R类获取资源id,但有时候我们需要在代码中根据业务逻辑动态获取资源id,比如layou、drawable、string等,就可以使用Resource类中的
比如下面是代码中获取layout资源id
for(int i=0;i<5;i++){
int resID = getActivity().getResources().getIdentifier("view" + i, "layout", getActivity().getPackageName());
View rootView = inflater.inflate(resID, container, false);
}
2、TypedArray
public float getFraction(@StyleableRes int index, int base, int pbase, float defValue) 获取type="fraction"单位的值
base和pbase表示倍数,比如使用%p则会使用pbase,否则使用base。
在xml中定义两个fraction类型的参数
<item name="fraction" type="fraction">5%</item>
<item name="parent_fraction" type="fraction">2%p</item>
获取的结果为:
// 0.05f
getResources().getFraction(R.fraction.fraction, 1, 1);
// 0.02f
getResources().getFraction(R.fraction.parent_fraction, 1, 1);
// 0.10f
getResources().getFraction(R.fraction.fraction, 2, 1);
// 0.10f
getResources().getFraction(R.fraction.fraction, 2, 2);
// 0.04f
getResources().getFraction(R.fraction.parent_fraction, 1, 2);
// 0.04f
getResources().getFraction(R.fraction.parent_fraction, 2, 2);
3、TypedValue
public static float applyDimension(int unit, float value,
DisplayMetrics metrics)
{
switch (unit) {
case COMPLEX_UNIT_PX: //px单位
return value;
case COMPLEX_UNIT_DIP: //dip单位
return value * metrics.density;
case COMPLEX_UNIT_SP: //sp单位
return value * metrics.scaledDensity;
case COMPLEX_UNIT_PT:
return value * metrics.xdpi * (1.0f/72);
case COMPLEX_UNIT_IN:
return value * metrics.xdpi;
case COMPLEX_UNIT_MM:
return value * metrics.xdpi * (1.0f/25.4f);
}
return 0;
}
比如获取dp尺寸public static int dip2px(Context context, float dip) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip,
context.getResources().getDisplayMetrics());
}
//dip2px(10) 10dp对应的px
3、加载SD卡中的html
文件路径以"file:///mnt/sdcard/" 开头,比如加载SD卡中www目录下的index.html
String baseDir="file:///mnt/sdcard/";
String url=baseDir+"www/index.html";
webView.loadUrl(url);