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;
        }
    }
相关推荐
懒大王爱吃狼21 分钟前
Python教程:python枚举类定义和使用
开发语言·前端·javascript·python·python基础·python编程·python书籍
待磨的钝刨1 小时前
【格式化查看JSON文件】coco的json文件内容都在一行如何按照json格式查看
开发语言·javascript·json
逐·風4 小时前
unity关于自定义渲染、内存管理、性能调优、复杂物理模拟、并行计算以及插件开发
前端·unity·c#
Devil枫5 小时前
Vue 3 单元测试与E2E测试
前端·vue.js·单元测试
尚梦5 小时前
uni-app 封装刘海状态栏(适用小程序, h5, 头条小程序)
前端·小程序·uni-app
GIS程序媛—椰子6 小时前
【Vue 全家桶】6、vue-router 路由(更新中)
前端·vue.js
前端青山6 小时前
Node.js-增强 API 安全性和性能优化
开发语言·前端·javascript·性能优化·前端框架·node.js
毕业设计制作和分享7 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
从兄7 小时前
vue 使用docx-preview 预览替换文档内的特定变量
javascript·vue.js·ecmascript
清灵xmf9 小时前
在 Vue 中实现与优化轮询技术
前端·javascript·vue·轮询