AS的工程中,java中放着我们的项目代码
res中放的是各种资源:layout放布局,mipmap放图片,values放一些值(如颜色)
<1>线性布局——LinearLayout
1.什么是线性布局?
线性布局就是把孩子都摆放在同一条线上
<LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> </LinearLayout>
//这段代码中,需要注意的两点:
1.将根标签设置为LinearLayout,就可以实现线性布局
2.layout_width=“match_parent”这条语句意思就是这个布局的宽度width自适应它父类的宽度
2.线性布局中各个控件摆放的方向:
可以通过对方向 orientation进行设置来达到改变布局中控件摆放方向的效果
android:orientation="vertical"(垂直排列)
android:orientation="horizontal"(水平排列)
3.线性布局中的权重:
如果想让布局中的各个部分平均排列或成比例排列,就可以给每个部分设置权重
具体的代码为 android:layout_weight="设置的权重大小值"
<Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="2" android:text="Button" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="Button" />
//在这段代码中,就分别给两个按钮的权重设置为2和1,那么显示出来的效果就是button占了
整个行的2/3,而button2占了整个行的1/3
<2>相对布局——RelativeLayout
1.相对布局也就是说要有参照物的布局
相对布局有两种,一种是相对父控件的,另一种是相对于同级控件的
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
</RelativeLayout>
//将根标签设置为RelativeLayout即可实现相对布局
2.相对父控件的相对布局
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="中间"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:text="右上角"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:text="右下角"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="左上角"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:text="左下角"/>
//系统默认加入的控件都在父控件的左上角,所以如果要更改位置的话,就需要对每个控件进行具体
的设置
3.相对同级控件的相对布局
<!--这个是中间部分--> <Button android:id="@+id/center_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="确定"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_toLeftOf="@id/center_button" android:text="我在中间的左边"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@id/center_button" android:layout_centerHorizontal="true" android:text="我在中间的顶部"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_toRightOf="@id/center_button" android:text="我在中间的右边"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/center_button" android:layout_centerHorizontal="true" android:text="我在中间的底部"/>
//首先给一个参照物设置id,即给中间的那个按钮设置一个id:android:id="@+id/center_button"(注意这里设置id用的是@+id)
然后,其他的每一个控件相对于它在什么位置上就写相应的语句即可(注意写的时候相对于参照物用的是@id,没有+)
<3>其他布局
1.绝对布局——AbsoluteLayout
一般用在机顶盒或者手表的系统开发中,因为手表和机顶盒的分辨率都是固定的
<AbsoluteLayout xmlns:android="https://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Button" android:layout_x="92dp" android:layout_y="117dp"/> </AbsoluteLayout>
//绝对布局就是通过layout_x和layout_y的值来确定具体的位置
2.表格布局——TableLayout
可以用来做类似计算器的按钮
3.帧布局——FrameLayout
一般用在播放器的界面中
<4>开发中常用的单位
1. px——像素
图片的最小单位就是像素,在开发中不建议使用(除非是手表或机顶盒这种固定像素屏幕的设备),因为如果使用px作为开发单位,那么在不同屏幕大小的手机上跑出来的效果就可能不相同
2.dp——独立密度,与像素无关(也叫dip——Density independent pixels)
适配屏幕的单位,在开发中使用
具体的标准是,以160dpi为基准,在这个条件下1dp=1px,其他屏幕大小进行比例变化即可
(例如:
小米2s的屏幕dpi = 342,那么在标准屏幕上显示1dip的大小为1像素,在小米2s的屏幕上显示出来的像素就是 342/160 * 1 = 2.1375像素
)
3.sp——字体单位
主要用来处理字体大小
<5>Android屏幕适配
1.屏幕尺寸:
屏幕尺寸就是屏幕斜对角的距离,单位是英寸,一英寸约等于2.54厘米
2.屏幕分辨率:
分辨率就是屏幕横向和纵向上的像素点个数,单位是像素(px),例如320*480
3.屏幕像素密度:
dpi(dots per inch),简单来说就是一英寸有多少个像素点
如何计算dpi呢?
(例如有一部手机,屏幕尺寸4.3英寸,分辨率1280*720
——首先通过勾股定理计算出对角线上的像素点的个数 1468
——然后dpi=对角线上的像素点/屏幕尺寸 即 1468/4.3=342 dpi
)
4.如何支持各种屏幕尺寸:
dp是支持屏幕适配的,根据屏幕的大小不同而显示的内容的像素大小也不同
通过以下几个方面动态地改变内容的大小:
——wrap_content(包裹内容)
——match_parent (填充父控件,也可以理解为自动匹配父控件)
——weight (权重)
5.面试中关于屏幕适配的问题如何回答?
——在安卓App开发中,使用图片素材是必须的,图片的适配,可以通过做多套图片,放置于不同图片资源文件夹中来解决
当然,相同的图片,名字要相同,系统会根据不同屏幕尺寸加载不同大小的图片
其实,在实际开发中,大部分情况只做一套图片,部分图片需要做多套,比如说启动界面之类的
为什么只做一套呢?一方面是为公司节省成本,另外一方面是如果多套图片,会导致App过于臃肿,上线时整体size比较大,用户下载的话需要耗费较多的流量
——通过设置dimens.xml文件进行适配
在不同屏幕尺寸的dimens.xml文件里设置特定的高度宽度值,系统会根据屏幕的尺寸去读取不同的尺寸值
——布局文件的适配,这个在横竖屏幕切换方面使用比较多
因为横屏和竖屏的宽度改变了,而布局也相应地改变才更好看,这样有必要去写两套布局,系统会根据屏幕的横竖屏状态來选择显示的布局
因为在横竖屏幕切换之后,activity的生命周期会改变,会在onCreate的时候加载布局,当然,里面的数据是不变的
——使用权重进行适配,在写布局的时候经常使用权重去进行屏幕尺寸的适配,因为权重是一点的,也就是控件占的份额是一定的,但大小会根据屏幕尺寸的大小进行改变,这样的就可以达到适配的效果
——还可以通过代码去实现屏幕适配
通过代码动态地获取到屏幕的宽度,对单位进行换算,比如像素与dip的转换,或者相反,我们还可以动态地计算比例來确定控件在当前屏幕尺寸的大小