热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AndroidButton及其子类,字节跳动Android岗经典面试真题

publicvoidonClick(Viewv){Toast.makeText(ButtonActivity.this,“btn_1点击事件MyOnClickListener”,

public void onClick(View v) {

Toast.makeText(ButtonActivity.this,“btn_1点击事件MyOnClickListener”,Toast.LENGTH_SHORT).show();

}

}

交互事件小结


  • Button的setOnClickListener优先级比xml中android:onClick高,如果同时设置点击事件,只有setOnClickListener有效。

  • TextView也可以实现onClick事件,如果部分Button使用麻烦可以考虑使用TextView来代替。

Button显示字母大写


解决方案:设置属性android:textAllCaps="false"即可解决

Button设置backgroud无效


解决方案:默认的颜色设置来自于res/values/themes.xml。

将里面的主题parent="Theme.MaterialComponents.DayNight.DarkActionBar"改为(其他主题也可以)parent=“Theme.MaterialComponents.DayNight.DarkActionBar.Bridge”。

Button点击文字变色



方法一

定义一个drawable文件,代码如下:



方法二

1.首先你要在你的color文件下加入几个你需要的色值,注意不同的是不是一般的color标签,而是drawable标签,代码如下:

#ff0000

#000000

#FFFFFF

2.定义一个drawable文件,就和正常的selector文件差不多,唯一的区别就是把drawable字段变成color在里面引入你刚刚定义的颜色,代码如下:

android:color="@drawable/drawable_color_black" />

把drawable文件设置为textColor选项就可以了。

以上就是本文Button的全部内容,咱们下面看看他的子类。

RadioButton

===========

RadioButton 单选按钮,继承自 Button,所以拥有 Button 的所有公开属性和方法RadioButton 只有两个状态,选中与未选中,所以也就只有一个属性是最重要的,那就是 android:checked(设置或获取 RadioButton 的选中状态)。

实例

在布局文件中添加RadioButton

android:id="@+id/rb_red"

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:text=“红色”

android:textColor="@color/color_ff0000"

android:textSize="@dimen/text_size_18" />

在Activity中添加一个 OnCheckedChangeListener 事件处理器

rb_red.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

@Override

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

//isChecked用于判断 RadioButton 是否选中

if(isChecked){

MLog.e(“选中”);

}else{

MLog.e(“未选中”);

}

}

});

「isChecked」 用于判断RadioButton是否选中。

咱们看运行效果

然后你会发现 只能选中不能取消,说好的单选按钮,怎么成了选择按钮,并且效果图上同时选择了两种颜色。这只能说明我们实现了单选按钮,而不能说我们实现了单选功能。

实现单选功能的方案


  • 1.通过代码进行判断来取消其他按钮的选中状态。

  • 2.引入RadioGroup

RadioGroup 单选按钮组


RadioGroup 用于将几个 RadioButton 组在一起形成单选按钮组,实现单选功能,也就是选中一个,会取消其它选项的选中。

RadioGroup 初始化时可以所有选项都未选中,但一旦选中了就没办法取消不选中某个了,除非手动调用 clearCheck() 方法。

如果想改变 RadioGroup 里 RadioButton 的排列方式,可以使用属性 android:orientation。

在布局文件中添加控件

新增1个RadioGroup和2个RadioButton,要为每个 RadioButton 添加一个 id,不然单选功能会生效

android:id="@+id/rg"

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_gravity=“center_horizontal”

android:orientation=“horizontal”>

android:id="@+id/rb_liangpi"

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:text=“凉皮”

android:textSize="@dimen/text_size_18" />

android:id="@+id/rb_roujiamo"

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:text=“肉夹馍”

android:textSize="@dimen/text_size_18" />

在Activity中添加一个 OnCheckedChangeListener 事件处理器

这个OnCheckedChangeListener**「来自RadioGroup」**,而不是RadioButton的CompoundButton.OnCheckedChangeListener。

rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

@Override

public void onCheckedChanged(RadioGroup group, int checkedId) {

if(checkedId==R.id.rb_liangpi){

MLog.e(“选择了凉皮”);

}else{

MLog.e(“选择了肉夹馍”);

}

}

});

咱们看运行效果

如此单选按钮功能就实现了,下面咱们看看他的兄弟CheckBox(复选框)。

CheckBox

========

CheckBox 复选框,除了从 Button 继承而来的属性外,没有自己的属性,但从 CompoundButton 继承了一个属性 android:checked 用于表示是否选中。

可以把多个 CheckBox 放在一起实现同时选中多项,但是,它们之间没有任何关系,一个的选中并不会影响另一个选中或者不选中。

实例

在布局文件中添加几个CheckBox

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:orientation=“vertical”>

android:id="@+id/cb_yan"

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:checked=“true”

android:text=“加盐”

android:textSize="@dimen/text_size_18" />

android:id="@+id/cb_cu"

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:text=“加醋”

android:textSize="@dimen/text_size_18" />

android:id="@+id/cb_lajiao"

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:text=“加辣椒”

android:textSize="@dimen/text_size_18" />

在Activity中为每个CheckBox添加一个 OnCheckedChangeListener 事件处理器

cb_cu.setChecked(true);

cb_yan.setOnCheckedChangeListener(this);

