Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >速读原著-Android应用开发入门教程(基本控件的使用)

速读原著-Android应用开发入门教程(基本控件的使用)

作者头像
cwl_java
发布于 2020-02-13 09:04:26
发布于 2020-02-13 09:04:26
1.4K00
代码可运行
举报
文章被收录于专栏:cwl_Javacwl_Java
运行总次数:0
代码可运行

7.2 基本控件的使用

Android 中的基本视图是 GUI 中通常直接使用的一些类,例如:字符区域、按钮、图像区域、图像按钮、进度条等。

7.2.1.普通按钮

这里介绍普通按钮的使用,最普通的按钮是各种 GUI 系统中都类似的按钮,另外一种 ToggleButton 是具有开关两种状态的按钮。 参考示例程序:Buttons1(ApiDemo=>Views=>Buttons1) 源代码:com/example/android/apis/view/Buttons1.java 布局文件:buttons_1.xml Buttons1 程序的运行结果如图所示:

界面比较简单,前两个按钮是 Button 类,表示普通的按钮;第三个按钮是 ToggleButton 类,表示可以进行开关操作的按钮。

这个活动的源代码很简单,实际上只有布局文件有特殊点。buttons_1.xml 的内容如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 <LinearLayout 
	 android:layout_width="wrap_content" 
	 android:layout_height="wrap_content" 
	 android:orientation="vertical"> 
 <!-- Regular sized buttons --> 
	 <Button android:id="@+id/button_normal" 
	 android:text="@string/buttons_1_normal" 
	 android:layout_width="wrap_content" 
	 android:layout_height="wrap_content" /> 
 <!-- Small buttons --> 
	 <Button android:id="@+id/button_small" 
	 style="?android:attr/buttonStyleSmall" 
	 android:text="@string/buttons_1_small" 
	 android:layout_width="wrap_content" 
	 android:layout_height="wrap_content" /> 
 <ToggleButton android:id="@+id/button_toggle"
	 android:text="@string/buttons_1_toggle" 
	 android:layout_width="wrap_content" 
	 android:layout_height="wrap_content" /> 
 </LinearLayout>

这里主要引用了 3 个控件,2 个 Button 和 1 个 ToggleButton,它们都是 Android 中预定义的控件。 Button 类的扩展关系如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
=> android.view.View 
=> android.widget.TextView 
=> android.widget.Button

Button 类扩展了 TextView 类,TextView 类是 View 的直接扩展者,表示一个文本区域,Android 中以文本为主要内容的各种控件均扩展自这个类。除了按钮之外,TextView 类的另外一个重要的扩展者是可编辑文本区域(EditText)。

按钮类(Button)作为 TextView 类的扩展者,主要的区别表现在外观和使用的方式上,Button 通常要设置处理点击动作的处理器(View.OnClickListener);TextView 类虽然也可以设置这个内容,但是通常不需要这样做。

在本例的布局文件中,使用了 android:text 一个属性来定义在 Button 上面显示的文本,根据帮助,这其实是 TextView 中的一个 XML 属性,在这里被 Button 类继承使用,除了在布局文件中指定,还可以使用setText(CharSequence)在 JAVA 源代码中进行设置。

ToggleButton 类的扩展关系如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 => android.view.View 
 => android.widget.TextView 
 => android.widget.Button 
 => android.widget.CompoundButton 
 => android.widget.ToggleButton

Button 类具有一个名为 CompoundButton(组合按钮)的扩展者CompoundButton 又有了圆形按钮(RadioButton)、选择框(CheckBox)和开关按钮(ToggleButton)3 个扩展者。ToggleButton 比较简单,包含开关两个状态,可以显示不同的文本 textOn(开)和 textOff(关),在使用 ToggleButton 时主要根据CompoundButton 的 isChecked()函数获得其是否选择的状态。

根据 ToggleButton 的帮助可以得知,其特定的 XML 属性包括了以下的内容: android:disabledAlpha:禁止的时候的 Alpha 值,使用浮点数 android:textOff:定义开状态下显示的文本 android:textOn:定义开状态下显示的文本 Android 中的控件在使用上涉及的内容包括了: 在 JAVA 源代码中使用的方法 在布局文件中使用 XML 属性

每个控件本身涉及的内容包括它直接或者间接扩展的类,以及它自己的独特功能。例如,根据上述的继承关系,TextView中能使用的所有内容,都可以在Button中使用,在Button中能使用的内容,都可以在ToggleButton使用。

