① android基础之常用五种布局
所有东西依次都放在左上角,会重叠,这个布局比较简单,也只能放一点比较简单的东西。
分为垂直布局( android:orientation="vertical" )和水平布局( android:orientation="horizontal" )。
垂直布局时,每一行就只有一个元素,多个元素依次垂直往下;
水平布局时,只有一行,每一个元素依次向右排列。
用X,Y坐标来指定元素的位置,这种布局方式也比较简单
在屏幕旋转时,往往会出问题,而且多个元素的时候,计算比较麻烦。
可以理解为某一个元素为参照物,来定位的布局方式。
主要属性有:
相对于某一个元素 android:layout_below 、 android:layout_toLeftOf
相对于父元素的地方 android:layout_alignParentLeft 、 android:layout_alignParentRigh ;
每一个 TableLayout 里面有表格行 TableRow , TableRow 里面可以具体定义每一个元素。每一个布局都有自己适合的方式,这五个布局元素可以相互嵌套应用,做出美观的界面。
② android 横屏和竖屏布局不同时,需要onCreate()重新载入,如何不重新载入让数据保存,并切换不同的布局
Activity横竖屏切换的时候会重新onCreate,如果不想重装载,需要以下设置:
在AndroidManifest.xml的每一个需要禁止转向的Activity配置中加入android:screenOrientation=”landscape”属性。
参数说明:
landscape = 横向
portrait = 纵向
避免在转屏时重启Activity
android中每次屏幕方向切换时都会重启Activity,所以应该在Activity销毁前保存当前活动的状态,在Activity再次 Create的时候载入配置,那样,进行中的游戏就不会自动重启了!
要避免在转屏时重启Activity,可以通过在AndroidManifest.xml文件中重新定义方向(给每个Activity加上android:configChanges=”keyboardHidden|orientation”属性)。
在需要控制屏幕显示方向的Activity中重写onConfigurationChanged(Configuration newConfig)方法,这样在转屏时就不会重启Activity了。
③ android 的界面布局 怎么适应不同分辨率的手机 以及横竖屏间的切换
各种Android操作系统的手机简直就是琳琅满目,屏幕分辨率的差异可想而知。目前比较主流的有WVGA=800x480,HVGA=480x320,另外的还有QVGA=320x240。当然还有魅族M9的DVGA=960x640,还有蛋疼的摩托罗拉的FWVGA=854x480。
其实,在你layout的xml文件中,编写的时候是不是用了许多的padding呢?如果是,那你就蛋疼了。因为这样的布局永远是无法适应所有手机屏幕的。
正确的做法应该是使用的是weight属性。将你控件的layout中的width、height设置为fill-parent,不要使用wrap——content。因为wrap-content的大小是不固定的。而weight(权重)这个属性很好的解决了这个问题。
当包裹在控件外面的Layout的width、height属性都设置为fill-parent时,可以利用weight的反比特性。即如果控件A设置weight为5,控件B设置weight为7,那么A所占的空间为5/(5+7),B所占的空间为7/(5+7)。这样的反比属性对任何分辨率下的手机都是合适的。
当然,字体就不行了。那怎么保证字体能够跟布局一样能够自适应呢?
呵呵,很简单,就是在你的res文件夹中创建一个文件夹,叫做values-320x240。其中320x240是你手机屏幕的分辨率,根据你手机屏幕的情况做不同的命名,例如values-800x480。在该文件夹下创建一个dimens.xml文件,定义各种字体的大小。那么系统就会自动根据你手机屏幕的分辨率去调用响应的文件夹。
另外,值得提醒的是,记得在你默认的values文件下的dimens.xml文件中也要写上相应的字体大小哦,因为当系统无法认识你手机屏幕大小的时候,它会自动去找你默认文件中的
东西,没有写的话程序会崩溃。
************************************************************分割线************************************************************
在看下面内容之前首先请看你SDK文档中以下这篇文章
其实google在分辨率适应性的东西已经写的很清楚了,只是我们很多人没去看而已
以下是结论:
屏幕分辨率:1024x600
density:1(160)
文件夹:values-mdpi-1024x600
屏幕分辨率:1024x600
density:1.5(240)
文件夹:values-hdpi-683x400 由1024/1.5 600/1.5得到,需要四舍五入。
屏幕分辨率:800x480
density:1(160)
文件夹:values-mdpi-800x480
屏幕分辨率:800x480
density:1.5(240)
文件夹:values-hdpi-533x320 由800/1.5 480/1.5得到,需要四舍五入。
以此类推
一般情况下需要创建出values 、values-mdpi 、 values-hdpi文件夹,以备在一些没有规定的尺寸屏幕上找不到资源的情况。
然后在里面使用不同的dimens文件,Layout中不要使用显示的数字,所有的尺寸定义全都援引dimens里面的内容。
这样能够保证深度UI定制的情况
另外在工程的default.properties中如果split.density=false,则分辨率适配的时候文件夹命名不需要与scale相除
例
屏幕分辨率:800x480
density:1.5(240)
文件夹:values-hdpi-800x480
************************************************************分割线************************************************************
关于dimens
位置:res\values
单位:px Pixel 以画面的像素为单位;
in Inches以画面的多少英寸为单位;
mm Millimeter以画面的多少毫米为单位;
pt Points 一点为1/72英寸;
dp或dip Density-indepentdent 为160dpi屏幕的一个pixel;
ap Scale-independent Pixels 随屏幕尺寸改变的一个pixel;
1.drawable: 存放不同分辨率对应图片
在2.1版本中有drawable-mdpi、drawable-ldpi、drawable-hdpi三个,这三个主要是为了支持多分辨率。
drawable- hdpi、drawable- mdpi、drawable-ldpi的区别:
(1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),FWVGA (480x854)
(2)drawable-mdpi里面存放中等分辨率的图片,如HVGA (320x480)
(3)drawable-ldpi里面存放低分辨率的图片,如QVGA (240x320)
系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。
在2.1之前的版本可以通过drawable-800x480, drawable-480x320 等方式实现。
2:layout:放置对应不同分辨率的布局
创建不同的layout文件夹, layout-800x480,layout-480x320, 系统会根据屏幕的大小自己选择合适的layout进行使用。
另外:可以在res目录下建立layout-port和layout-land两个目录,里面分别放置竖屏和横屏两种布局文件。
下面列出主流的android机型有:
240x320低端,国产入门级采用,例如HTC G4,G8
320x480中端,大部分基于此分辨率,例如HTC G1,G2,G3,G6, MOTO ME600, SAMSUNG I7500
480x800中高端,大部分基于此分辨率,例如HTC G5,G7, MOTO MT810
480x854MOTO特有的,例如Droid, Milestone, XT800
960x640, 魅族M9
④ Android自定义露一手,轻松实现View 3D 翻转效果
这个3D翻转效果的核心其实就是 Rotate3DAnimation 这个自定义的Animation类。
我们这里主要是通过对 android.graphics.Camera 的操作来实现3D的变化,Camera的坐标系为三维左手坐标系,因此我们可以通过操作它来实现一些3D的效果。
接下来我对各段代码进行详细说明。
下面这段代码是为了防止当图像旋转到90度的时候,图像的侧面刚好朝着我们导致看起来过大的问题,因此我们需要将图像沿着Z轴移动一下,就相当于一辆车从你身后往前开你会感觉车越来越小一个道理。
下面这段代码是实现了图像旋转。
下面这段代码是为了将原点移动到图像的中心点。
如果不将图像移动到中心点则图像会沿着图像的左边旋转如下:
这里还有一点要注意的是,我们需要将旋转后展示的页面(效果图的反面)提前先反转,这样在旋转后展示反面的时候就不会出现展示镜像的问题了,这里我通过继承FrameLayout并在 dispatchDraw 增加如下逻辑来实现的。
Rotate3DLayout 内必需包含 DefaultLayout (默认展示的页面)和 ReverseLayout (翻转后展示的页面),然后以在 DefaultLayout 和 ReverseLayout 中进行自己的布局即可。
通过 rotate3D 方法即可实现翻转。
https://gitee.com/itfitness/rotate3d-layout
在这里就还分享一份由大佬亲自收录整理的 Android学习PDF+架构视频+面试文档+源码笔记 , 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料
这些都是我现在闲暇时还会反复翻阅的精品资料。里面对近几年的大厂面试高频知识点都有详细的讲解。相信可以有效地帮助大家掌握知识、理解原理,帮助大家在未来取得一份不错的答卷。
当然,你也可以拿去查漏补缺,提升自身的竞争力。
真心希望可以帮助到大家,Android路漫漫,共勉!
如果你有需要的话,只需 私信我【进阶】即可获取