cb_cu.setOnCheckedChangeListener(this);

cb_lajiao.setOnCheckedChangeListener(this);

@Override

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

switch (buttonView.getId()){

case R.id.cb_yan:

if(isChecked){

MLog.e(“选中加盐”);

}else{

MLog.e(“未选中加盐”);

}

break;

case R.id.cb_cu:

if(isChecked){

MLog.e(“选中加醋”);

}else{

MLog.e(“未选中加醋”);

}

break;

case R.id.cb_lajiao:

if(isChecked){

MLog.e(“选中加辣椒”);

}else{

MLog.e(“未选中加辣椒”);

}

break;

}

}

咱们看运行效果

然后你
会发现它们之间没有任何关系,一个的选中并不会影响另一个选中或者不选中。都是**「一个独立的个体」**。

如此CheckBox功能就实现了,下面咱们看看他的兄弟Switch(开关)。

Switch

======

  • Switch 继承自 Button 和 CompoundButton,所以拥有它们的属性、方法和事件;

  • Switch和ToggleButton一样,都允许我们在两个状态之间切换,有点类似于现在流行的滑动解锁;

  • Switch 有别于 ToggleButton 的地方,就是外观上会同时显示 「开」「关」 的文本,有利于引导用户操作,比如 ToggleButton 在开的时候只会显示开的文本,但点一下会发生什么是未知的,但 Switch 就不一样了,很明切告诉你,你点了之后会发生什么。

Switch的XML属性


实例

在布局文件中添加Switch

android:id="@+id/switch_power"

android:layout_width=“wrap_content”

android:layout_height=“50dp”

android:textOn=“同意”

android:textOff=“不同意”

android:text=“权限”

android:showText=“true”

android:checked=“true”

android:textSize="@dimen/text_size_18" />

在Activity中为Switch添加 OnCheckedChangeListener 事件处理器

switch_power.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

@Override

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

if(isChecked){

MLog.e(“已同意”);

}else{

MLog.e(“未同意”);

}

}

});

咱们看运行效果

如果你对原生的按钮不爽,那你就自定义 Switch 外观,我们可以属性 android:track 和 android:thumb 定制 Switch 的背景图片和滑块图片

不过要注意,每个图片都有两种状态,开 和 关,而且有个比较坑的地方,就是图片资源多大,Switch 就多大,如果需要改变,就要通过 Java 获得 Drawable 对象,然后对大小进行修改。

如此Switch功能就实现了,下面咱们看看他的兄弟ToggleButton(开关按钮)。

ToggleButton

============

ToggleButton (开关按钮) 允许我们在两个状态之间切换,有点类似于灯的开关。 ToggleButton 和 Switch 一样都继承自 CompoundButton ,所以都有 Button 的属性和方法,又有 CompoundButton 的属性 android:checked

实例

在布局文件中添加ToggleButton

android:id="@+id/tb_power"

android:text=“Power”

android:textOn=“开灯”

android:textOff=“关灯”

android:checked=“true”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content” />

android:id="@+id/tb_power2"

android:text=“Power”

android:textOn=“开灯”

android:textOff=“关灯”

android:layout_width=“wrap_content”
就要通过 Java 获得 Drawable 对象,然后对大小进行修改。

如此Switch功能就实现了,下面咱们看看他的兄弟ToggleButton(开关按钮)。

ToggleButton

============

ToggleButton (开关按钮) 允许我们在两个状态之间切换,有点类似于灯的开关。 ToggleButton 和 Switch 一样都继承自 CompoundButton ,所以都有 Button 的属性和方法,又有 CompoundButton 的属性 android:checked

实例

在布局文件中添加ToggleButton

android:id="@+id/tb_power"

android:text=“Power”

android:textOn=“开灯”

android:textOff=“关灯”

android:checked=“true”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content” />

android:id="@+id/tb_power2"

android:text=“Power”

android:textOn=“开灯”

android:textOff=“关灯”

android:layout_width=“wrap_content”


推荐阅读
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了一款名为TimeSelector的Android日期时间选择器,采用了Material Design风格,可以在Android Studio中通过gradle添加依赖来使用,也可以在Eclipse中下载源码使用。文章详细介绍了TimeSelector的构造方法和参数说明,以及如何使用回调函数来处理选取时间后的操作。同时还提供了示例代码和可选的起始时间和结束时间设置。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • 本文介绍了一个Magento模块,其主要功能是实现前台用户利用表单给管理员发送邮件。通过阅读该模块的代码,可以了解到一些有关Magento的细节,例如如何获取系统标签id、如何使用Magento默认的提示信息以及如何使用smtp服务等。文章还提到了安装SMTP Pro插件的方法,并给出了前台页面的代码示例。 ... [详细]
  • 今天就跟大家聊聊有关怎么在Android应用中实现一个换肤功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根 ... [详细]
  • android 触屏处理流程,android触摸事件处理流程 ? FOOKWOOD「建议收藏」
    android触屏处理流程,android触摸事件处理流程?FOOKWOOD「建议收藏」最近在工作中,经常需要处理触摸事件,但是有时候会出现一些奇怪的bug,比如有时候会检测不到A ... [详细]
author-avatar
手机用户2702939047
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有