屏幕适配

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="")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值