Android中的不同drawable文件夹所带来的思考
来源:互联网 发布:阿里云服务器怎样使用 编辑:程序博客网 时间:2024/05/17 03:10
今天模拟手Q的发送图片界面做一个toolBar,布局如下:
<RelativeLayout android:id="@+id/tool_bar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/photo_select_bottom_bg" android:layout_alignParentBottom="true" > <Button android:id="@+id/preview_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="15dp" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:text="@string/preview" android:textColor="@color/photopreview_btn_text" android:textSize="14dp" android:paddingLeft="15dp" android:paddingRight="15dp" android:background="@drawable/photopreview_bottom_left_btn_selector" /> <Button android:id="@+id/magic_stick" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_centerVertical="true" android:background="@drawable/pic_icon_edit" /> <Button android:id="@+id/send_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="15dp" android:layout_centerVertical="true" android:layout_alignParentRight="true" android:text="@string/photo_send" android:textColor="@color/photopreview_btn_text" android:textSize="14dp" android:paddingLeft="15dp" android:paddingRight="15dp" android:background="@drawable/photo_select_preview_btn" /></RelativeLayout>
所有的元素都设置了一个backgroundDrawable,但是运行后得出的界面非常奇怪,
仔细检查了各项设置参数,均正常,无奈之下各种求助google,度娘,终于解决,现记录笔记如下:
相关知识
- dip
device independent pixels(设备独立像素),与屏幕密度无关的像素,这是一个基于屏幕物理的抽象单位。密度可以理解为每英寸所包含的像素个数,而1dp实际上相当于160dpi(即密度)上的一个点,也就是说,当密度为160时,1dp和1px是等价的。由于android手机的分辨率千差万别,为了让同一个高度/宽度值在不同分辨率的手机上看上去一致,android官方推出了dip的概念。
- dip和px之间的区别和联系
dp和px的转换公式为px=dip*(density/160)
。px就是像素,打个比方,要画一条240px的横线,在480宽的屏幕上看是1半屏款,而在320宽的屏幕上看是2/3(同一个尺寸的屏幕)。而画一条160dip的横线,无论在320还是480宽的屏幕上,长度都是一样的。
- 关于density
上面给出了dip和px之间的转化公式,其中涉及到了density,注意,这里的density并非设备实际的density,而是归一化后的density。google将所有的设备分为四种120(low),160(medium),240(high),320(xhigh)。可以使用getResources().getDisplayMetrics().densityDpi
查看自己设备的dpi。依照这四种dpi,android4.0时代,新建android工程,会自动生成drawable,drawalbe-ldpi,drawable-mdpi,drawable-hdpi,drawable-xhdpi五个目录,系统会根据设备dpi的大小区相应的文件夹拉取相应的资源文件。
得出结论
根据上面的知识,终于发现了问题所在,我的手机屏幕分辨率是240,因此,图片文件应该放在drawable-xhdpi下,但是我却错误的将文件放在了drawable-mdpi,这里又涉及到了几个问题,当资源文件放在了错误的文件夹下,会造成什么样的影响呢,这么多资源文件夹,系统到底是按照什么顺序来加载呢?通过各种资料查询加上试验,终于得出结论如下:
当图片资源放在了错误的资源文件夹下时,图片会根据相应dpi做缩放,拿本例来说,图片原始大小高度95,当将其放在了drawable-mdpi下时,会通过下列公式计算出大致新的高度
95*(240/160) = 142
,等于说是在纵向拉伸了图片,这就是为什么我们在上图中看到的元素都大了一号,其实是被背景图给撑大的。加载顺序。如果我在drawable-(xdpi,hdpi,mdpi,ldpi)以及drawable这几个文件夹下放置同一个图片,那么系统是按照什么顺序来加载的呢。其实它会先到对应dpi的文件夹下找,找不到就会往比自己高的dpi文件夹下找,然后才会往比自己低的dpi文件夹下找。
至此,问题解决,正常界面:
- Android中的不同drawable文件夹所带来的思考
- Android中的不同drawable文件夹所带来的思考
- Android:不同drawable文件夹的区别
- Android drawable不同文件夹的区别
- 不同drawable文件夹的区别
- Android Studio创建不同分辨率的Drawable文件夹
- Jquery版本不同所带来的问题
- AndroidStudio 新建不同的Drawable文件夹
- Android drawable文件夹的使用
- android 不同drawable文件对应的dpi值,和所放图片分辨率
- 三鹿奶粉事件所带来的营销思考
- 结构体成员非对齐访问所带来的思考
- 通过试读《增长黑客》所带来的思考
- 编译系统所带来的语言特性的不同
- 男女网购的不同给我们带来的思考
- 没想到这几个不同的drawable文件夹还真不一样
- Android的drawable文件夹的说明
- Android杂谈---关于drawable文件夹的错误
- Sybase基础知识(新手必看)
- 将自己的图片插入QRcode中
- 编写第一个ice程序
- 最简单 NDK 例子
- Access中批量替换数据库内容
- Android中的不同drawable文件夹所带来的思考
- POJ 2312 Battle City(BFS+优先队列)
- Please check that values for params "default.fs.name" and "hive.metastore.warehouse.dir" do not conf
- 第168章 大战!88真人娱乐城
- HDU 3001 Travelling(状压dp)
- 高通8x12平台 mipi屏 调试 .
- Protocol Buffers 语法指南
- hdu 1753 大明A+B
- zepto 研究