Menu DatePicker TimePicker

1 Menu

  菜单控件,很实用,也很常用的一种控件,那么运行的效果什么样呢?如下图

 

创建Menu有三种方式

第一种 通过配置文件实现菜单效果

第二种 通过编码方式实现菜单效果

第三种 在特定条件下动态创建菜单效果

那么这里我们先讲解前两种,至于第三种,后面我们做项目的时候会相信描述。

通过配置文件创建Menu

  既然是通过配置文件创建,自然需要XML,首先需要在 res文件夹下创建一个menu文件夹,如下图

  

在创建XML时,大家要注意一点,最好不要直接对着 menu文件夹右键 新建 文件 的方式,可能是由于我的环境问题,我通过这种方式老是导致Eclipse 宕掉,无响应。。大家可以试试看你们的环境是否可以,如果不可以,请用以下两种方式来创建

第一 直接复制一个menu文件到menu文件夹下,然后打开进行修改

第二 通过 右击menu文件夹 -> 新建 -> 其它 -> Android -> Android XML File 下一步

在弹出的窗体中,创建文件名称,并选中Menu单选按钮 进行创建。

新建完成后,双击打开menu.xml文件,进行配置,代码如下

<?xml version="1.0" encoding="utf-8"?>
<!-- 
    创建Menu的XML时,需要注意
不要直接去创建文件,然后创建一个.xml的文件,会导致Eclipse无响应
    如何创建?
直接从外部访问 复制文件到menu文件夹
menu new Other——>Android——>XML,选择menu类型,填写名称
 -->
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:id="@+id/menuGroup1">
        <item 
            android:id="@+id/item1" 
            android:title="添加"
            android:icon="@drawable/add"/>
        <item 
            android:id="@+id/item2" 
            android:title="修改"
            android:icon="@drawable/edituser"/>
        <item 
            android:id="@+id/item3" 
            android:title="删除"
            android:icon="@drawable/remove"/>
        <item 
            android:id="@+id/item4" 
            android:title="关于"
            android:icon="@drawable/exit"/>
    </group>
</menu>


创建完配置文件后,如何与代码关联呢?

package TSD.Jason.Example;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;

/**
 * 通过配置文件实现
 * @author Administrator
 *
 */
publicclass MenuActivity extends Activity {
    @Override
    protectedvoid onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
    
    /**
     * 创建菜单 
     */
    @Override
    publicboolean onCreateOptionsMenu(Menu menu) {
        
        //将XML文件转化成Menu对象
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.appmenu, menu);
        returntrue;
    }
    
    /**
     * 选中某项菜单事件
     */
    @Override
    publicboolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.item1:
            
            break;
        case R.id.item2:
            
            break;
        default:
            break;
        }
        ShowToast("选则了"+ item.getTitle());
        returntrue;
    }
    
    privatevoid ShowToast(String str)
    {
        Toast.makeText(this,str,Toast.LENGTH_SHORT).show();
    }
}


 

大家可以注意到是通过 onCreateOptionsMenu方法进行Menu的创建操作

并通过MenuInflater类来将menu.xml转换成menu对象,进行操作。

onOptionsItemSelected方法是用来捕获菜单中某项被单击时,所要执行的功能。

当大家编写完成后,将程序启动起来,然后单击模拟器右边的功能键区域中的 MENU 按钮 就能看到菜单效果

通过代码实现

这种方式就不需要创建XML文件了,直接在编辑器中编写代码即可,代码如下

package TSD.Jason.Example;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

/**
 * 通过代码生成菜单
 * @author Administrator
 *
 */
publicclass MenuActivity1 extends Activity {

    @Override
    protectedvoid onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
    
    @Override
    publicboolean onCreateOptionsMenu(Menu menu) {
        menu.add(0, 1, 1, R.string.menu1).setIcon(R.drawable.add);
        menu.add(0, 2, 1, R.string.menu2);
        menu.add(0, 3, 1, R.string.menu3);
        menu.add(0, 4, 1, R.string.menu4);
        
        returnsuper.onCreateOptionsMenu(menu);
    }
    
    /**
     * 选中某项菜单事件
     */
    @Override
    publicboolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case1:
            
            break;
        case2:
            
            break;
        default:
            break;
        }
        ShowToast("选则了"+ item.getTitle());
        returntrue;
    }
    
    privatevoid ShowToast(String str)
    {
        Toast.makeText(this,str,Toast.LENGTH_SHORT).show();
    }
}


 

大家可以发现基本上和用XML方式没有太大区别,唯一的区别就在onCreateOptionsMenu方法中

