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.创建工具类

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;	}}

2.引导页面

小红点(dp)

  <View            android:id="@+id/view_red_point"            android:layout_width="10dp"            android:layout_height="10dp"            android:background="@drawable/shape_point_red" />

小灰点

// 初始化引导页的小圆点		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);// 将圆点添加给线性布局		}

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();	}

美工做的

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java多线程知识点

    进程和线程的区别?多线程有什么好处? 进程:正在进行中的程序(直译)。 线程:就是进程中一个负责程序执行的控制单元(执行路径)

    六月的雨
  • 深入理解JVM(线程部分) Note

    由于计算机的存储设备与处理器的运算速度有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(Cache)来作为内存与...

    六月的雨
  • 自定义圆环进度条

    六月的雨
  • Sass 基础(五)

    @if   @if 指令是一个SassScript,它可以根据条件处理样式块,如果条件为true返回一个样式块,反之   false 返回另一个样式块,在S...

    用户1197315
  • 如何用css控制伪元素,再也不用多写个div

    杭州前端工程师
  • css适配屏幕尺寸大小自适应

    改新模板的时候考虑到单独适配手机端排版美化。只需要在css内写好窗口大小相对应的样式。访问就根据窗口大小自动使用相应的样式。

    AlexTao
  • Vue项目图片剪切上传——vue-cropper的使用

    最近自己在研究vue,然后做了一个小型的后台管理系统用来练手,开发过程中,想到了剪切图片上传用户头像的需求。上网百度了一番,发现好多用的都是vue-croppe...

    用户1174387
  • 几种水平垂直居中的方法

    用户3836409
  • VUE开发一个组件——Vue PC城市选择控件

    前面用vue开发了三四个组件了,都是H5的,现在来看看PC是如何玩转组件的?其实和H5相同,样式不同而已。

    Javanx
  • 【CSS】599- 9个很棒的CSS边框技巧

    如果您是前端开发人员,那么几乎每天都会使用CSS边框。我发现了一些可以在您的项目中使用的有用的技巧。

    pingan8787

扫码关注云+社区

领取腾讯云代金券