Android——基本控件(下)(十八)

1. 时钟组件:AnalogClock与DigitalClock

1.1 知识点

(1)掌握AnalogClock与DigitalClock的使用;

1.2 具体内容

package com.example.clockproject;import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;public class ClockActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_clock);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.clock, menu);return true;}}

 时钟组件没有什么太复杂的操作,不过在后面讲解线程操作的时候,会用的此种组件。

1.3 小结

(1)AnalogClock可以完成指针时钟的显示;

(2)DigitalClock可以完成数字时钟的显示。

2. 计时器:Chronometer

2.1 知识点

(1)掌握Chronometer组件的使用及操作;

(2)可以在手机开发中使用震动服务;

2.2 具体内容

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:orientation="vertical"tools:context=".ChronometerActivity" ><Chronometerandroid:id="@+id/myChronometer"android:layout_width="match_parent"android:layout_height="wrap_content"/><LinearLayout android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Button android:id="@+id/butStart"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="开始计时"/><Button android:id="@+id/butStop"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="停止计时"/><Button android:id="@+id/butReset"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="复位"/><Button android:id="@+id/butFormat"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="格式化显示"/></LinearLayout></LinearLayout>

 

package com.example.chronometerproject;import android.app.Activity;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Chronometer;public class ChronometerActivity extends Activity {Button butStart,butStop,butReset,butFormat = null;Chronometer  myChronometer = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_chronometer);butStart = (Button) super.findViewById(R.id.butStart);butStop = (Button) super.findViewById(R.id.butStop);butReset = (Button) super.findViewById(R.id.butReset);butFormat = (Button) super.findViewById(R.id.butFormat);myChronometer = (Chronometer) super.findViewById(R.id.myChronometer);butStart.setOnClickListener(new OnClickListenerImpl());butStop.setOnClickListener(new OnClickListenerImpl());butReset.setOnClickListener(new OnClickListenerImpl());butFormat.setOnClickListener(new OnClickListenerImpl());}private class OnClickListenerImpl implements OnClickListener{@Overridepublic void onClick(View v) {switch(v.getId()){case R.id.butStart:ChronometerActivity.this.myChronometer.start();break;case R.id.butStop:ChronometerActivity.this.myChronometer.stop();break;case R.id.butReset:ChronometerActivity.this.myChronometer.setBase(SystemClock.elapsedRealtime());//设置基准时间break;case R.id.butFormat:ChronometerActivity.this.myChronometer.setFormat("新的格式:%s");//格式化}}}}

计时器的功能并不复杂,但是可以结合一些系统服务,实现一些有意思的操作。

震动必须用真机进行测试。

package com.example.chronometerproject;import android.app.Activity;
import android.app.Service;
import android.os.Bundle;
import android.os.SystemClock;
import android.os.Vibrator;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.Chronometer.OnChronometerTickListener;public class ChronometerActivity extends Activity {Button butStart,butStop,butReset,butFormat = null;Chronometer  myChronometer = null;Vibrator vb = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_chronometer);butStart = (Button) super.findViewById(R.id.butStart);butStop = (Button) super.findViewById(R.id.butStop);butReset = (Button) super.findViewById(R.id.butReset);butFormat = (Button) super.findViewById(R.id.butFormat);myChronometer = (Chronometer) super.findViewById(R.id.myChronometer);butStart.setOnClickListener(new OnClickListenerImpl());butStop.setOnClickListener(new OnClickListenerImpl());butReset.setOnClickListener(new OnClickListenerImpl());butFormat.setOnClickListener(new OnClickListenerImpl());myChronometer.setOnChronometerTickListener(new OnChronometerTickListener() {@Overridepublic void onChronometerTick(Chronometer chronometer) {String time = chronometer.getText().toString();if("0:30".equals(time)){ChronometerActivity.this.vb.vibrate(new long[]{1000,10,1000,100}, 0);//设置震动周期震动的形式}}});vb = (Vibrator) super.getApplication().getSystemService(Service.VIBRATOR_SERVICE);}private class OnClickListenerImpl implements OnClickListener{@Overridepublic void onClick(View v) {switch(v.getId()){case R.id.butStart:ChronometerActivity.this.myChronometer.start();break;case R.id.butStop:ChronometerActivity.this.myChronometer.stop();ChronometerActivity.this.vb.cancel();break;case R.id.butReset:ChronometerActivity.this.myChronometer.setBase(SystemClock.elapsedRealtime());//设置基准时间break;case R.id.butFormat:ChronometerActivity.this.myChronometer.setFormat("新的格式:%s");//格式化}}}}

 手机震动为系统服务,需要获取权限

<uses-permission android:name="android.permission.VIBRATE"/>

2.3 小结

(1)Chronometer可以完成计时器的操作;

(2)如果手机要想完成震动的操作,则可以使用“Service.VIBRATOR_SERVICE ”服务。

3. 标签:TabHost

3.1 知识点

(1)掌握标签组件的使用,并可以使用标签组件进行程序界面分割;

(2)可以通过配置文件完成标签组件的显示;

(3)可以通过程序完成标签组件的显示。

3.2 具体内容

有了标签之后,在一定的屏幕空间就可以显示更多的内容,在这样的界面中,有多个Tab,多个Tab就组成了一个TabHost。

 

 

我们先使用第一种方式来完成,注意观察操作形式。

 

 要继TabActivity的原因在于这种Activity提供两个关键的方法可以让我们完成标签页的创建。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:orientation="vertical"tools:context=".TabHostActivity" ><LinearLayout android:id="@+id/tab_edit"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><EditText android:id="@+id/edt"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="input here..."/><Button android:id="@+id/but"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Serach"/></LinearLayout><LinearLayout android:id="@+id/tab_clock"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><AnalogClock android:id="@+id/clock"android:layout_width="match_parent"android:layout_height="wrap_content"/></LinearLayout><LinearLayout android:id="@+id/tab_sex"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><RadioGroup android:id="@+id/sex"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"android:checkedButton="@+id/woman"><RadioButton android:id="@+id/man"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="MAN"/><RadioButton android:id="@+id/woman"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="WOMAN"/></RadioGroup></LinearLayout>
</LinearLayout>
package com.example.tabhostproject;import android.app.TabActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.widget.TabHost;public class TabHostActivity extends TabActivity {TabHost tabHost = null;int layRes[]={R.id.tab_edit,R.id.tab_clock,R.id.tab_sex};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.tabHost = super.getTabHost();LayoutInflater.from(this).inflate(R.layout.activity_tab_host, //定义要转换的布局管理局this.tabHost.getTabContentView(),//指定标签添加的容器true);//实例化布局管理器中的组件for(int i = 0;i<layRes.length;i++){TabHost.TabSpec myTab = this.tabHost.newTabSpec("tab"+i);myTab.setIndicator("标签"+i);//标签文字myTab.setContent(layRes[i]);this.tabHost.addTab(myTab);//添加标签}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.tab_host, menu);return true;}}

以上的代码是采用直接集成TabActivity来实现的标签页效果,如果你还继承Activity同时还能实现标签页,那么就需要第二种形式。

 

 

package com.example.tabhostproject;import android.app.Activity;
import android.os.Bundle;
import android.widget.TabHost;public class TabHostActivity extends Activity {TabHost tabHost = null;int layRes[]={R.id.tab_edit,R.id.tab_clock,R.id.tab_sex};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);super.setContentView(R.layout.tab_host_widget);tabHost = (TabHost) super.findViewById(R.id.tabhost);this.tabHost.setup();//创建TabHost对象for(int i=0;i<layRes.length;i++){TabHost.TabSpec myTab = this.tabHost.newTabSpec("tab"+i);myTab.setIndicator("标签"+(i+1));//设置标签文字myTab.setContent(layRes[i]);this.tabHost.addTab(myTab);}this.tabHost.setCurrentTab(0);//设置开始索引}
}

 

<TabHost xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/tabhost"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><TabWidgetandroid:id="@android:id/tabs"android:layout_width="match_parent"android:layout_height="wrap_content" /><FrameLayoutandroid:id="@android:id/tabcontent"android:layout_width="match_parent"android:layout_height="match_parent" ><LinearLayoutandroid:id="@+id/tab_edit"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical" ><EditTextandroid:id="@+id/edt"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="input here..." /><Buttonandroid:id="@+id/but"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Serach" /></LinearLayout><LinearLayoutandroid:id="@+id/tab_clock"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical" ><AnalogClockandroid:id="@+id/clock"android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout><LinearLayoutandroid:id="@+id/tab_sex"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical" ><RadioGroupandroid:id="@+id/sex"android:layout_width="match_parent"android:layout_height="wrap_content"android:checkedButton="@+id/woman"android:orientation="vertical" ><RadioButtonandroid:id="@+id/man"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="MAN" /><RadioButtonandroid:id="@+id/woman"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="WOMAN" /></RadioGroup></LinearLayout></FrameLayout></LinearLayout></TabHost>

我们现在实现了和第一种方式同样的显示效果,现在呢我们想要把标签放到屏幕的下方,那么只需要修改两个地方。

<TabHost xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/tabhost"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><TabWidgetandroid:id="@android:id/tabs"android:layout_width="match_parent"android:layout_height="wrap_content" android:layout_alignParentBottom="true"/><FrameLayoutandroid:id="@android:id/tabcontent"android:layout_width="match_parent"android:layout_height="match_parent" ><LinearLayoutandroid:id="@+id/tab_edit"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical" ><EditTextandroid:id="@+id/edt"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="input here..." /><Buttonandroid:id="@+id/but"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Serach" /></LinearLayout><LinearLayoutandroid:id="@+id/tab_clock"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical" ><AnalogClockandroid:id="@+id/clock"android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout><LinearLayoutandroid:id="@+id/tab_sex"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical" ><RadioGroupandroid:id="@+id/sex"android:layout_width="match_parent"android:layout_height="wrap_content"android:checkedButton="@+id/woman"android:orientation="vertical" ><RadioButtonandroid:id="@+id/man"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="MAN" /><RadioButtonandroid:id="@+id/woman"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="WOMAN" /></RadioGroup></LinearLayout></FrameLayout></RelativeLayout></TabHost>

3.3 小结

(1)使用Tab标签可以实现程序的分栏显示;

(2)Tab的实现可以通过继承TabActivity类实现也可以通过配置实现;

(3)通过配置实现的Tab较为麻烦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/90151.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp 实现地图距离计算

在uniapp中实现地图距离计算可以借助第三方地图服务API来实现。以下是一种基本的实现方式&#xff1a; 注册地图服务API账号&#xff1a;你可以选择使用高德地图、百度地图等提供地图服务的厂商&#xff0c;注册一个开发者账号并获取API密钥。 安装相关插件或SDK&#xff1a;根…

C#,《小白学程序》第六课:队列(Queue)的应用,《实时叫号系统》

医院里面常见的叫号系统怎么实现的&#xff1f; 1 文本格式 /// <summary> /// 下面定义一个新的队列&#xff0c;用于演示《实时叫号系统》 /// </summary> Queue<Classmate> q2 new Queue<Classmate>(); /// <summary> /// 《小白学程序》第…

C语言二——依次将10个数输入,要求将其中最大的数输出

这是一个简单的C语言程序&#xff0c;它会接受用户输入的10个整数&#xff0c;然后找出最大值并输出。 程序的执行步骤如下&#xff1a; 声明一个数组 n&#xff0c;用于存储用户输入的10个整数&#xff0c;声明一个变量 i 和 t。提示用户输入10个数。使用 for 循环&#xff…

【TI毫米波雷达笔记】毫米波雷达芯片结构框架解析(以IWR6843AOP为例)

【TI毫米波雷达笔记】毫米波雷达芯片结构框架解析&#xff08;以IWR6843AOP为例&#xff09; 代码解读&#xff1a; blog.csdn.net/weixin_53403301/article/details/132565590文章目录 芯片框架Demo工程功能CCS工程导入工程叙述Software TasksData PathOutput information s…

leetcode438. 找到字符串中所有字母异位词(java)

滑动窗口 找到字符串中所有字母异位词滑动窗口数组优化 上期经典 找到字符串中所有字母异位词 难度 - 中等 Leetcode 438 - 找到字符串中所有字母异位词 给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词 的子串&#xff0c;返回这些子串的起始索引。不考虑答案输出…

R语言响应面(RSM)、线性模型lm分析生产过程影响因素可视化

全文链接&#xff1a;https://tecdat.cn/?p33499 响应面&#xff08;Response Surface Methodology&#xff0c;RSM&#xff09;分析是一种常用的统计方法&#xff0c;用于研究和优化生产过程中的影响因素。通过建立数学模型来描述因素与响应之间的关系&#xff0c;RSM可以帮助…

PyTorch 深度学习实践 第10讲刘二大人

总结&#xff1a; 1.输入通道个数 等于 卷积核通道个数 2.卷积核个数 等于 输出通道个数 1.单通道卷积 以单通道卷积为例&#xff0c;输入为&#xff08;1,5,5&#xff09;&#xff0c;分别表示1个通道&#xff0c;宽为5&#xff0c;高为5。假设卷积核大小为3x3&#xff0c…

一篇文章搞定《WebView的优化及封装》

一篇文章搞定《WebView的优化及封装》 前言WebView的过程分析确定优化方案一、预加载&#xff0c;复用缓冲池&#xff08;初始化优化&#xff09;优化的解析说明具体的实现 二、预置模版&#xff08;请求、渲染优化&#xff09;优化的解析说明具体的实现1、离线包2、预获取数据…

(笔记五)利用opencv进行图像几何转换

参考网站&#xff1a;https://docs.opencv.org/4.1.1/da/d6e/tutorial_py_geometric_transformations.html &#xff08;1&#xff09;读取原始图像和标记图像 import cv2 as cv import numpy as np from matplotlib import pyplot as pltpath r"D:\data\flower.jpg&qu…

VUE笔记(六)vue路由

一、路由的简介 1、实现生活中的路由 路由&#xff1a;路由其实就是一个key-value对应关系 路由器&#xff1a;用于管理多个路由关系的设备被称为路由器 2、前端的路由 目前使用的前端项目都是单页面的应用&#xff08;SPA&#xff09;&#xff0c;一个项目中只有一个html页…

vue-drag-resize实现拖拽,座椅摆放

插件&#xff1a; vue-drag-resize <div class"drag-resize"><!-- https://juejin.cn/post/6844903713430061063isActive 是否激活状态 Default: falsew,h 组件宽度,高度 Default: 200--><VueDragResize :isActive"true" :w"100&qu…

JavaScript基础语法01——初识JavaScript

哈喽&#xff0c;大家好&#xff0c;我是雷工&#xff01; 最近有项目用到KingFusion软件&#xff0c;由于KingFusion是B/S架构的客户端组态软件&#xff0c;因此在学习KingFusion产品时会涉及许多前端的知识。 像JavaScript语言就是需要用的&#xff0c;俗话说&#xff1a;活到…