7.2.2.图像区域

UI 界面上显示图片,是一个常常需要使用到的功能。在 Android 中可以使用图像区域是一个可以直接显示图片文件的控件,可以方便显示一个图片。 参考示例程序:ImageView(ApiDemo=>Views=>ImageView) 源代码:com/example/android/apis/view/ImageView1.java 布局文件:image_view_1.xml ImageView 程序的运行结果如图所示:

图 ImageView 程序的运行结果程序中的图像都是通过 ImageView 类来实现显示的,ImageView 是 View 的直接扩展者,继承关系如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 => android.view.View 
 => android.widget.ImageView 

这里所使用的布局文件的一个片断如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<ImageView 
	 android:src="@drawable/sample_1" 
	 android:adjustViewBounds="true" 
	 android:layout_width="wrap_content" 
	 android:layout_height="wrap_content" /> 
 <ImageView 
	 android:src="@drawable/sample_1" 
	 android:background="#66FFFFFF" 
	 android:adjustViewBounds="true" 
	 android:maxWidth="70dip" 
	 android:maxHeight="70dip" 
	 android:padding="10dip" 
	 android:layout_width="wrap_content" 
	 android:layout_height="wrap_content" />

根据布局文件,可以得知,这里主要用来显示图片的内容是一个 ImageView 标签。它具有一个 android:src属性,这个属性实际上就是用来设置所显示的图片的。

ImageView 又被称为图像视图,是 Android 中可以直接显示图形的控件,其中图像源是其核心。ImageView有多种不同的设置图像源的方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void setImageResource (int resId) // 设置图像源的资源 ID 
void setImageURI(Uri uri) // 设置图像源的 URI 
void setImageBitmap(Bitmap bm) // 设置一个 Bitmap 位图为图像源

使用 ID 的方式表示设置包中预置的图像资源,使用 URI 可以设置文件系统中存储在各种地方的图像等,使用 Bitmap 的方式可以设置一个已经表示为 Bitmap 格式的图像。

ImageView 还支持缩放、剪裁等功能,具有相关的方法进行设置。示例中的第二个图像通过指定最大的宽(android:maxWidth)和高(android:maxHeight)来实现缩小,第三个图像通过指定 android:padding 属性来实现为图像留出一个边缘。

7.2.3.图像按钮

图像按钮是一个带有图片的按钮,从逻辑上可以实现普通按钮功能。图像按钮实际上是结合图像和按钮的双重特性。 参考示例程序:ImageButton(ApiDemo=>Views=>ImageButton) 源代码:com/example/android/apis/view/ImageButton.java 布局文件:image_button_1.xml ImageButton 程序的运行结果如图所示:

这里的布局文件的主要内容如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<ImageButton 
 android:layout_width="100dip" 
 android:layout_height="50dip" 
 android:src="@android:drawable/sym_action_call" /> 
 
 <ImageButton 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:src="@android:drawable/sym_action_chat" /> 
 
 <ImageButton 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:src="@android:drawable/sym_action_email" />

示例中使用了 ImageButton 类作为显示一个带有图像的按钮,扩展关系如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 => aandroid.view.View 
 => aandroid.widget.ImageView 
 => aandroid.widget.ImageButton

图像按钮 ImageButton 扩展了 ImageView,它结合了图像和按钮的功能。ImageButton 除了可以当作按钮来使用,其他方面和 ImageView 基本一致。ImageButton 和 ImageView 的区别也仅在于外观和使用方式上,主要的图像设置方法和 ImageButton 中的一样。ImageButton 特定的是具有一个 onSetAlpha()函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
boolean onSetAlpha(int alpha)

onSetAlpha()函数通过指定 0-255 来指定 Alpha 数值。

事实上,ImageButton 除了在外观上表现成一个按钮的状态,其他方面和 ImageView 基本一样。由于是按钮的功能,在 JAVA 源程序中,ImageButton 通常被设定 OnClickListener 来获得点击时候的响应函数。

由于 JAVA 语言不支持多重继承,因此,在 Android 中图像按钮 ImageButton 只是扩展了 ImageView,和普通按钮 Button 并没有继承(扩展)关系。ImageButton 有一个扩展者是 ZoomButton,这是一个带有动态缩放功能的图像按钮。

7.2.4.进度条

