15.屏幕适配
2015-10-29 09:15
211 查看
屏幕适配 主流屏幕: 1280*720, 遵循原则: 不用AbsoluteLayout(绝对布局), 多用相对布局&线性布局(权重), 要用dp,不用px
开发后期, 在不同分辨率屏幕上测试(480*800,1920*1080), 如果没出现太大问题(影响正常使用), 就可以上线
如果后期测出问题怎么办? 图片适配
不是很常用,分别在drawable各放一套图,但会导致软件体积很大布局适配
不是很常用, layout-800x480 专门适配480*800的屏幕尺寸适配
dp和px的关系: dp = px/设备密度
float density = getResources().getDisplayMetrics().density; System.out.println("设备密度:" + density);
320*240(0.75), 480*320(1),480*800(1.5),1280*720(2)
values->dimens.xml values-1280x720 权重适配
android:weightSum="3"代码适配
获取屏幕宽高,动态计算控件大小在智慧北京引导页下面的圆点写死了,侧边栏也在大屏幕会拉出很长,现在修改:1.创建工具类
[/code]2.引导页面小红点(dp)
[/code]小灰点
//这里面是像素dx,转换成dp
[/code]
3.主页面:在代码中修改
[/code]美工做的
来自为知笔记(Wiz)
开发后期, 在不同分辨率屏幕上测试(480*800,1920*1080), 如果没出现太大问题(影响正常使用), 就可以上线
如果后期测出问题怎么办? 图片适配
不是很常用,分别在drawable各放一套图,但会导致软件体积很大布局适配
不是很常用, layout-800x480 专门适配480*800的屏幕尺寸适配
dp和px的关系: dp = px/设备密度
float density = getResources().getDisplayMetrics().density; System.out.println("设备密度:" + density);
320*240(0.75), 480*320(1),480*800(1.5),1280*720(2)
values->dimens.xml values-1280x720 权重适配
android:weightSum="3"代码适配
获取屏幕宽高,动态计算控件大小在智慧北京引导页下面的圆点写死了,侧边栏也在大屏幕会拉出很长,现在修改:1.创建工具类
public class DensityUtils {
/**
* dp转px
*/
public static int dp2px(Context ctx, float dp) {
float density = ctx.getResources().getDisplayMetrics().density;//获取屏幕像素密度
int px = (int) (dp * density + 0.5f);// 4.9->5 4.4->4
return px;
}
public static float px2dp(Context ctx, int px) {
float density = ctx.getResources().getDisplayMetrics().density;
float dp = px / density;
return dp;
}
}
[/code]2.引导页面小红点(dp)
<View
android:id="@+id/view_red_point"
android:layout_width="10dp"
android:layout_height="10dp"
android:background="@drawable/shape_point_red" />
[/code]小灰点
// 初始化引导页的小圆点
for (int i = 0; i < mImageIds.length; i++) {
View point = new View(this);
point.setBackgroundResource(R.drawable.shape_point_gray);// 设置引导页默认圆点
//这里面是像素dx,转换成dp
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
DensityUtils.dp2px(this, 10), DensityUtils.dp2px(this, 10));
if (i > 0) {
params.leftMargin = DensityUtils.dp2px(this, 10);// 设置圆点间隔
}
point.setLayoutParams(params);// 设置圆点的大小
llPointGroup.addView(point);// 将圆点添加给线性布局
}
[/code]
3.主页面:在代码中修改
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
setBehindContentView(R.layout.left_menu);// 设置侧边栏
SlidingMenu slidingMenu = getSlidingMenu();// 获取侧边栏对象
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);// 设置全屏触摸
int width = getWindowManager().getDefaultDisplay().getWidth();// 获取屏幕宽度
slidingMenu.setBehindOffset(width * 200 / 320);// 设置预留屏幕的宽度,按比例
initFragment();
}
[/code]美工做的
来自为知笔记(Wiz)
相关文章推荐
- Light OJ 1051 - Good or Bad
- Android 生命周期 和 onWindowFocusChanged
- android学习之-Theme和Style
- SVN: repository browser 库浏览器
- Android传递数据
- iFunBox显示机器未越狱
- iOS drawRect绘画
- String类
- [原创]pg_shard使用场景及功能测试
- Xamarin只言片语4——Xamarin.Android百度地图绑定
- 【Codeforces Round #327 (Div. 2) B】 Rebranding 字符变换 同类型打标记
- grep 精萃
- C# 下载文件名重命名的问题
- Navicat Premium 连接 Oracle 数据库
- HTML_CSS学习小结
- 算法面试题-leetcode学习之旅(二)
- 算法面试题-leetcode学习之旅(二)
- 算法面试题-leetcode学习之旅(二)
- 如何测试WEB应用程序防止SQL注入攻击
- 算法面试题-leetcode学习之旅(二)