Android --- 布局与点击事件

devtools/2024/10/11 7:30:30/

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{@Overridepublic 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() {@Overridepublic void onClick(View v) {Log.e("btn_niming_tags", "====通过匿名内部类实现点击方法=====");}
});

通过当前Activity实现点击事件

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

public class ButtonActivity extends AppCompatActivity implements View.OnClickListener {@Overrideprotected 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);}@Overridepublic void onClick(View v) {Log.e("activity","====通过当前activity实现事件接口=====");}
}

 button3.setOnClickListener(this);

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

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

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

<Buttonandroid:id="@+id/btn4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="20dp"android:onClick="myClick"android:text="在xml布局文件中绑定添加点击事件属性"/><Buttonandroid: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;}}

http://www.ppmy.cn/devtools/6626.html

相关文章

美团财务科技后端一面:如何保证数据一致性?延时双删第二次失败如何解决?

更多大厂面试内容可见 -> http://11come.cn 美团财务科技后端一面&#xff1a;项目内容拷打 美团财务科技后端一面&#xff1a;项目相关面试题&#xff0c;主要包含 Zset、延时双删失败重试、热点数据解决、ThreadLocal 这几个方面相关的内容 由于前几个问题是对个人项目的…

记录golang日常错误处理

golang工作错误记录 1.报错:invalid flag in #cgo LDFLAGS: -Wl,–rpath./ 解决方式: export CGO_CFLAGS_ALLOW".*" export CGO_LDFLAGS_ALLOW".*"2.go get失败 解决方式: go env -w GO111MODULEon3.go代理设置 go env -w GOPROXYhttps://goproxy.cn,d…

Python基础:【练手小实验系列】列表、元组、字典、集合

文章目录 题目练习题1: 列表合并和排序练习题2: 元组元素计数练习题3: 字典键值互换练习题4: 集合的交集与并集参考答案练习题1: 列表合并和排序练习题2: 元组元素计数练习题3: 字典键值互换练习题4: 集合的交集与并集题目 练习题1: 列表合并和排序 题目描述: 给定两个已经排…

康谋技术 | 深入探讨:自动驾驶中的相机标定技术

随着自动驾驶技术的快速发展&#xff0c;多传感器的数据采集和融合可以显著提高系统的冗余度和容错性&#xff0c;进而保证决策的快速性和正确性。在项目开发迭代过程中&#xff0c;传感器标定扮演着至关重要的角色&#xff0c;它位于数据采集平台与感知融合算法之间&#xff0…

android学习笔记(四)

1、ExampleInstrumentedTest的解读&#xff1a; /*** Instrumented test, which will execute on an Android device.** see <a href"http://d.android.com/tools/testing">Testing documentation</a>*/ RunWith(AndroidJUnit4.class) public class Exa…

【Linux系统编程】第五弹---基本指令(三)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、grep指令 2、zip/unzip指令 3、tar指令 4、bc指令 5、uname指令 6、重要的几个热键 7、拓展指令 总结 1、grep指令 …

Rust常用特型之AsRef和AsMut特型

在Rust标准库中&#xff0c;存在很多常用的工具类特型&#xff0c;它们能帮助我们写出更具有Rust风格的代码。 今天我们要学习的AsRef和AsMut&#xff0c;和前面学习的Deref和DerefMut有那么一点混淆的地方。 当一个类型U实现了AsRef<T>&#xff0c;那么我们可以高效的从…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之二 简单人脸检测添加戴眼镜效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之二 简单人脸检测添加戴眼镜效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之二 简单人脸检测添加戴眼镜效果 一、简单介绍 二、简单人脸检测添加戴眼镜效…