进度条可以用图形的方式显示一个百分比的效果。在 Android 中具有预定义的进度条可以使用。 参考示例程序:ProgressBar1(ApiDemo=>Views=>ProgressBar) 源代码:com/example/android/apis/view/ProgressBar1.java 布局文件:progressbar_1.xml ProgressBar1 程序的运行结果如图所示:

这里的布局文件 progressbar_1.xml 的主要内容如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 <ProgressBar android:id="@+id/progress_horizontal" 
	 style="?android:attr/progressBarStyleHorizontal" 
	 android:layout_width="200dip" 
	 android:layout_height="wrap_content" 
	 android:max="100" 
	 android:progress="50" 
	 android:secondaryProgress="75" />

标签 ProgressBar 是表示了进度条的控件,扩展关系如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 => android.view.View 
 => android.widget.ProgressBar 

ProgressBar 是 android.view.View 的直接扩展者,在 GUI 界面中实现进度条的功能。ProgressBar 比较特殊的地方是这个类还支持第二个进度条,如示例所示,第二个进度条在第一个进度条的背后显示,两个进度条的最大值是相同的。

ProgressBar 的主要参数是进度条的当前值和最大值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int getMax() // 获得进度条的最大值 
void setProgress(int progress) // 设置主进度条的进度
void setSecondaryProgress(int secondaryProgress) // 设置第二个进度条的进度
synchronized int getProgress () // 获得进度值
synchronized int getSecondaryProgress () // 获得第二个进度条的进度

ProgressBar 在使用的时候,要注意最大值和当前值的关系,在 UI 上所呈现的状态,其实是当前值和最大值的一个比例。

在本示例程序中,可以通过按钮来控制进度条,这部分内容是在 JAVA 源代码中实现的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_PROGRESS);
        setContentView(R.layout.progressbar_1);
        setProgressBarVisibility(true);

        final ProgressBar progressHorizontal
                = (ProgressBar) findViewById(R.id.progress_horizontal);
        setProgress(progressHorizontal.getProgress() * 100);
        setSecondaryProgress(progressHorizontal.getSecondaryProgress() * 100);
    }

由于这里使用了 requestWindowFeature(Window.FEATURE_PROGRESS)来获得了将进度条设置到标题栏的当中。因此这里调用了几个 Activity 中的函数,用于设置在标题栏中的进度条。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
final void setProgress(int progress) 
final void setSecondaryProgress(int secondaryProgress) 
final void setProgressBarVisibility(boolean visible)

其中一个按钮的 onClick()调用如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void onClick(View v) { 
	 progressHorizontal.incrementProgressBy(-1); 
	 // Title progress is in range 0..10000 
	 setProgress(100 * progressHorizontal.getProgress()); 
 }

事实上,这里调用的 progressHorizontal 是 ProgressBar 类的一个实例,而标题栏的进度条,是一个单独的内容。

在 Android 中还有一些其他类型的进度条。

参考示例程序:RatingBar1(Views=>RatingBar1) 源代码:com/example/android/apis/view/RatingBar1.java 布局文件:ratingbar_1.xml RatingBar1 程序的运行结果如图所示:

这里的布局文件 ratingbar _1.xml 的主要内容如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<RatingBar android:id="@+id/ratingbar1" 
	 android:layout_width="wrap_content" 
	 android:layout_height="wrap_content" 
	 android:numStars="3"
	 android:rating="2.5" /> 
	 <RatingBar android:id="@+id/ratingbar2" 
	 android:layout_width="wrap_content" 
	 android:layout_height="wrap_content" 
	 android:numStars="5" 
	 android:rating="2.25" /> 
	 <LinearLayout 
	 android:layout_width="fill_parent" 
	 android:layout_height="wrap_content" 
	 android:layout_marginTop="10dip"> 
	 <TextView android:id="@+id/rating" 
	 android:layout_width="wrap_content" 
	 android:layout_height="wrap_content" /> 
	 <RatingBar android:id="@+id/small_ratingbar" 
	 style="?android:attr/ratingBarStyleSmall" 
	 android:layout_marginLeft="5dip" 
	 android:layout_width="wrap_content" 
	 android:layout_height="wrap_content" 
	 android:layout_gravity="center_vertical" /> 
	 </LinearLayout> 
	 <RatingBar android:id="@+id/indicator_ratingbar" 
	 style="?android:attr/ratingBarStyleIndicator" 
	 android:layout_marginLeft="5dip" 
	 android:layout_width="wrap_content" 
	 android:layout_height="wrap_content" 
	 android:layout_gravity="center_vertical" />

