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 条评论
登录 后参与评论

相关文章

来自专栏玩转全栈

Android如何实现超级棒的沉浸式体验

做APP开发的过程中,有很多时候,我们需要实现沉浸式的体验。

1.6K24
来自专栏androidBlog

使用CoordinatorLayout打造各种炫酷的效果

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/details...

1.1K1
来自专栏郭霖

Android实现图片滚动控件,含页签功能

首先题外话,今天早上起床的时候,手滑一下把我的手机甩了出去,结果陪伴我两年半的摩托罗拉里程碑一代就这么安息了,于是我今天决定怒更一记,纪念我死去的爱机。 如果你...

34010
来自专栏Android机器圈

Android图片处理--全景查看效果

PS:Android对于图片处理这块资源还是挺多的,之前用OpenGL制作图片的全景效果,耗时耗力,而且只能点击进去后看到,但是效果是非常的号,今天所写的是编写...

2343
来自专栏QQ音乐技术团队的专栏

小窗播放视频的原理和实现(下)

本文对小窗视频播放进行了详细的研究,针对几种实现方案进行了深入的对比分析,进而给出实现小窗视频播放的最优解。其中通过对系统源码的分析,详细探究了如何完美地实现移...

91910
来自专栏Android源码框架分析

仿淘宝、京东拖拽商品详情(可嵌套ViewPager、ListView、WebView、FragmentTabhost)实现效果图实现

2183
来自专栏向治洪

仿uc下部弹出菜单

先说说我怎么会无聊到这种地步去弄这个代码呢,在今年2月份的时候公司本来要做个这种弹出的菜单的,有5个按钮每个都有一个菜单,记得网上有仿UC菜单的源码,就下下来看...

2258
来自专栏何俊林

如何优化你的布局层级结构之RelativeLayout和LinearLayout及FrameLayout性能分析(一)

工作一段时间后,经常会被领导说,你这个进入速度太慢了,竞品的进入速度很快,你搞下优化吧?每当这时,你会怎么办?功能实现都有啊,进入时要加载那么多view,这也没...

3999
来自专栏Android干货园

Android自定义下拉刷新动画--仿百度外卖下拉刷新

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/51...

1453
来自专栏非著名程序员

AutoFlowLayout-多功能流式布局与网格布局控件

近期工作需要用到流式布局,网上也有很多关于这方面的资料。发现流式布局与网格布局的自定义很有意思,是学习自定义控件的一个很好的方式,所以就撸了个几百行代码的控件,...

39010

扫码关注云+社区

领取腾讯云代金券