Android屏幕适配全攻略

简介: Android屏幕适配全攻略

 目前主流屏幕是1280*720,开发后期会在不同分辨率的机型上测试,如480*800的和1920*1080的。如果没出现太大的问题,在不影响使用的情况下,就可以上线了。但或多或少都会出现点小bug,这时候我们开发人员都会在心里默唱草泥马之歌...但是工作还是要做的,所以:


适配原则:


不用绝对布局, 多用相对布局和线性布局。

距离使用dp,而不用px,字体大小用sp。

图片多使用.9的。

image.png

1.图片适配

image.png

让视觉工程师(也就是美工)多切几套图,放在不同的文件夹下就行了,比较偷懒,项目会增大,不常用。

2.布局适配

写两套布局,专门适配不同的屏幕,如 layout-800x480 专门适配480*800的屏幕,也不常用。

image.png

3.尺寸适配

这里就要说到dp和px的关系了,dp = px/设备密度

<pre name="code" class="html"><span style="font-family:SimSun;font-size:18px;">// 获取设备密度, 和分辨率有关
float density = getResources().getDisplayMetrics().density;
System.out.println("设备密度:" + density);</span>

在values中专门指定尺寸大小

image.png

<span style="font-size:18px;"><resources>
    <dimen name="textview_width">320dp</dimen>
</resources></span>

有时我们也会在代码中动态设置控件的大小,但是在代码中设置的大小都是以px为单位的,运行起来就会有bug,这时就需要进行px对dp的转换了

<pre name="code" class="html">import android.content.Context;
public class DensityUtils {
  /**
  * dp转px
  */
  public static int dp2px(Context context, float dp) {
  // 获取设备密度
  float density = context.getResources().getDisplayMetrics().density;
  int px = (int) (dp * density+0.5f);
  return px;
  }
  /**
  * xp转dp
  */
  public static float px2dp(Context context, int px) {
  // 获取设备密度
  float density = context.getResources().getDisplayMetrics().density;
  float dp = px/density;
  return dp;
  }
}

在动态设置大小时调用一下即可。

params.leftMargin=DensityUtils.dp2px(this, 10);

4.代码适配

获取屏幕的宽高,动态计算控件的大小。

int width = getWindowManager().getDefaultDisplay().getWidth();
int height = getWindowManager().getDefaultDisplay().getHeight();
TextView tv1 = (TextView) findViewById(R.id.tv_1);
TextView tv2 = (TextView) findViewById(R.id.tv_2);
LayoutParams params = new LayoutParams(width / 3, (int) (height * 0.2));
tv1.setLayoutParams(params);
tv2.setLayoutParams(params);

5.权重适配

<span style="font-size:18px;"> <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:weightSum="3" >
        <Button
            android:layout_width="0dp"
            android:layout_height="100dp"
            android:layout_weight="1"
            android:background="#0f0" />
        <Button
            android:layout_width="0dp"
            android:layout_height="100dp"
            android:layout_weight="1"
            android:background="#00f" />
    </LinearLayout></span>
<span style="font-size:18px;">android:weightSum="3"</span>

比例为3,现只有两个按钮,第三个就会空出来,而这两个按钮无论在什么样的分辨率下,大小都是一样的。

目录
相关文章
|
8月前
|
JavaScript Android开发
使用贝叶斯曲线滑动安卓屏幕(autojsPro7)
使用贝叶斯曲线滑动安卓屏幕(autojsPro7)
277 0
|
8月前
|
XML Java Android开发
Android Studio App开发之捕获屏幕的变更事件实战(包括竖屏与横屏切换,回到桌面与切换到任务列表)
Android Studio App开发之捕获屏幕的变更事件实战(包括竖屏与横屏切换,回到桌面与切换到任务列表)
226 0
|
编解码 开发工具 Android开发
Android平台RTSP轻量级服务|RTMP推送摄像头或屏幕之音频接口设计
好多开发者在做Android平台录像或者RTSP轻量级服务、RTMP推送相关模块时,对需要设计哪些常用接口会心存疑惑,本文主要以大牛直播SDK(官方)为例,简单介绍下Android平台直播推送SDK所有音频相关的接口,感兴趣的开发者可以看看。
113 0
|
8月前
|
编解码 Java Android开发
Android技能树 — 屏幕适配小结,2024年最新android开发环境搭建教程
Android技能树 — 屏幕适配小结,2024年最新android开发环境搭建教程
|
8月前
|
开发工具 Android开发
rk平台Android12屏幕永不休眠
rk平台Android12屏幕永不休眠
135 1
|
4月前
|
编解码 开发工具 Android开发
Android平台实现屏幕录制(屏幕投影)|音频播放采集|麦克风采集并推送RTMP或轻量级RTSP服务
Android平台屏幕采集、音频播放声音采集、麦克风采集编码打包推送到RTMP和轻量级RTSP服务的相关技术实现,做成高稳定低延迟的同屏系统,还需要有配套好的RTMP、RTSP直播播放器
|
8月前
|
Shell Android开发
ADB更改Android设备屏幕显示方向
ADB更改Android设备屏幕显示方向
409 5
|
8月前
|
编解码 Android开发
Android 屏幕适配
Android 屏幕适配
96 4
|
8月前
|
Android开发
获取Android设备屏幕大小
获取Android设备屏幕大小
143 3
|
8月前
|
XML Java Android开发
Android系统 添加动态控制屏幕方向、强制APP横竖屏方向
Android系统 添加动态控制屏幕方向、强制APP横竖屏方向
1047 1