这里,一共定义了 4 个 RatingBar 标签,RatingBar 的继承关系如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
=> android.view.View 
=> android.widget.ProgressBar 
=> android.widget.AbsSeekBar 
=> android.widget.RatingBar

AbsSeekBar 是 ProgressBar 的扩展者,这是一个表示绝对进度的类,由于使用的是绝对进度,因此主要区别是 AbsSeekBar 的进度最大值是可以设置的(对应 setMax()函数)。RatingBar 和 SeekBar 两个类又扩展了AbsSeekBar,其中 RatingBar 可以直接用星星的方式来表示进度;SeekBar 可以使用可拖拽的小图标。

RatingBar 是 AbsSeekBar 的一个继承者,AbsSeekBar 和 ProgressBar 的一个主要扩展就是其最大值可以设置。在本例的布局文件中,android:numStars 和 android:rating 等几个属性是 RatingBar 自己的属性。

7.2.5.多种控件

这里介绍一个具有多种控件的示例,它们被包含在一个活动中。 参考示例程序:Controls1(ApiDemo=>Views=>Controls1) 源代码:com/example/android/apis/view/Controls1.java 布局文件:controls_1.xml Controls1 程序的运行结果如图所示:

在界面中包含了:Button(普通按钮)、EditText(可编辑文本区域)CheckBox(复选框)、RadioGroup(单选按钮组)、ToggleButton(开关按钮)、TextView(文本区域)、Spinner(旋转按钮)等控件,这些内容均在布局文件中定义。

