【Android】日期拾取器、时间拾取器与菜单
来源:互联网 发布:订货系统源码 编辑:程序博客网 时间:2024/03/29 22:53
在安卓4.4的工程中,每次新建工程同样会出现Helloworld,但不同于以前的版本,现在的Helloworld还自带菜单。这篇文章配合安卓的常用组件日期拾取器、时间拾取器来讲解安卓菜单怎么修改。日期拾取器、时间拾取器两个组件很大,一般情况下,建议使用《【Android】多个Activity之间利用bundle传递数值》(点击打开链接)中介绍的方式,为日期拾取器、时间拾取器新开一个Activity进行交互。
如下图的一个app:
一进入app,在右下角里面显示当前的时间。
通过移动日期拾取器、时间拾取器,右下角的时间会跟着修改。
同时把新建App时,在右上角的自带的菜单,修改成带一个“退出”的子项,关闭这个app。
1、首先,对res\value\strings.xml中,所定义的字符串,修改成如下的代码。主要是修改app的名称,与菜单的子项。
<?xml version="1.0" encoding="utf-8"?><resources> <string name="app_name">拾取器与菜单</string> <string name="menu_exit">退出</string></resources>2、之后是修改res\menu\main.xml,定义右上角菜单的子项,修改成如下的代码,定义子项的id为menu_exit,同时其显示的字体为string的menu_exit字符串,也就是“退出”二字。
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/menu_exit" android:title="@string/menu_exit"/></menu>3、其次是修改res\layout\activity_main.xml,对MainActivity.java进行布局,此处的布局思想如下,其中,在线性布局的组件皆居中,即设置android:layout_gravity="center_vertical"。
因此,就把res\layout\activity_main.xml修改如下,对要操作的组件赋予id:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <DatePicker android:id="@+id/datePicker1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:calendarViewShown="false" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TimePicker android:id="@+id/timePicker1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18sp" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18sp" /> </LinearLayout> </LinearLayout></LinearLayout>其中,日期拾取器中设置:android:calendarViewShown="false"即设置不显示其自带的日期组件。
时间拾取器默认是12小时制的,这里运行效果是24小时制的是在Mainactivity.java所设置。
日期拾取器、时间拾取器不推荐放在一行,这两个组件没有自带的大小属性调节其大小。如果要调节其大小,要在Java中写成很的代码,而且网上所流传的资料,对与android api8是无效的,也就是android2.2。这里不推荐这样做。
4、最后,对Mainactivity.java编写如下的代码,这里的代码分为两部分,一部分是Mainactivity.java内部的日期拾取器、时间拾取器,一部分是菜单的代码。其中,取出当前系统的年月日时分秒,使用到Calendar实例,也就是《【Java】使用Calendar类来获取当前的日期》(点击打开链接)中的方法。这里不再赘述了。
package com.Picker;import java.util.Calendar;import java.util.GregorianCalendar;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.MenuItem;import android.widget.DatePicker;import android.widget.DatePicker.OnDateChangedListener;import android.widget.TextView;import android.widget.TimePicker;import android.widget.TimePicker.OnTimeChangedListener;public class MainActivity extends Activity {private DatePicker datePicker1;private TimePicker timePicker1;private TextView textView1;private TextView textView2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 取出当前的年月日时分Calendar calendar = Calendar.getInstance();int year = calendar.get(GregorianCalendar.YEAR);int month = calendar.get(GregorianCalendar.MONTH) + 1;int day = calendar.get(GregorianCalendar.DAY_OF_MONTH);int hour = calendar.get(GregorianCalendar.HOUR);int minutes = calendar.get(GregorianCalendar.MINUTE);//获取各个组件textView1 = (TextView) findViewById(R.id.textView1);textView2 = (TextView) findViewById(R.id.textView2);datePicker1 = (DatePicker) findViewById(R.id.datePicker1);timePicker1 = (TimePicker) findViewById(R.id.timePicker1);//设置时间拾取器为24小时制timePicker1.setIs24HourView(true);//程序一开始先初始化两个标签文本,将其设置为当前时期。textView1.setText(year + "年" + month + "月" + day + "日");textView2.setText(hour + ":" + minutes);//对日期拾取器设置监听器,注意其设置方法与其他组建不同,需要通过其初始化方法来设置datePicker1.init(year, month, day, new OnDateChangedListener() {@Overridepublic void onDateChanged(DatePicker arg0, int year, int month,int day) {//如果其被修改,则改变标签文本1,其中这里的月份同样是需要+1才等于正常的月份textView1.setText(year + "年" + (month+1) + "月" + day + "日");}});//时间拾取器被修改的监听器timePicker1.setOnTimeChangedListener(new OnTimeChangedListener() {@Overridepublic void onTimeChanged(TimePicker arg0, int hour, int minutes) {//一旦修改,则修改标签文本2textView2.setText(hour + ":" + minutes);}});}// 创建menu的方法,没有该方法,不会在右上角设置菜单。@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// 设置menu界面为res\menu\menu.xmlgetMenuInflater().inflate(R.menu.main, menu);return true;}// 处理菜单事件public boolean onOptionsItemSelected(MenuItem item) {// 得到当前选中的MenuItem的ID,int item_id = item.getItemId();switch (item_id) {//设置id为menu_exit的菜单子项所要执行的方法。case R.id.menu_exit:finish();//关闭MainActivity这个Activity。相当于结束程序,写成System.exit(0)也可以。break;}return true;}}
- 【Android】日期拾取器、时间拾取器与菜单
- Android 开发 日期,时间拾取器
- 【Android开发】基本组件-日期、时间拾取器
- 日期、时间拾取器(待修改)
- 日期拾取器
- 007日期DatePicker和 时间拾取器TimePicker
- 菜鸟的Android学习之路11——时间日期拾取器
- JQuery——日期拾取器
- 日期事件拾取器TimePicker/DatePicker
- HTML5 Forms 手机拾取日期,时间方法
- web颜色拾取器。。。
- emoji表情拾取器
- WPF图标拾取器
- UIImagePickerController图像拾取器
- GPS拾取器(工具)
- iPad图片拾取器
- iOS-UIPickerView拾取器
- 颜色拾取器
- Linux下用C语言检查指定程序名的运行实例个数
- 关于httpservice和webservice
- C++细节7
- 移动开发:dequeueReusableCellWithIdentifier的运行机制
- C#右下角弹窗不影响主程序的另类实现
- 【Android】日期拾取器、时间拾取器与菜单
- keil 编译后 flash 和 ram 占用情况
- Console2:Windows命令行威力加强版
- linux和window下生成任意大小的文件
- ios开发FMDB导入SQLCipher加密数据库
- MVC项目搭建--Java1.7+Eclipse luna + Maven 3.2.5 +spring 4.1.4
- 网易新闻iOS版在开发过程中曾经使用过的第三方开源类库、组件
- This End Up: Using Device Orientation
- 图像翻转