menu.add(0, 1, 1, R.string.menu1).setIcon(R.drawable.add);

直接使用这个方法的参数menu对象的add方法创建

第一个参数 组ID 一般我们都设置成一样的

第二个参数 项ID 这个项ID不要重复,否则在onOptionsItemSelected方法中你将无法正确捕捉用户点击了哪一项

第三个参数 排序 这个就按顺序设置就OK

第四个参数 要显示的提示信息

DatePicker

这是一个日期控件,在项目中可能会有一些需求是需要通过用户去选择日期的,那么通过这个控件我们可以很好的和用户进行交互,并获取到用户选择的日期,进行下一步操作,运行效果如下图

TimePicker

时间控件 和上边的DatePicker所要表达的意思是一样的,用户可以选择时间,运行效果如下图

代码如下

package TSD.Jason.Example;

import java.util.Calendar;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;

/**
 * DatePicker

  重要方法

  getDayOfMonth():获取当前Day

  getMonth():获取当前月

  getYear()获取当前年

  updateDate(int year, int monthOfYear, int dayOfMonth):更新日期


 * 
 * 
 * 
 * TimePicker 重要方法
 * 
   setCurrentMinute(Integer currentMinute)设置当前时间的分钟

  getCurrentMinute()获取当前时间的分钟

  setEnabled(boolean enabled)设置当前视图是否可以编辑。

  m_TimePicker.setIs24HourView(true);设置为24小时制显示

  setOnTimeChangedListener(TimePicker.OnTimeChangedListener onTimeChangedListener)当时间改变时调用


 * @author Administrator
 *
 */
publicclass DataActivity extends Activity {

    TextView    m_TextView;
    //声明DatePicker对象
    DatePicker    m_DatePicker;
    //声明TimePicker对象
    TimePicker    m_TimePicker;
    
    Button         m_dpButton;
    Button         m_tpButton;
    //java中的日历类
    Calendar     c;
    @Override
    protectedvoid onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
super.onCreate(savedInstanceState);
        setContentView(R.layout.date);
        
        c=Calendar.getInstance(); //获得当前日期
        m_TextView= (TextView) findViewById(R.id.TextView01);
        m_dpButton = (Button)findViewById(R.id.button1);
        m_tpButton = (Button)findViewById(R.id.button2);
        //获取DatePicker对象
        m_DatePicker = (DatePicker) findViewById(R.id.DatePicker01);
        //将日历初始化为当前系统时间,并设置其事件监听
        m_DatePicker.init(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH), new DatePicker.OnDateChangedListener() {
            @Override
            publicvoid onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth)
            {
                DisplayShow("年:"+ year +" 月:"+ monthOfYear +" 日:"+ dayOfMonth);
            }
        });
        
        //获取TimePicker对象
        m_TimePicker = (TimePicker) findViewById(R.id.TimePicker01);
        //设置为24小时制显示
        m_TimePicker.setIs24HourView(true);

        //监听时间改变
        m_TimePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
            @Override
            publicvoid onTimeChanged(TimePicker view, int hourOfDay, int minute)
            {
                DisplayShow("时:"+ hourOfDay +" 分:"+ minute);
            
                
            }
        });
        
        m_dpButton.setOnClickListener(new Button.OnClickListener(){
            publicvoid onClick(View v)
            {
                //创建、显示日期对话框
new DatePickerDialog(DataActivity.this,
                    new DatePickerDialog.OnDateSetListener()
                    {
                        publicvoid onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
                        {
                            //当日期更改时,在这里处理
                            //m_DatePicker.updateDate(year, monthOfYear, dayOfMonth);
                            DisplayShow("年:"+ year +" 月:"+ monthOfYear +" 日:"+ dayOfMonth);
                        }
                    },c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)).show();
            }
        });
        
        m_tpButton.setOnClickListener(new Button.OnClickListener() {
            publicvoid onClick(View v)
            {
                //创建、显示时间对话框
new TimePickerDialog(DataActivity.this,
                    new TimePickerDialog.OnTimeSetListener()
                    {
                        publicvoid onTimeSet(TimePicker view, int hourOfDay,int minute)
                        {
                            //时间改变时处理
                            //m_TimePicker.setCurrentHour(hourOfDay);
                            //m_TimePicker.setCurrentMinute(minute);
                            DisplayShow("时:"+ hourOfDay +" 分:"+ minute);
                        }
                    },c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE), true).show();
            }
        });
    }
    
    privatevoid DisplayShow(String str)
    {
        Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
    }
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值