android中5寸屏幕适配,屏幕适配

屏幕适配

dpi

|缩写| 全拼|含义|

|l|low|低密度|

|m|medium|中密度|

|h|hign|高密度|

|xh|extra-hign|额外高密度|

|xxh|extra-extra-hign|双额外高密度|

2d9abeed8a5e9b9e63529b56d4e64796.png

如何计算dpi?

dpi是像素密度,根据勾股定理得出手机对角线的长度,除以手机是x寸的x,得出的值是dpi。

图:

72f8278b62f7ddc622e6b8c97fcdc15c.png

规则

型号

dpi

比例

常见的分辨率

L

120

1dp = 0.75dpi

M

160

1dp = 1dpi

H

240

1dp = 1.5dpi

XH

320

1dp = 2dpi

1280*720(5寸)

XXH

480

1dp = 3dpi

图:

101df0fa4dff6a9ade4145d8a5eefb53.png

d8c7629df945cc2510fd29940b0dd687.png

分类:

图片适配

layout适配

dimens适配

权重适配weight

java代码适配

其中,前4种就是为不同分辨率的手机,加载不同的文件。每一种分辨率都已对应的一个文件夹。

##1 图片适配 ##

在5中drawable文件夹下分别放置对应的图片,当app开启后,会根据手机的分辨率去动态的加载分辨率对应的drawable文件夹中的图片。

我们分别在mipmap-hdpi 和mipmap-xhdpi下放置了猫和狗的图片,启动2个手机,分辨率分别是800480、1280720

###逻辑

8978c01e5657e001704cf5864679bbed.png

|型号|动物|

|--|--|

|mdpi|猫|

|hdpi|狗|

|xhdpi|老虎|

模拟器都是5寸

分辨率

dpi

屏幕尺寸

接近的型号

800*480

252dpi

3.7寸

hdpi

1280*720

293dpi

5寸

xhdpi

###结果如图:

a6ff2df362947e308889e181e16d0170.png

e91afb4a932c86740fa0564bc86df1df.png

2 layout适配

为特定的手机分辨率额外创建对应的layout文件夹

我们创建layout_1280x720 + layout-800*480这2个文件夹,里面的内容分别是“1280x720”、“800x480”,运行到分辨率是1280x720的手机上,只显示“1280x720”。

e6a5a2cb5d8e69216b3029d5816dea71.png

3 dimens适配

在5种values文件夹下放置不同的dimens.xml,当app开启后,会根据手机的分辨率去动态的加载分辨率对应的values文件夹中dimens.xml,实现控件的宽高的适配。

2bcc3662de39f702528a03722becd902.png

4 权重适配

就是利用属性weight来确定占用几份

效果图:

9edd2e4dcb0b777442491fd1fe6e124a.png

代码:

android:layout_width="match_parent"

android:layout_height="50dp"

android:orientation="horizontal">

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_weight="1"

android:background="#ff0000"

android:text="tab1"/>

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_weight="2"

android:background="#ff00ff"

android:text="tab2"/>

5 代码适配

利用代码动态设置,比如设置TextView的宽度是屏幕的宽的一半,再设置控件的高为屏幕的1/5.

效果图:

代码:

xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="com.cqc.adapterjava.MainActivity">

android:id="@+id/tv"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:gravity="center"

android:background="#ff00ff"

android:text="Hello World!"/>

public class MainActivity extends AppCompatActivity {

private TextView tv;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

tv = (TextView) findViewById(R.id.tv);

//拿到屏幕的宽高

getWindowParams();

}

private void getWindowParams() {

//创建对象

DisplayMetrics metrics = new DisplayMetrics();

//将宽高信息存放在对象中

MainActivity.this.getWindowManager().getDefaultDisplay().getMetrics(metrics);

//取值

int width = (int) (metrics.widthPixels/2 + 0.5);

int height = (int) (metrics.heightPixels/5+0.5);

//设置宽高,至于导入哪个layout,要看tv的父布局是哪个layout

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(width,height);

tv.setLayoutParams(params);

}

}

其它:

flot转int:直接把小数点去掉,只保留整数,即:

(int)5.1 --》5

(int)5.6--》5

5.6更接近6,而不是5,取整显然不符合现实,所以通常+0.5,即:

(int)(5.1+0.5) --》5

(int)(5.6+0.5)--》6

##屏幕适配源码:##

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值