这是 Android 早期的开发方式,用 Java 或 Kotlin 代码配合 XML 布局文件 来构建界面。(简单了解即可)
分离式开发:
activity_main.xml),用各种控件(TextView、Button 等)拼出界面。MainActivity.java),通过 findViewById() 连接界面和代码。
这是 Google 推出的 声明式 UI 框架,用 Kotlin 代码直接构建界面,无需 XML。(前面的路以后再来探索吧)
activity中有很多控件

比如说我们的按钮Button,它继承于TextView

TextView又继承于我们的View
注:View是安卓当中所有的UI(User Interface)控件的父类


布局和Java代码做关联,页面启动的时候就会运行onCreate方法(暂时这么理解)
package com.xlong.myapplication;
import android.os.Bundle;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});
TextView textView = new TextView(this);//创建一个控件对象,this指当前的activity上下文(理解不是很深刻)
textView.setTextSize(100);
textView.setText("luo po gu zhong han feng chui");
textView.setBackgroundColor(Color.GRAY);
int w = ViewGroup.LayoutParams.MATCH_PARENT;//MATCH_PARENT代表控件宽度会填满父容器
//换个说法:当前控件的宽度与父布局大小一样,就是左右两边顶着屏幕
int h = ViewGroup.LayoutParams.WRAP_CONTENT;//设置控件的高度,根据内容自动调整;
//换个说法:当前控件大小正好能包含里面的内容,上下顶着文字
ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(w,h);//创建布局参数的对象
//添加到当前的activity中
addContentView(textView,layoutParams);//属于activity的方法,把配置好的TextView添加到根布局中去
//可以理解成把当前控件和当前页面做关联
}
}
"ViewGroup.LayoutParams"这是静态内部类

MainActivity对应一个页面()这里我们创建一个TextView对象,设置文本的尺寸,内容,背景色。

这里的this指的是当前的activity,可以近似看作是应用中的 “页面”,四大组件之一的Activity主要负责管理应用的用户界面(UI),能够承载布局文件(比如 XML 布局)。
我们可以在activity_main.xml中声明控件,比如说button,switch(前面的路以后再来探索吧QWQ)
声明很多控件,来控制页面

这些控件本质上都是xml代码,右上角可以切换code代码。 Android会为view以及它的子类,提供xml的引用形式


这是分割视图
我们用xml方式自己添加一个图片控件,把文本控件给挡住了
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher_round"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
这里ImageView最后四行代码会让图片在父容器中居中,父容器指的就是androidx.constraintlayout.widget.ConstraintLayout

ConstraintLayout(约束布局)就是当前布局的一种情况 它借助为视图(View)设置约束条件(像与其他视图的**相对位置**、距离等)来实现布局。

类比——设置LinearLayout(线性布局)属性,定义布局 它会按照水平或者垂直的单一方向来排列子视图。


通常我们不会直接使用group,而是通过它的子类来使用。这也再一次印证了view是所有控件的父类,


下面那个方法是父类提供的,这个方法让java页面与xml布局进行关联

R指的是当前工程下res下的工程资源在java代码下的映射
访问布局R.layout.activity_main 类比 访问图片R.mipmap-xhdpi.ic_launcher

(暂时先这么理解,前方的路,以后再来探索吧QWQ)
第一个红框控制沉浸式
第二个是为了有更好的沉浸式体验

有无这两行代码的区别
注意手机顶部很明显有大不同。

在安卓中,所有的UI控件或者布局,都是View的子类。我们可以使用Java或者xml的形式来引用它们。
