zoukankan      html  css  js  c++  java
  • 15.屏幕适配

    屏幕适配 
    •  主流屏幕: 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.创建工具类
    1. public class DensityUtils {
    2. /**
    3. * dp转px
    4. */
    5. public static int dp2px(Context ctx, float dp) {
    6. float density = ctx.getResources().getDisplayMetrics().density;//获取屏幕像素密度
    7. int px = (int) (dp * density + 0.5f);// 4.9->5 4.4->4
    8. return px;
    9. }
    10. public static float px2dp(Context ctx, int px) {
    11. float density = ctx.getResources().getDisplayMetrics().density;
    12. float dp = px / density;
    13. return dp;
    14. }
    15. }
    2.引导页面
    小红点(dp)
    1. <View
    2. android:id="@+id/view_red_point"
    3. android:layout_width="10dp"
    4. android:layout_height="10dp"
    5. android:background="@drawable/shape_point_red" />
    小灰点
    1. // 初始化引导页的小圆点
    2. for (int i = 0; i < mImageIds.length; i++) {
    3. View point = new View(this);
    4. point.setBackgroundResource(R.drawable.shape_point_gray);// 设置引导页默认圆点
    5. //这里面是像素dx,转换成dp
    6. LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
    7. DensityUtils.dp2px(this, 10), DensityUtils.dp2px(this, 10));
    8. if (i > 0) {
    9. params.leftMargin = DensityUtils.dp2px(this, 10);// 设置圆点间隔
    10. }
    11. point.setLayoutParams(params);// 设置圆点的大小
    12. llPointGroup.addView(point);// 将圆点添加给线性布局
    13. }

    3.主页面:在代码中修改
    1. public void onCreate(Bundle savedInstanceState) {
    2. super.onCreate(savedInstanceState);
    3. requestWindowFeature(Window.FEATURE_NO_TITLE);
    4. setContentView(R.layout.activity_main);
    5. setBehindContentView(R.layout.left_menu);// 设置侧边栏
    6. SlidingMenu slidingMenu = getSlidingMenu();// 获取侧边栏对象
    7. slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);// 设置全屏触摸
    8. int width = getWindowManager().getDefaultDisplay().getWidth();// 获取屏幕宽度
    9. slidingMenu.setBehindOffset(width * 200 / 320);// 设置预留屏幕的宽度,按比例
    10. initFragment();
    11. }
    美工做的








  • 相关阅读:
    R-FCN、SSD、YOLO2、faster-rcnn和labelImg实验笔记
    yolov3的anchor机制与损失函数详解
    CV资料推荐
    测试用例设计方法总结
    测试需求分析
    bug生命周期
    linux命令一
    linux 命令二
    linux 命令三
    mysql数据库和禅道安装
  • 原文地址:https://www.cnblogs.com/sixrain/p/4919352.html
Copyright © 2011-2022 走看看