在 Android 中使用各种控件基本的原则是在布局文件中可以实现 UI 的外观,然后在 JAVA 文件中实现对各种的控件的控制动作。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/01/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
UI的基本控件设计
在activity_main.xml中添加控件的样式,在MainActivity中可以添加点击事件
Dream城堡
2018/12/13
9010
UI的基本控件设计
toggbutton
2013年8月14日Android记录 很多应用都会有用户设置,用户的一些偏好可以由用户来决定那是应用人性化的体现,在实际开发中很多情况都作成可配置的了,本篇博客要介绍的是一个比较炫的状态按钮切换,我
xiangzhihong
2018/01/26
8020
速读原著-Android应用开发入门教程(列表(List)视图组)
本节介绍的列表(List)视图组可以将某种控件按照列表的形式组织起来,它与网格视图组类似,但是附加了更方便的组织方式。
cwl_java
2020/02/13
5890
速读原著-Android应用开发入门教程(布局(Layout))
布局(Layout)是各个控件在屏幕上的位置关系,视图组的几个扩展类与布局相关。在 Android 中布局通常有以下几种不同的情况:
cwl_java
2020/02/13
8890
Android开发CompoundButton抽象类控件类的使用UI之Radio、Check、Toggle[通俗易懂]
大家好,又见面了,我是你们的朋友全栈君。本篇文章就讲解了一下CompoundButton抽象类下的三个实现控件类的使用,在Android4.0之后,又新加入了一个控Switch,对它的 使用与之上介绍的三个控件类似,这里就不再详细讲解了。
全栈程序员站长
2022/08/15
1.2K0
Android开发CompoundButton抽象类控件类的使用UI之Radio、Check、Toggle[通俗易懂]
跟我学Android之五 常规组件
单选控件——RadioButton 一个普通单选控件的示例 <RadioGroup android:layout_width=“wrap_content” android:layout_height=“wrap_content”> <RadioButton android:id=“@+id/option1” android:layout_width=“wrap_content” android:layout_height=“wrap_content” android:text=“选项1” /> <RadioButton android:id=“@+id/option2” android:layout_width=“wrap_content” android:layout_height=“wrap_content” android:text=“选项2” /> </RadioGroup> 示例: 从一组RadioButton列表中选一项最喜欢的球类运动,在选择后将结果显示在TextView中。
张哥编程
2024/12/17
1570
跟我学Android之五 常规组件
速读原著-Android应用开发入门教程(Android中控件的层次结构)
在各个 GUI 系统中,控件一般都是占内容最多的部分,使用各种控件也是使用一个 GUI 系统的主要内容。
cwl_java
2020/02/13
7630
基于 Android Studio 音乐播放器App
点击右侧文字传送:基于 Android Studio 实现的简易 音乐播放器App_android studio音乐播放器-CSDN博客
编程乐学
2024/07/01
2290
基于 Android Studio  音乐播放器App
速读原著-Android应用开发入门教程(键盘事件的响应)
在应用的程序的控制方面,更多的使用的是屏幕上的控件,但是有的时候也需要直接对键盘事件来进行响应。键盘是 Android 中主要的输入设备,对按键的响应的处理是响应之间在程序中使用键盘的核心内容。
cwl_java
2020/01/15
5540
速读原著-Android应用开发入门教程(自定义的视图)
自定义的 View 的含义是通过扩展的方法,实现一个扩展 android.view.View 类的类,这个类的本质也是一个控件,通过它可以直接构建 UI。
cwl_java
2020/02/13
5440
C002Android学习笔记-初级控件(二)
xml中——textAppearance;代码中——setTextAppearance;
訾博ZiBo
2025/01/06
900
C002Android学习笔记-初级控件(二)
《Monkey Android》第14课ToggleButton和RatingBar
ToggleButton,状态开关按钮,例如ON/OFF,它允许用户在两者之间进行切换。 Switch,开关,类似于生活中的白色墙壁开关。
GitOPEN
2019/01/29
5030
《Monkey Android》第14课ToggleButton和RatingBar
Android常用控件
android:layout_width:指定控件的宽度,可选值:match_parent (fill_parent)和wrap_content ,match_parent 表示让当前的控件的大小和父布局的大小一样,也就是由父布局来决定当前控件的大小;wrap_content表示让当前控件的大小能够刚好包含住里面的内容,也就是由控件内容决定当前大小,也可以设置特定的大小。
全栈程序员站长
2022/09/06
7890
android之SeekBar和RatingBar
今天在看一个音乐播放器的源代码时候用到了SeekBar,就翻出来mars老师的视频复习了一下,然后综合使用了一下.
全栈程序员站长
2022/07/20
4900
Activity数据回传
上一节学习了将简单的数据从MainActivity传递到SecondActivity,本节一起来学习数据如何从SecondActivity回传到MainActivity。 一、简介 前面己经提到,Activity 还提供了一个 startActivityForResult(Intent intent, int requestCode) 方法来启动其他Activity。该方法用于启动指定Activity,而且期望获取指定Activity返回的结果。这种请求对于实际应用也是很常见的,例如应用程序
分享达人秀
2018/03/26
1.6K0
Activity数据回传
速读原著-Android应用开发入门教程(几种独立使用的视图组)
网页视图(WebView)是一个功能强大且常用的控件,它具有许多很好的特性,例如对 js 的支持,可用于制作简易浏览器等。
cwl_java
2020/02/13
5610
ProgressBar、RatingBar和Spinner控件
1、ProgressBar、SeekBar与RatingBar控件 ProgressBar控件,也就是我们通常的进度条控件,可以显示加载的进度等。SeekBar控件,滑块控件,可以根据用户的需要动态为赋值。本例子就是拖动SeekBar,让进度条实时显示拖动的进度。RatingBar控件,星条控件,我们经常见到的打分控件,五颗星星。下面是main.xml页面的代码。我们声明了几个控件。 1 <RelativeLayout xmlns:android="http://schemas.android.com/a
水击三千
2018/02/27
8590
速读原著-Android应用开发入门教程(作为简单容器使用的视图组)
单选按钮组(RadioButton)是一组逻辑上相关的按钮,它们之中只能有一个被选中,单选按钮通常单选按钮被设计成圆形的外观。因此需要一个类将各个单选按钮包含在一起。
cwl_java
2020/02/13
8150
Android开发基础:布局,监听以及一些基础知识
android:layout_width/android:layout_height可选参数
小王不头秃
2024/06/19
1680
用ESP8266+android,制作自己的WIFI小车(Android 软件)用ESP8266+android,制作自己的WIFI小车(ESP8266篇)
先说一下这篇文章里面的内容:TCP 客户端, 自定义对话框, 自定义按钮, ProgressBar竖直显示, 重力感应传感器,手机返回键新开启界面的问题(返回上次的界面),数据保存 软件的通信是配合 http://www.cnblogs.com/yangfengwu/p/7625608.html 用ESP8266+android,制作自己的WIFI小车(ESP8266篇) 软件的第一个界面就一个按钮 点击按钮弹出一个自定义的对话框 连接的时候                              连
杨奉武
2018/04/12
3.3K0
用ESP8266+android,制作自己的WIFI小车(Android 软件)用ESP8266+android,制作自己的WIFI小车(ESP8266篇)
推荐阅读
相关推荐
UI的基本控件设计
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验