Android开发 - 视图布局xml属性解析

  • xmlns:声明命名空间的保留字(Java中已经定义过的),其实就是XML中元素的一个属性

  • xmlns:app:在使用library编译文件)自定义属性时,命名空间URI需要使用http://schemas.android.com/apk/res-auto,在编译时,URI会自动替换为当前apppackage名,下面是使用support lib的属性(编译后apk的属性)例子

    <android.support.v4.widget.DrawerLayout
        android:id="@+id/dl_main_drawer"
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">
    
        <!-- 你的内容布局-->
        <include layout="@layout/navigation_content"/>
    
        <android.support.design.widget.NavigationView
            android:id="@+id/nv_main_navigation"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            app:headerLayout="@layout/navigation_header"
            app:menu="@menu/drawer_view"/>
    
    </android.support.v4.widget.DrawerLayout>
    
  • xmlns:android:命名空间 android 用于 Android 开发定义或布局的一些属性,例如Android视图开发中所使用的android:id、android:layout_width、android:layout_height、android:layout_weight...等等,这其中的前缀android都必须声明它的命名空间后才可以使用它操作属性。定义命名空间的规则为:xmlns:namespace-prefix=“namespaceURI”,安卓开发中即xmlns:前缀=http://schemas.android.com/apk/res/应用程序包路径,若要使用android作为前缀既为xmlns:android=http://schemas.android.com/apk/res/android

  • FrameLayout:称作帧布局,这个布局可以直接在屏幕上开辟出一块空白的区域,当我们往里面添加控件的时候,会默认把他们放到这块区域的左上角,而这种布局方式却没有任何的定位方式,所以它应用的场景并不多;帧布局的大小由控件中最大的子控件决定,如果子控件的大小一样大的话,那么同一时刻就只能看到最上面的那个子控件,后续添加的子控件会覆盖前一个,虽然默认会将子控件放置在左上角,但是子空间也可以通过android:layout_gravity属性指定到其他的位置。FrameLayout的属性很少就以下两个:

    1. android:foreground:设置帧布局容器的前景图像,一般赋值为@drawable/xx,@代表引用资源,意思就是引用drawable文件夹中的xx图片文件
    2. android:foregroundGravity:设置前景图像显示的位置,可以把前景图像设置在左上角或右下角等角的地方,右下角应赋值为bottom|right,左上角应赋值为top|left
    • 前景图像:永远处于帧布局最上面,直接面对用户的图像,就是不会被覆盖的图片
  • LinearLayout:称作线性布局,主要以android:orientation的属性设置来排列界面中的控件是水平或是垂直。并将控件排列到一条直线上。在线性布局中,如果水平排列,垂直方向上只能放一个控件,如果垂直排列,水平方向上也只能放一个控件

  • RelativeLayout:称作相对布局,非常常用的一种布局。和LinearLayout的排列规则不同,RelativeLayout显得更加随意一些,它可以通过相对定位的方式让控件出现在布局的任何位置,是一种根据父容器和兄弟控件作为参照来确定控件位置的布局方式。相对布局不是绝对定位,而是相对于其父容器或其他控件进行定位,提供了灵活性,允许开发者创建复杂的界面结构

  • android:layout_width、android:layout_height:用于指定视图组件的宽度与高度,这两个属性可以接受以下3种类型的值:

    1. 具体数值:如50dp100px等,这种方式将直接设置视图组件的具体大小
    2. match_parent:视图组件的大小将与其父容器的大小相同。在LinearLayout中,match_parent将占据所有可用空间;在RelativeLayout中,match_parent将占据相对于其他视图组件的位置
    3. wrap_content:视图组件的大小将根据其内容动态调整。例如,一个TextView的大小将根据文本的多少自动调整
  • android:layout_weight:该属性用于在水平或垂直方向上分配额外的空间。当多个视图组件共享相同的空间时,layout_weight将决定它们如何分配这些空间。例如,在一个水平LinearLayout中,如果两个按钮的layout_width都设置为0dp(表示不占用固定空间),然后分别设置它们的layout_weight为1和2,那么第二个按钮将占据的空间将是第一个按钮的两倍

  • android:layout_marginTop:指定该属性所在控件距上部最近控件的像素值(dp)

  • android:layout_marginBottom:指定该属性所在控件距下部最近控件的像素值(dp)

  • android:layout_marginLeft:指定该属性所在控件距左边最近控件的像素值(dp)

  • android:layout_marginRight:指定该属性所在控件距右边最近控件的像素值(dp)

  • android:id:ID是Android中布局文件中的控件引用的一个“标签”,它是在.xml文件中人为手动创建,如果想要引用布局文件中的控件,必须得为其设置ID属性,设置ID属性的方式有id=”@+id/xx”和id=”@id/xx

    • @+id/xx:在.xml布局文件中,是为该控件生成一个ID,其名"xx",在后面引用该控件时以“R.id.xx”的形式引用。意思是R文件中生成int xx=value,有两种情况:

      1. R文件中不存在xx变量,则生成int xx=value即为控件新建一个id值
      2. 若R文件中已存在xx变量,则不再新建,直接引用该变量对应的id值
      • 例如Button组件中,android:id="@+id/Next_button",是为该Button设置一个名为Next_button的ID;但在R.java中我们可以看到,android studio 底层已经为我们建立好了 Next_button的 地址,只需按一定的格式(R.id.xx)引用即可: mNextButton = (Button) findViewById(R.id.next_button)
    • @id/xx:在.xml布局文件中,提取已存在的值为该控件设置ID,如果不存在就会报错。为了重用id,可以在res/values目录下创建一个ids.xml文件, 在其中定义可以重用的id,然后在其他布局文件中使用@id引用(这样可以减少R.java文件中生成的ID数量)

  • android:orientation:在线性布局中,控件排列有水平和垂直两个方向,控件排列方向由 android:orientation 属性来控制,该属性需要加在 LinearLayout 标记的属性中从而设置该控件内的控件布局排列朝向:

    • android:orientation = "horizontal":指定布局内控件排列方式为 水平排列
    • android:orientation = "vertical":指定布局内控件排列方式为 垂直排列
  • gravity:在android视图布局中,我们经常会用到“重心”gravity这个属性。但是gravity有两种不同的类型:

    1. android:gravity:控件自身内容对自己的限定,一般赋值为 android:gravity = "center" 让控件自身内的内容(text文本、button按钮等)居中排列

    2. android:layout_gravity:与gravity属性不同的是,layout_gravity属性是用来设置该View相对与父View的位置,以下提供两种赋值使用类型:

      1. android:layout_gravity="center_horizontal":以父Vieworientation = "vertical"垂直为准,水平居中于父View
      2. android:layout_gravity="center_vertical":以父Vieworientation = "horizontal"水平为准,垂直居中于父View
      • 注意事项:子控件如果选择横或纵居中,这种属性声明是不能和父布局的排列方式相冲的,案例如下:
        1. android:layout_gravity="center_horizontal":以父Vieworientation = "horizontal"水平为准,相冲位置不变
        2. android:layout_gravity="center_vertical":以父Vieworientation = "vertical"垂直为准,相冲位置不变
  • scaleType:scaleType的设置方式有以下两种:

    1. android:scaleType="xxx":在layout的xml中定义android:scaleType="xxx",取值范围为matrix、fitXY、fitStart、fitCenter、fitEnd、center、centerCrop、centerInside,默认取值为fit_center。可以参考一下例子:
      • android:scaleType="center"
        • 当图片大于ImageView的宽高:以图片的中心点和ImageView的中心点为基准,按照图片的原大小居中显示,不缩放,用ImageView的大小截取图片的居中部分
        • 当图片小于ImageView的宽高:直接居中显示该图片
      • android:scaleType="centerCrop"
        • 当图片大于ImageView的宽高:以图片的中心点和ImageView的中心点为基准,按比例缩小图片,直到图片的宽高有一边等于ImageView的宽高,则对于另一边,图片的长度大于或等于ImageView的长度,最后用ImageView的大小居中截取该图片
        • 当图片小于ImageView的宽高:以图片的中心店和ImageView的中心点为基准,按比例扩大图片,直到图片的宽高大于或等于ImageView的宽高,并按ImageView的大小居中截取该图片
      • android:scaleType="centerInside"
        • 当图片大于ImageView的宽高:以图片的中心和ImageView的中心点为基准,按比例缩小图片,使图片宽高等于或者小于ImagevView的宽高,直到将图片的内容完整居中显示
        • 当图片小于ImageView的宽高:直接居中显示该图片
      • android:scaleType="fitCenter":把图片按比例扩大(缩小)到ImageView的宽或高其中一个,居中显示
      • android:scaleType="fitStart":把图片按比例扩大(缩小)到ImageView的宽或高其中一个,在ImageView的上方显示
      • android:scaleType="fitEnd":把图片按比例扩大(缩小)到ImageView的宽或高,在ImageView的下方显示
      • android:scaleType="fitXY":把图片按指定的大小在ImageView中显示,拉伸或收缩图片,不保持原比例,填满ImageView
      • android:scaleType="matrix":运用图片进行绘制时的矩阵进行缩放,该矩阵可以通过imageView.setImageMatrix(matrix)进行设置。默认情况下展现形式为:不进行任何缩放,从ImageView的左上角开始摆放,原图超过ImageView的部分作裁剪处理
    2. imageView.setScaleType(ImageView.ScaleType.XXX):在java代码中调用imageView.setScaleType(ImageView.ScaleType.XXX),取值范围为ImageView.ScaleType.MATRIX、ImageView.ScaleType.FIT_XY、ImageView.ScaleType.FIT_START、ImageView.ScaleType.FIT_CENTER、ImageView.ScaleType.FIT_END、ImageView.ScaleType.CENTER、ImageView.ScaleType.CENTER_CROP、ImageView.ScaleType.CENTER_INSIDE,默认取值为ImageView.ScaleType.FIT_CENTER
  • android:background:设置控件背景颜色,赋值为十六进制颜色代码,例如:#FFFFFF即为白色

  • android:text:标题文本

  • android:textAllCaps:文本是否为大写,取值范围为true、false

  • android:textColor:文本颜色,赋值为十六进制颜色代码,例如:#FFFFFF即为白色

  • android:textSize:文本大小

  • <item android:state_pressed="true/false" ... />:其中...为代码体,android:state_pressed="true"时即按钮按下时触发...的代码体,android:state_pressed="false"时即按钮松开时触发...的代码体

  • android:src:这是一个图片按钮的部分代码,一般赋值为@drawable/xx,@代表引用资源,意思就是引用drawable文件夹中的xx图片文件

posted @ 2024-07-17 21:11  阿俊学JAVA  阅读(15)  评论(0编辑  收藏  举报