TimePick控件和TimePickDialog

本文介绍了在Android中如何使用TimePick控件和TimePickDialog来实现时间选择功能。首先展示了TimePick控件的使用,尽管可能在某些场景下实用性不强,然后详细说明了如何创建和设置TimePickDialog,包括AlarmReceiver和AlarmActivity的配合,以实现闹钟功能。最后提到了在AndroidManifest.xml中进行的相关配置以及取消闹钟的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.TimePick控件

TimePick控件显示一个可以更改时间的空间,不过好像并没有什么用(估计是我没用到),下面代码(代码是我写的一个小闹钟,不过提示时间到了的对话框,提示的比较慢):
这里写图片描述
就是这样子。

xml文件:

<RelativeLayout 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"  
    tools:context=".MainActivity" >  


    <TimePicker   
        android:id="@+id/timePicker"  
        android:layout_height="wrap_content"  
        android:layout_width="match_parent"
        /> 

    <Button   
        android:id="@+id/button1"  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content"  
        android:layout_below="@id/timePicker"  
        android:text="@string/button1"
        /> 

    <Button 
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button1"
        android:text="@string/button2"
        />

</RelativeLayout>  

TimePickActivity类:

package com.example.timepick;

import java.util.Calendar;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TimePicker;
import android.widget.TimePicker.OnTimeChangedListener;
import android.widget.Toast;

public class TimepickActivity extends ActionBarActivity {

    private int h,m = 0;;
    private TimePicker timePicker;
    private Button button1,button2;
    private AlarmManager alarmManager=null;
    private Calendar currentTime = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.timepick);

        timePicker = (TimePicker) findViewById(R.id.timePicker);
        button1 = (Button) findViewById(R.id.button1);
        button1.setOnClickListener(new ButtonListenerOne());//获取时分值

        //设置闹钟(这里不用看是闹钟设置时间的)
        currentTime = Calendar.getInstance();//获取日期对象
        button2 = (Button) findViewById(R.id.button2);
        button2.setOnClickListener(new ButtonListenerTwo());

        timePicker.setIs24HourView(true);//是否设置为24小时制    
        timePicker.setOnTimeChangedListener(new TimeListener());//获取时分值

    }

    //获取TimePick时间
    class ButtonListenerOne implements OnClickListener{

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            h = timePicker.getCurrentHour();
            m = timePicker.getCurrentMinute(); 
            //System.out.println("h:"+h+"   m:"+m);
            Toast.makeText(TimepickActivity.this, "当前设置的时间为:"+h+":"+m, Toast.LENGTH_LONG).show();
        }

    }
    //读取TimePick时间(这个是TimePick改到那里提示到哪里。)
    class TimeListener implements OnTimeChangedListener{

        @Override
        public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
            // TODO Auto-generated method stub
            /** 
             * view 当前选中TimePicker控件 
             *  hourOfDay 当前控件选中TimePicker 的小时 
             * minute 当前选中控件TimePicker  的分钟 
             */  
            //System.out.println("h:"+ hourOfDay +" m:"+minute);  
            Toast.makeText(TimepickActivity.this, "当前设置的时间为:"+hourOfDay+":"+minute, Toast.LENGTH_LONG).show();
        }

    }
}

AlarmReceiver类:

package com.example.timepick;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class AlarmReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent data) {
        // TODO Auto-generated method stub 
        //Intent对象
        Intent intent=new Intent(context, AlarmActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent); 
    }

}

2.TimePickDialog
这个方法设置闹钟必写的,下面代码:

//设置闹钟(button2绑定)
    class ButtonListenerTwo implements OnClickListener{

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            currentTime.setTimeInMillis(System.currentTimeMillis()); //设置Calendar对象
            int mHour=currentTime.get(Calendar.HOUR_OF_DAY);  
            int mMinute=currentTime.get(Calendar.MINUTE); 

            new TimePickerDialog(TimepickActivity.this,new OnTimeSetListener() {

                @Override
                public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                    // TODO Auto-generated method stub

                    currentTime.setTimeInMillis(System.currentTimeMillis());//设置当前时间
                    currentTime.set(Calendar.HOUR_OF_DAY, hourOfDay);//设置小时
                    currentTime.set(Calendar.MINUTE, minute);   //设置分钟
                    currentTime.set(Calendar.SECOND, 0);    //设置秒数
                    currentTime.set(Calendar.MILLISECOND, 0);   //设置毫秒

                    //建立Intent和PendingIntent,来调用目标组件
                    Intent intent = new Intent(TimepickActivity.this, AlarmReceiver.class);
                    PendingIntent pendingIntent = PendingIntent.getBroadcast(TimepickActivity.this, 0, intent, 0);
                    //获取闹钟管理的实例
                    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
                    //设置闹钟
                    am.set(AlarmManager.RTC_WAKEUP, currentTime.getTimeInMillis(), pendingIntent);
                    //设置周期闹钟
                    am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+(10*1000), (24*60*60*1000), pendingIntent);
                    Toast.makeText(TimepickActivity.this, "闹钟设置好了", Toast.LENGTH_LONG).show();
                } 
            } , mHour, mMinute, true).show();//备注这个必须要有不然不会提示的(因为你没执行)
        }

    }

AlarmReceiver类:

package com.example.timepick;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class AlarmReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent data) {
        // TODO Auto-generated method stub 
        //Intent对象
        Intent intent=new Intent(context, AlarmActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent); 
    }

}

AlarmActivity类(显示对话框的):

package com.example.timepick;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;

public class AlarmActivity extends Activity{

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //显示对话框
        new AlertDialog.Builder(AlarmActivity.this).
            setTitle("闹钟").//设置标题
            setMessage("时间到了!").//设置内容
            setPositiveButton("知道了", new OnClickListener(){//设置按钮
                public void onClick(DialogInterface dialog, int which) {
                    AlarmActivity.this.finish();//关闭Activity
                }
            }).create().show();


    }
}

取消闹钟button:

btton3.setOnClickListener(new Button.OnClickListener(){  

        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            Intent intent = new Intent(TimePickActivity.this,AlamrReceiver.class);  
            PendingIntent pi = PendingIntent.getBroadcast(TimePickActivity.this, 0, intent, 0);  
            AlarmManager am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE);  
            am.cancel(pi);  
            //tv.setText("闹钟取消");
            Toast.makeText(TimepickActivity.this, "闹钟取消了",Toast.LENGTH_LONG).show();
         }  

});  

备注:(不然不会提示对话框的)
mainfest中必须要执行这个(位置在application中,activity下):

<receiver android:name=".AlarmReceiver" android:process=":remote" /> 

样式图片大概就是这样(网上找的图片)
这里写图片描述这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值