Android中的适配方式
1,图片适配(在不同像素密度的手机上,加载不同文件夹下的图片)
一套图(800*480,将截取的图片放置在hdpi下,小图(变形不明显),
大图(根据适配的手机,做单独的截取,比如有两款手机适配(做两套分辨率的图)))
总结:drawable下放置的图片分别可以加载到哪些类型的手机上:
ldpi的图片加载到320*240的手机上
mdpi---->没有图片(可以放480*320)
hdpi的图片加载到800*480的手机上
xhdpi的图片加载到1280*720的手机上( 5英寸)
xxhdpi的图片加载到1920*1080的手机上(5英寸)
不同的手机加载不同的图片 其实跟手机的像素密度有关,那么什么是像素密度呢?
像素密度就是一个英寸上面分布像素点的个数,例如
1280*720 5英寸
1280:手机的竖屏上面分布了1280个像素点
720:手机的横屏上面分不了720个像素点
5英寸:手机屏幕的斜对角线的英寸数
像素密度=(1280*1280+720*720)/5=293.7 划分在xhdpi下
2,dimens.xml适配(在不同的像素密度的手机上,加载不同的资源文件)
dp单位,适配效果,不能完全适配
指定手机配置了dimens.xml中属性dp值以后,默认手机也需要做相同的属性字段的配置
3,layout适配(在不同的像素密度的手机上,加载不同的布局文件) layout-1280x720/layout.xml
4,java代码适配(获取手机屏幕的宽高像素值,根据手机屏幕宽高像素值的百分比去设置控件宽高)
TextView显示的宽高为手机屏幕宽高的各1/2
1,获取手机屏幕上横竖对应的像素点的个数
2,取一半分配给控件展示
3,指定对应的规则,给控件所在的父布局,让后将其作用在子控件上
代码如下:
activity_main.xml
<RelativeLayout 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"
android:id="@+id/rl"
tools:context=".MainActivity" >
<TextView
android:id="@+id/tv"
android:background="#000000"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
</RelativeLayout>
public class MainActivity extends Activity {
private static final String tag = "MainActivity";
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
//1,获取手机屏幕宽高
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
//获取宽度以及高度
// displayMetrics.heightPixels
// displayMetrics.widthPixels
Log.i(tag, "displayMetrics.heightPixels = "+displayMetrics.heightPixels);
Log.i(tag, "displayMetrics.widthPixels = "+displayMetrics.widthPixels);
//2,获取宽高的各1/2
//在数学角度上做四舍五入操作 160px/2 = 80px
// 161.2px/2 = 80.6px 81.1px
int height = (int)(displayMetrics.heightPixels/2+0.5);
int width = (int)(displayMetrics.widthPixels/2+0.5);
//3,将宽高的规则设置给textView所在的夫控件,作用在textView上,android的控件默认是没有宽高的,由其父布局给他分配宽高
LayoutParams layoutParams = new RelativeLayout.LayoutParams(width, height);
tv = (TextView) findViewById(R.id.tv);
tv.setLayoutParams(layoutParams);
}
}
5,权重适配(剩余空间的分配规则,线性布局上,width = 0dp height = 0dp)
Android中的适配方式的更多相关文章
- android中两种方式打开网页
一.你要打开一个网页你可以自己写一个webview,在自己的程序中就可以打开. wv = (WebView) findViewById(R.id.webView1); wv.getSettings() ...
- Android中 实现队列方式处理优先级信息
需求:当界面在处理消息A时,突然接收到消息B,需要立马显示B的信息,然后再继续显示消息A,或者接收到消息C,再显示完消息A后再显示消息C: 原理很简单 在一个轮询中,查询消息列表中的元素,先处理优先级 ...
- Android 中数据存储方式有哪些?
a) 文件存储b) xml,SharedPreferencec) SQLite数据库d) ContentProvidere) 网络
- Xamarin.Android中使用android:onClick="xxx"属性
原文:Xamarin.Android中使用android:onClick="xxx"属性 在原生Android开发中,为一个View增加点击事件,有三种方式: 1.使用匿名对象 ( ...
- Android中的IPC机制
Android IPC简介 IPC是Inter-Process Communication的缩写,含义就是进程间通信或者跨进程通信,是指两个进程之间进行数据交换的过程.那么什么是进程,什么是线程,进程 ...
- Android中HttpURLConnection对象是怎么生成的
try { URL mUrl = new URL("https://www.jianshu.com/"); HttpURLConnection http = (HttpURLCon ...
- 【转】深入理解Android中的SharedPreferences
SharedPreferences作为Android中数据存储方式的一种,我们经常会用到,它适合用来保存那些少量的数据,特别是键值对数据,比如配置信息,登录信息等.不过要想做到正确使用SharedPr ...
- Android 屏幕适配方式
适配:即当前应用在相同的手机上面显示相同的效果.适配前需要首先确定当前手机所属像素密度类型(如:xhdpi.hdpi.mdpi等) 像素密度:每英寸上分布的像素点个数,单位(dpi,ppi),利用勾股 ...
- Android中的内存管理机制以及正确的使用方式
概述 从操作系统的角度来说,内存就是一块数据存储区域,属于可被操作系统调度的资源.现代多任务(进程)的操作系统中,内存管理尤为重要,操作系统需要为每一个进程合理的分配内存资源,所以可以从两方面来理解操 ...
随机推荐
- .NET工程师面试宝典
.Net工程师面试笔试宝典 传智播客.Net培训班内部资料 这套面试笔试宝典是传智播客在多年的教学和学生就业指导过程中积累下来的宝贵资料,大部分来自于学员从面试现场带过来的真实笔试面试题,覆盖了主流的 ...
- python之路六
面向对象 引言 提到面向对象,总是离不开几个重要的术语:多态(Polymorphism),继承(Inheritance)和封装(Encapsulation).Python也是一种支持OOP的动态语言, ...
- 用DateTime的ParseExact方法解析特殊的日期时间
今天遇到一个特别的需求,需要从下面的字符串中转换成一个DateTime对象: [07-13 15:50:42] 主要问题是这个时间不是标准的时间,而是自定义的格式,即开头是月-日,然后是时间. 使用最 ...
- SQLLocalDB 11.0持续报错,这是泥马德什么问题啊!!!
Windows API 调用 WaitForMultipleObjects 返回了错误代码: 575.Windows 系统错误消息为: {应用程序错误}应用程序无法正常启动(0x%lx).请单击“确定 ...
- javascript实现简单多文件上传
该上传功能主要用到html5新属性FormData,通过XMLHttpRequest对象send到服务器,支持文件多选和多次选择.文件去重.移除已选文件等 1.html代码 <div class ...
- SpringMVC拦截器
springmvc的拦截器 需求:进行用户的访问控制,判断用户是否登陆,如果登陆进行正常访问,如果没有登陆跳转到登陆页面. 1自定义拦截器类 package org.guangsoft.utils; ...
- iOS8系统H264视频硬件编解码说明
公司项目原因,接触了一下视频流H264的编解码知识,之前项目使用的是FFMpeg多媒体库,利用CPU做视频的编码和解码,俗称为软编软解.该方法比较通用,但是占用CPU资源,编解码效率不高.一般系统都会 ...
- 2.goldengate日常维护命令(转载)
goldengate日常维护命令 发表于 2013 年 7 月 4 日 由 Asysdba 1.查看进程状态 GGSCI (PONY) 2> info all 2.查看进程详细状态,有助于排错 ...
- 一、Ubuntu14.04下安装Hadoop2.4.0 (单机模式)
一.在Ubuntu下创建hadoop组和hadoop用户 增加hadoop用户组,同时在该组里增加hadoop用户,后续在涉及到hadoop操作时,我们使用该用户. 1.创建hadoop用户组 2.创 ...
- 在WebApi中 集成 Swagger
1. Swagger(俗称:丝袜哥)是什么东西? Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同 ...