Android开发系列8——纯代码+XML混编UI界面

前言

  Android应用的UI组件大多数都在Android.widget包及其子包、Android.view包及其子包中。Android应用的所有UI组件都继承View类,View组件类似IOS中的UIView,代表一个白色的显示UI区域。

  View类还要一个重要的子类:ViewGroup(容器类)。

  Android所有的UI组件底层都是继承于View,一些组件继承于ViewGroup的子类。Android在UI开发过程中采用的”组合器“设计模式进行UI的布局。 布局都是依靠一个UI容器(ViewGroup),在容器内添加UI组件的方式。

UI布局

   Android开发过程中,会遇到各种样式的UI开发,程序员都有自己的开发习惯,有的热衷于纯代码开发,有的人会选择XML,还有的会选择混合使用。

  接下来用三个例子,讲解三种模式的UI开发

一、纯代码(不推荐)

在Activity的onCreate方法中,直接开发书写UI布局

// 导入 头文件
import java.util.Date;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
		// 线性布局LinearLayout是ViewGroup的子类
        LinearLayout layout = new LinearLayout(this);
        super.setContentView(layout);

        layout.setOrientation(LinearLayout.VERTICAL);

        final TextView show = new TextView(this);
        Button btn = new Button(this);
		
		// R.string.MainBtn MainBtn是在res/values/string.xml定义的按钮名字
        btn.setText(R.string.MainBtn);
        btn.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));

        layout.addView(show);
        layout.addView(btn);


        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                show.setText("Hello World, " + new Date());
            }
        });
}

运行结果如图所示:纯代码UI布局
  在上述代码中,可以看到所有UI组件在创建过程中都会把当前Activity(this)传给组件。点击组件初始化方法,可以看到创建UI组件时需要传入一个Context 类参数。

  查看Android官方文档Context的解释如下:

  Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc.

从上述可知Context一下三点作用:

  • 它描述的是一个应用程序环境的信息,即上下文。
  • 该类是一个抽象(abstract class)类,Android提供了该抽象类的具体实现类
  • 通过它我们可以获取应用程序的资源和类,也包括一些应用级别操作,例如:启动一个Activity,发送广播,接受Intent

Android中的Activity、Service都继承于Context,所以UI组件通过this获取Context传给UI组件。

二、XML(推荐)

Android的Activity页面的类如下:

// 导入 头文件
import java.util.Date;


//Activity内的onCreate方法
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        final TextView show = findViewById(R.id.show);


        Button nextBtn = findViewById(R.id.btn);
        nextBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                show.setText("Hello World, " + new Date());
   }

对应Activity的XML UI布局文件如下

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:id="@+id/root"
    >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="@+id/root"

        android:id="@+id/show"
        >
    </TextView>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/btn"
        android:text="@string/MainBtn"

        app:layout_constraintStart_toStartOf="@+id/root"
        app:layout_constraintTop_toBottomOf="@+id/show"
        app:layout_goneMarginBottom="10dp"
        >

    </Button>
</androidx.constraintlayout.widget.ConstraintLayout>

通过XML布局UI,把所有的UI组件都创建在XML文件中,通过Activity进行控制UI组件。

三、XML + 代码

  Android通过XML+代码的方式,就不详细列举了。可以参考前两种的方式。

总结

  Android的UI开发,更多的采用XML的方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值