Android开发记录时间xml,Android 闹钟 开发过程记录(一)

首先,说明一下:本人大三,刚自学完android基础知识,利用寒假一个月左右的时间,开发了一个闹钟小程序,趁着开学,印象还很深,热情还未减,把过程整理记录下来。这样自己以后也好复习,或许还能帮到有需要的同学。好了,不废话了。先看一下闹钟几个界面(基本上是照着小米自带的闹钟做的界面)。

0818b9ca8b590ca3270a3433284dd417.png           

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png           

0818b9ca8b590ca3270a3433284dd417.png

基本的界面就是这样的了。(开发中的控件都是用的系统自带的,包括一些图片也没有精心制作,我暂时关注的是功能实现,谅解)

闹钟设置界面的布局文件如下(由于许多同类控件布局差不多,就都抽取到一个style文件中了):

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@color/bg_color"

android:padding="10dip" >

android:id="@+id/ll_alarm_clock_setting_flag"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true"

android:orientation="horizontal" >

android:id="@+id/btn_alarm_clock_setting_cancel"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_weight="1"

android:text="@string/btn_cancel" />

android:id="@+id/btn_alarm_clock_setting_save"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_weight="1"

android:text="@string/btn_alarm_clock_setting_save" />

android:id="@+id/tp_alarm_clock_setting"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerHorizontal="true"

android:layout_marginTop="10dip" />

android:id="@+id/tv_alarm_clock_setting_left_ring_time"

style="@style/tv_alarm_clock_setting1"

android:layout_below="@id/tp_alarm_clock_setting"

android:layout_centerHorizontal="true"

android:layout_marginTop="10dip"

android:textSize="14sp" />

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_above="@id/ll_alarm_clock_setting_flag"

android:layout_below="@id/tv_alarm_clock_setting_left_ring_time"

android:layout_marginTop="12dip" >

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="vertical" >

android:id="@+id/rl_alarm_clock_setting_repeat"

style="@style/rl_alarm_clock_setting" >

style="@style/tv_alarm_clock_setting1"

android:text="@string/tv_alarm_clock_setting_repeat" />

android:id="@+id/tv_alarm_clock_setting_repeat"

style="@style/tv_alarm_clock_setting2"

android:text="@string/tv_alarm_clock_setting_repeat_once" />

style="@style/iv_alarm_clock_setting"

android:contentDescription="@string/iv_des_func" />

android:id="@+id/rl_alarm_clock_setting_ring"

style="@style/rl_alarm_clock_setting" >

style="@style/tv_alarm_clock_setting1"

android:text="@string/tv_alarm_clock_setting_ring" />

android:id="@+id/tv_alarm_clock_setting_ring"

style="@style/tv_alarm_clock_setting2"

android:singleLine="true"

android:text="@string/tv_alarm_clock_setting_default_ring" />

style="@style/iv_alarm_clock_setting"

android:contentDescription="@string/iv_des_func" />

android:id="@+id/rl_alarm_clock_setting_shake"

style="@style/rl_alarm_clock_setting" >

android:id="@+id/cb_alarm_clock_isshake"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentRight="true"

android:layout_centerVertical="true"

android:layout_marginRight="12dip" />

style="@style/tv_alarm_clock_setting1"

android:text="@string/tv_alarm_clock_setting_shake" />

android:id="@+id/rl_alarm_clock_setting_tag"

style="@style/rl_alarm_clock_setting" >

style="@style/tv_alarm_clock_setting1"

android:text="@string/tv_alarm_clock_setting_tag" />

android:id="@+id/tv_alarm_clock_setting_tag"

style="@style/tv_alarm_clock_setting2"

android:singleLine="true"

android:visibility="gone" />

style="@style/iv_alarm_clock_setting"

android:contentDescription="@string/iv_des_func" />

关于TimePicker下面的 Textview,就是显示 xx小时 xx分钟后响铃的控件,如果 重复周期 为 只响一次 或 每天, 这个时间差很好算,如果是用户自定义的重复周期,我一开始就想得有点复杂了,后来我在csdn问了这个问题,有一位哥们给了我一个很好的思路:先求出 此刻 与 用户定义的 每一天的时间差,在找出其中最小的那个。

