Android开发——UI布局

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的转换,或者相反,我们还可以动态地计算比例來确定控件在当前屏幕尺寸的大小

 

Android开发——UI布局

上一篇:poj 3686 The Windy's


下一篇:第三次实现Logistic Regression(c++)_测试