布局的基本知识

一、布局的结构

布局是由View对象和ViewGroup的层次结构共同组成的。如下图所示。

  • View对象用来定义用户可以查看并进行交互的内容,如按钮Button,文本框TextView等都属于View对象。
  • ViewGroup对象是一个不可见的容器,其可以包括View对象以及ViewGroup对象,是用来将View对象以及ViewGroup对象组织成一个结构的。其子类有LinearLayout或者ConstraintLayout对象。
  • 每个布局文件都只能有一个根元素,并且该元素只能是View对象或者ViewGroup对象。此外,根元素确定后,可以添加子元素(View对象或者ViewGroup对象)。

举例:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/wang"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="wang fangjia"
        />
</LinearLayout>

二、布局的属性

View对象和ViewGroup的所有xml属性可以分为三类,一是View对象的特有属性,例如TextView对象的textSize属性;二是所有View对象的共有属性,例如id属性;三是布局参数属性,即用于描述布局方向的属性。

1、id属性

xml文件中,id属性是以字符串形式表现的,经过编译后,系统将会以整型形式引用该id。id属性的写法有两种。首先android框架自身提供了许多id资源,当引用android资源,就需要添加android软件包命名空间,如:

android:id="@android:id/empty"

其次,若需要创建新的布局资源,那么就需要自己创建id资源。此时,@符号需要加号(+)来表示这是一个新的资源名称,需要创建该名称,然后添加到我们的资源R.java文件中(不需要andriod命名空间了)。实际上@+id就是在R.java文件中新增一个id名称,如果之前存在了相同的名称,就会覆盖掉。而@id就是直接引用R.java文件已存在的id资源。

android:id="@+id/wang" //这里的wang就是我们自己取得名字

其中,@符号表示xml解析器应该继续解析后续ID字符串的其余部分。

  • 注意:
    id属性的字符串名称,在同一布局中必须是统一的,不能重名,但是在不同布局中可以同名。
2、布局参数

布局参数用于设定视图的自身大小(长和宽)以及与周围的距离(左边距和上边距)。

<TextView
android:layout_width="100dp" //宽
android:layout_height="200dp" //高
android:layout_marginLeft="10dp" //左边距
android:layout_marginTop="10dp" //上边距
android:text="Hello World!" />

建议不要使用绝对单位(px像素单位)来指定布局的宽度和高度,而是采用相对单位,如与密度无关的像素单位(dp)、wrap_content或者match_parent。这样可以助于应用在不同尺寸的屏幕上都能够正确显示。

  • wrap_content:自动将视图调整为内容所需要的尺寸。
  • match_parent:将视图尽可能采用父类视图所允许的最大尺寸。

px像素与dp像素区别:

  • px像素指的是屏幕上一个物理的像素点,50px像素在不同分辨率下,布局视图的尺寸是不一样的。
  • dp像素是与设备无关的像素,它与像素密度(每英寸包含的像素数目)相关。

三、加载布局资源

当定义好布局结构后,若想android平台获取该布局结构,有两种方法。

  • 通过java代码,在运行时实例化布局元素,如下:
ConstraintLayout constraintLayout = new ConstraintLayout(this);
TextView view = new TextView(this);
view.setText("Hello World!");
constraintLayout.addView(view);

  • 将该布局结构是写在xml文件中的。编译过程中,系统将会把每一个xml文件编译成view资源,放置在项目的res/layout目录下。并且在Activity.onCreate()回调方法中,通过setContentView()方法,以R.layout.xml文件名作为参数调用该布局资源。如:
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.wang);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值