具体代码如下:

/**只响一次的 时间间隔

* @param givenHour 自定义的小时

* @param givenMinute 自定义的分钟

* @return 返回"当前时间"距"给定时间"的时间差(单位为毫秒) 如果"给定时间"

*/

public static int dTime(int givenHour, int givenMinute){

long currentTimeInMillis = System.currentTimeMillis();

Calendar givenCalendar = Calendar.getInstance();

givenCalendar.set(Calendar.HOUR_OF_DAY, givenHour);

givenCalendar.set(Calendar.MINUTE, givenMinute);

givenCalendar.set(Calendar.SECOND, 0);

givenCalendar.set(Calendar.MILLISECOND, 0);

long givenTimeInMillis = givenCalendar.getTimeInMillis();

int result;

if(currentTimeInMillis < givenTimeInMillis){

result = (int) (givenTimeInMillis - currentTimeInMillis);

}else{

result = (int) (24*60*60*1000 - (currentTimeInMillis - givenTimeInMillis));

}

return result;

}

/**当前时间 与 自定义周期 的 时间间隔(只能指定一天)

* @param givenHour 自定义的 小时

* @param givenMinute 自定义的 分钟

* @param givenDay 自定义的 星期几

* @return 返回"当前时间"距"给定时间"的时间差(单位为毫秒) 如果"给定时间"

*/

public static int dTime(int givenHour, int givenMinute, int givenDay){

long currentTimeInMillis = System.currentTimeMillis();

Calendar givenCalendar = Calendar.getInstance();

givenCalendar.set(Calendar.DAY_OF_WEEK, givenDay);

givenCalendar.set(Calendar.HOUR_OF_DAY, givenHour);

givenCalendar.set(Calendar.MINUTE, givenMinute);

givenCalendar.set(Calendar.SECOND, 0);

givenCalendar.set(Calendar.MILLISECOND, 0);

long givenTimeInMillis = givenCalendar.getTimeInMillis();

int result;

if(currentTimeInMillis < givenTimeInMillis){

result = (int) (givenTimeInMillis - currentTimeInMillis);

}else{

result = (int) (7*24*60*60*1000 - (currentTimeInMillis - givenTimeInMillis));

}

return result;

}

/**当前时间 与 自定义周期 的 最近的时间间隔 (可指定多个天数)

* @param givenHour 自定义的 小时

* @param givenMinute 自定义的 分钟

* @param givenDays 自定义的 星期几(可变数组 比如 周一,周三,周日等)

* @return 返回"当前时间"距"最近星期时间"的时间差(单位为毫秒)

* 比如:今天周四,自定义重复时间是 周三,周五,那么返回的是 此刻距离周五的时间间隔

* 再比如:今天周四10:00AM,自定义重复时间是 周四 和 周五 的 9:00AM,那么返回的依然是 此刻距离周五的时间间隔

*/

public static int dTime(int givenHour, int givenMinute, int... givenDays){

List dtimes = new ArrayList();

for (int givenDay : givenDays) {

int dTime;

if(givenDay == Calendar.MONDAY){

dTime = dTime(givenHour, givenMinute, Calendar.MONDAY);

}else if(givenDay == Calendar.TUESDAY){

dTime = dTime(givenHour, givenMinute, Calendar.TUESDAY);

}else if(givenDay == Calendar.WEDNESDAY){

dTime = dTime(givenHour, givenMinute, Calendar.WEDNESDAY);

}else if(givenDay == Calendar.THURSDAY){

dTime = dTime(givenHour, givenMinute, Calendar.THURSDAY);

}else if(givenDay == Calendar.FRIDAY){

dTime = dTime(givenHour, givenMinute, Calendar.FRIDAY);

}else if(givenDay == Calendar.SATURDAY){

dTime = dTime(givenHour, givenMinute, Calendar.SATURDAY);

}else {

dTime = dTime(givenHour, givenMinute, Calendar.SUNDAY);

}

dtimes.add(dTime);

}

int result = Collections.min(dtimes);

return result;

} 通过这个算法工具,不仅可以在滑动 timepicker时间的时候,textview显示,而且可以在闹钟设置完成时,toast提示。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值