android 项目学习随笔二十(屏幕适配)
1、图片适配

放入相同名称的资源文件,机器根据不同分辨率找相近的资源
240*320 ldpi
320*480 mdpi
480*800 hdpi
720*1280 xhdpi
2、布局适配
在不同的分辨率下显示不同的布局,定义不同分辨率的布局文件,一般控件相同(否则FindViewByID找不到)
layout-800x480, 适配480*800分辨率的布局
3、尺寸适配
dp 设备独立像素
dp = px / 设备密度
float density = getResources().getDisplayMetrics().density;
System.out.println("设备密度:" + density);
分辨率 设备密度 像素(PX)
240*320 0.75 120px
320*480 1.0 160px
480*800 1.5 240px
1280*720 2 320px (主流屏幕)
1920*1080
设置为DP后,系统运行起来后会自动计算出像素
/res/values/dimens.xml
<resources>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
<dimen name="textview_width">160dp</dimen>
</resources>
<LinearLayout 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:orientation="vertical" > <TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#f00" /> <TextView
android:layout_width="@dimen/textview_width"
android:layout_height="50dp"
android:background="#0f0" /> </LinearLayout>
定义不同分辨率的values
import android.content.Context;
public class DensityUtils {
public static int dp2px(float dp, Context ctx) {
float density = ctx.getResources().getDisplayMetrics().density;
// 4.1->4, 4.9->4
int px = (int) (dp * density + 0.5f);// 加0.5可以四舍五入
return px;
}
public static float px2dp(int px, Context ctx) {
float density = ctx.getResources().getDisplayMetrics().density;
float dp = px / density;
return dp;
}
}
在代码中指定宽度长度要进行dp和PX转化,代码所赋的值是像素(px)
4、权重适配
只适合线性布局
<LinearLayout 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:orientation="horizontal" > <LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:weightSum="3" > <TextView
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:background="#f00" /> <TextView
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:background="#0f0" />
</LinearLayout> </LinearLayout>
android:layout_width="0dp"
把水平宽度等分为3份,两个TextView各占三分之一的宽度
如果weightSum不设置,weightSum的值为子控件权重之和
5、代码适配
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
float density = getResources().getDisplayMetrics().density;
System.out.println("设备密度:" + density);
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
int width = wm.getDefaultDisplay().getWidth();
int height = wm.getDefaultDisplay().getHeight();
TextView tvText = (TextView) findViewById(R.id.tv_text);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
width / 3, height / 10);
tvText.setLayoutParams(params);
}
总结:多用相对布局和线性布局(权重), 用dp不用px, 用sp不用px, 代码中如果必须写像素的话, 将dp转为像素之后再设置
android 项目学习随笔二十(屏幕适配)的更多相关文章
- android 项目学习随笔二十一(IM、语音识别、机器人、统计、扫描二维码、条形码)
语音识别:科大讯飞语音云 http://www.xfyun.cn/ 语音机器人模拟 public class TalkBean { public String text; public boolean ...
- android 项目学习随笔二(引导页 )
1.引导页 1.定义灰色.红色圆点的shape XML文件 2.定义布局文件,利用相对布局文件定位,利用线性布局加载灰色圆点,imageview加载红色圆点 3.android.support.v4. ...
- (转载)Android项目实战(二十八):使用Zxing实现二维码及优化实例
Android项目实战(二十八):使用Zxing实现二维码及优化实例 作者:听着music睡 字体:[增加 减小] 类型:转载 时间:2016-11-21我要评论 这篇文章主要介绍了Android项目 ...
- (转载)Android项目实战(二十八):Zxing二维码实现及优化
Android项目实战(二十八):Zxing二维码实现及优化 前言: 多年之前接触过zxing实现二维码,没想到今日项目中再此使用竟然使用的还是zxing,百度之,竟是如此牛的玩意. 当然,项目中 ...
- android 学习随笔二十二(小结)
ADB进程 * adb指令 * adb install xxx.apk * adb uninstall 包名 * adb devices * adb start-server * adb kill-s ...
- Android项目实战(二十四):项目包成jar文件,并且将工程中引用的jar一起打入新的jar文件中
前言: 关于.jar文件: 平时我们Android项目开发中经常会用到第三方的.jar文件. 其实.jar文件就是一个类似.zip文件的压缩包,里面包含了一些源代码,注意的是.jar不包含资源文件(r ...
- Android项目实战(二十八):Zxing二维码实现及优化
前言: 多年之前接触过zxing实现二维码,没想到今日项目中再此使用竟然使用的还是zxing,百度之,竟是如此牛的玩意. 当然,项目中我们也许只会用到二维码的扫描和生成两个功能,所以不必下载完整的ja ...
- Android项目实战(二十五):Android studio 混淆+打包+验证是否成功
前言: 单挑Android项目,最近即时通讯用到环信,集成sdk的时候 官方有一句 在 ProGuard 文件中加入以下 keep. -keep class com.hyphenate.** {*;} ...
- Android项目实战(二十九):酒店预定日期选择
先看需求效果图: 几个需求点: 1.显示当月以及下个月的日历 (可自行拓展更多月份) 2.首次点击选择"开始日期",再次点击选择"结束日期" (1).如果&qu ...
随机推荐
- MVC强类型和弱类型的区别
1 强类型的处理 首先必须要有一个对象的实体类,UserINfo就是一个实体类,如下: public class UserInfo() { public int Id{set;get;} publi ...
- eclipse中tomcat能正常启动,但是浏览器访问不了tomcat首页
在eclipse中新建tomcat7,完成后tomcat能够正常启动,但是浏览器问题localhost:8080访问不了. 解决方法如下: 双击eclipse中服务器中的tomcat 出现tomcat ...
- linux下利用elk+redis 搭建日志分析平台教程
linux下利用elk+redis 搭建日志分析平台教程 http://www.alliedjeep.com/18084.htm elk 日志分析+redis数据库可以创建一个不错的日志分析平台了 ...
- Windows Server 2008 R2 域控修改域用户密码复杂性
1.进入”本地安全策略”进行管理时,发现密码策略已经被锁定,无法更改: 2.在此情况下要改密码策略的过程如下, 进入组策略管理: 3.右键点击/编辑Default Domain Policy: 4.在 ...
- [GeoServer]Openlayers简单调用
Openlayers Demo: <html> <head> <title>OpenLayers Example</title> <script ...
- 【未完待补充】linux 设置So动态库链接路径
缘起 安装python的包Rtree(Rtree-0.8.2),但需要先安装C语言依赖包spatialindex-src(spatialindex-src-1.8.5).在安装完spatialinde ...
- python 上传下载文件
server.py #!/usr/bin/env python # -*- coding:utf- -*- import SocketServer import os class MySocketSe ...
- 微信消息回复C#
第一句话都会这么去写:程序猿就是苦逼,除了开发还要会写博文!哎,继上次写了C#成为微信开发者后,博友们积极查看本篇博客,在此深表感谢.顺便报一下上篇博客的网址:http://www.cnblogs.c ...
- 使用jquery的小记
随便写点 1.给span这种标签赋值 不能用$("#id").val("abc"); 因为这种标签没有value属性 而应该用$("#id" ...
- 【Linux】 JDK安装及配置 (tar.gz版)
安装环境 Linux(Ubuntu 版) JDK安装 tar.gz为解压后就可以使用的版本,这里我将使用jdk-8u65-linux-x64.tar.gz版,安装到/usr/java/下 步骤一 将文 ...