Android常见适配方式:
1.图片适配(根据手机不同的像素密度去加载不同的图片)
像素密度(一个英寸上面分布的像素点):
800*480(高度上分布了800个像素点,宽度上分布了480个像素点) 4英寸(手机斜对角线)
勾股定理:Math.sqrt(800*800+480*480) = 932.95 933像素/4 = 233dpi 最接近240dpi 所以划分在hdpi范围内
480*320---------->划分在mdpi范围内
320*240---------->划分在ldpi范围内
1280*720---------->划分在xhdpi范围内
如果当前文件夹下没有相关图片,则去加载高分辨率下面的图片。
2.demins适配(原理:不同分辨率手机加载不同的dimens文件)
dp能够适配吗?不能。。。
1920*1080 xxhdpi 440dpi 1dp = 3px
1280*720 xhdpi 320dpi 1dp = 2px
800*480 hdpi 240dpi 1dp = 1.5px
480*320 mdpi 160dpi 1dp = 1px
320*240 ldpi 120dpi 1dp = 0.75px
所以dp只能部分适配
以1280*720为例:
--解决:新建values-1280x720文件夹,新建dimens.xml,填写<dimen name="xxx">180dp</dimen>.
在布局文件中设置宽度layout_width="@dimens/xxx"
还要在默认的values文件夹下的dimens.xml文件中填写<dimen name="xxx">180dp</dimen>.
3.layout适配(原理:不同分辨率手机加载不同的layout布局)--->完全适配,成本高
以1280*720为例:
新建layout-1280x720文件夹,新建布局文件,把默认的布局拷贝一份,重写宽高属性值
4.java适配
1.获取屏幕宽高
2.控件根据屏幕宽高去设置其相应宽高,将宽高的规则设置在其父控件
3.将规则作用在显示控件上
import android.app.Activity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.WindowManager;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
// 需求:当前控件的宽高是手机屏幕的1/2
// 1.获取手机的宽高
WindowManager windowManager = (WindowManager)
getSystemService(WINDOW_SERVICE);
DisplayMetrics outMetrics = new DisplayMetrics();
windowManager.getDefaultDisplay().getMetrics(outMetrics);
int width = outMetrics.widthPixels;
int height = outMetrics.heightPixels;
// 2.控件根据屏幕宽高去设置其相应宽高 ,将宽高的规则设置在其父控件
RelativeLayout.LayoutParams layoutParams = new
RelativeLayout.LayoutParams(
(int) (width * 0.5 + 0.5),
(int) (height * 0.5 + 0.5));// +0.5数学角度上去做四舍五入
// 3.将规则作用在显示控件上
tv.setLayoutParams(layoutParams);
}
}
5.权重适配(线性布局,剩余空间的分配规则)
height = 0dp 或 width = 0dp 再设置 weight=""
weight值也可以代表渲染的优先级,值越高渲染优先级越低。
适配总结:
1,图片适配(不同像素密度的手机加载不同的图片),如果当前像素密度手机对应文件夹下没有图片,找高分比率
2,dimens适配(不同像素密度的手机加载不同的资源文件),
values-1280x720---->dimens.xml,如果单独给某一个手机设置属性了,
必须在默认dimens.xml文件中设置相同属性
3,layout适配(layout-1280x720--->布局文件)
4,java代码适配(首先获取屏幕宽高,然后控件根据屏幕宽高去设置其相应宽高,
将宽高的规则设置在其父控件(五大布局上),然后再次将规则作用在显示控件上)
5,权重适配(线性布局中才可以,height = 0dp width = 0dp weight="")
屏幕适配
最新推荐文章于 2024-05-13 08:19:41 发布