Android --- 布局与点击事件

View(视图)

此类代表用户界面组件的基本构建块。视图占据屏幕上的一个矩形区域,负责绘图和事件处理。View 是widgets的基类,用于创建交互式 UI 组件(按钮、文本字段等)。

子类是布局ViewGroup的基类,布局是容纳其他视图(或其他视图组)并定义其布局属性的不可见容器。

Android Studio中所说的"视图"通常指的是UI界面上的各种元素,比如按钮、文本框、图像等。在Android开发中,这些UI元素通常被称为"View",它们用于构建用户界面,并且可以通过代码进行操作和控制。

使用视图

窗口中的所有视图都排列在一棵树中。可以通过代码或通过在一个或多个 XML 布局文件中指定视图树来添加视图。有许多专门的视图子类,它们充当控件或能够显示文本、图像或其他内容。

在XML布局文件中定义视图

可以在XML布局文件中使用标记来定义各种视图,比如TextView(文本视图)、Button(按钮)、ImageView(图像视图)等。可以设置视图的属性,如大小、位置、颜色等。

通过Java代码操作视图

在Java代码中,可以通过findViewById()方法找到XML布局文件中定义的视图,并对其进行操作。例如,您可以设置文本视图的文本内容,为按钮添加点击事件监听器等。

设置内容布局(视图)

setContentView(布局id) 要求传入 布局id

复制代码
setContentView(R.layout.chatting_layout);

用代码定义布局

复制代码
1.定义布局
2.设置宽高
3.设置背景颜色
4.设置内容布局
复制代码
// 1.定义布局
LinearLayout linearLayout = new LinearLayout(this);

// 2.设置宽高
linearLayout.setLayoutParams(newViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));

// 3.设置背景颜色
linearLayout.setBackgroundColor(Color.GREEN);

setContentView(linearLayout);*/

共有属性

复制代码
margin: 外边距,控件的外部边缘距离其父容器边缘的距离
padding: 内边距,控件内部的控件距离它边缘的边距
gravity:控件内部的控件相对于它的位置
layout_gravity:控件本身相对于父容器的位置
visibility: 可见状态 gone(不可见也不保留位置) visible(可见) invisible(不可见但保留位置)
……等

布局

线性布局 - LinearLayout

相对布局 - RelativeLayout

帧布局 - FramLayout

约束布局 - ConstraintLayout

网格布局

设置点击事件的四种方法

通过自定义内部类实现点击事件

  • 根据id找到按钮

  • 自定义一个类实现 View.OnClickListener 接口的类,重写里面的 onClick 方法

    // 自定义一个 继承 View.OnClickListener 接口的类,实现里面的方法
    class MyClickListener implements View.OnClickListener{

    复制代码
    @Override
    public void onClick(View v) {
    // 在控制台输入语句 Log.e 输入错误类型,也就是红色语句,不管错误与否
    Log.e("btn_tags","通过自定义内部类实现点击方法");
    }

    }

    // 一、通过自定义内部类实现点击事件(当有多个相似的点击事件时适用)
    // 1.根据id找到按钮
    Button button1 = findViewById(R.id.btn_1);
    // 2.添加事件监听器 -> OnClickListener 对象,这个监听器是一个接口
    MyClickListener onc1 = new MyClickListener();
    button1.setOnClickListener(onc1);

匿名内部类

复制代码
/二、匿名内部类 - 当有唯一操作的按钮时通常使用这种方法
Button button2 = findViewById(R.id.btn_2);
button2.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
  Log.e("btn_niming_tags", "====通过匿名内部类实现点击方法=====");
 }
});

通过当前Activity实现点击事件

让当前的activity类继承 View.OnClickListener 接口并实现里面的点击方法

复制代码
public class ButtonActivity extends AppCompatActivity implements View.OnClickListener {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_button);

        Button button3 = findViewById(R.id.btn_3);
        // this指向本类,本类就是一个继承View.OnClickListener 接口的类
        button3.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Log.e("activity","====通过当前activity实现事件接口=====");
    }
}

button3.setOnClickListener(this);

其中,this指向的是当前类,它已经在里面重写了onClick方法

在xml布局文件中添加点击事件

Button的onclick属性中定义一个方法名,并在对应的activity中实现该方法

复制代码
<Button
    android:id="@+id/btn4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dp"
    android:onClick="myClick"
    android:text="在xml布局文件中绑定添加点击事件属性"/>

<Button
    android:id="@+id/btn5"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dp"
    android:onClick="myClick"
    android:text="btn_5"/>


    public void myClick(View view) {
        // Log.e("xml","====在xml布局文件中绑定添加点击事件属性=====");
        switch (view.getId()){
            case R.id.btn4:
                Log.e("xml_viewId4","====点击btn_4=====");
                break;
            case R.id.btn5:
                Log.e("xml_viewId5","====点击btn_5=====");
                break;
        }
    }
相关推荐
申朝先生8 分钟前
es6的箭头函数与普通函数的区别,箭头函数的this通常指向哪里,箭头函数可以用作构造函数吗?
前端·ecmascript·es6
TheK15 分钟前
MCP到底是什么
前端·人工智能
前端飞天猪16 分钟前
学习笔记:从手动到自动,让版本号管理成为团队的高效习惯
前端·github
关二哥拉二胡18 分钟前
前端的 AI 应用开发系列四:智能体Agent的发展历程
前端·javascript
best66619 分钟前
JS数组遍历方法这么多,for/forEach/forof我该怎么选?
前端·javascript
隐-梵36 分钟前
Android studio学习之路(六)--真机的调试以及多媒体照相的使用
android·学习·android studio
stevenzqzq40 分钟前
Android Studio Logcat V2 使用指南(适配 2024 年版本)
android·ide·android studio
bytebeats41 分钟前
改进 Jetpack Compose 中的 ModalBottomSheet API
android
bytebeats43 分钟前
使用Dagger SPI 查找非必要组件依赖项
android·gradle·dagger
bytebeats1 小时前
在Kotlin中编写依赖于时间的可测试协程代码
android·kotlin·测试