• 这个闹钟程序已经学了第二遍,第一遍学了之后一切都很糊涂,这次再学终于有点清晰。 第一步: 新建alarm activity继承linearlayout,将对应ui换成: ... android:layout_width="match_parent

    这个闹钟程序已经学了第二遍,第一遍学了之后一切都很糊涂,这次再学终于有点清晰。

    第一步:

    新建alarm activity继承linearlayout,将对应ui换成:

    <com.example.jowang.clock0726.Alarm
        android:id="@+id/linearLayout2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <ListView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/list1"
            android:layout_weight="1"
            ></ListView>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/btn1"
            android:text="add"
            android:layout_gravity="center_horizontal"/>
    </com.example.jowang.clock0726.Alarm>
    可以看到有一个listview和一个button,listview的weight注明为1,这样按钮就会显示在屏幕底部。

    第二步:

    alarm activity代码如下:

    public class Alarm extends LinearLayout {
        private Button button;
        private ListView listView;
        ArrayAdapter<Alarm.myalarm> adapter;
        public Alarm(Context context) {
            super(context);
        }
        public Alarm(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
        public Alarm(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
        @Override
        protected void onFinishInflate() {
            super.onFinishInflate();
            button=(Button)findViewById(R.id.btn1);
            listView=(ListView)findViewById(R.id.list1);
            button.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View view) {
                    addAlarm();
                }
            });
        }
        public void addAlarm(){
            adapter=new ArrayAdapter<Alarm.myalarm>(getContext(),android.R.layout.simple_list_item_1);
            adapter.add(new myalarm(System.currentTimeMillis()));
            listView.setAdapter(adapter);
        }
        class myalarm{
            private Date date;
            private long time=0;
            private String timeLabel="";
            public myalarm(long time){
                this.time=time;
                date=new Date(time);
                timeLabel=date.getHours()+":"+date.getMinutes();
            }
    
            public long getTime() {
                return time;
            }
    
            public String getTimeLabe() {
                return timeLabel;
            }
    
            @Override
            public String toString() {
                return timeLabel;
            }
        }
    
    }
    此时初步实现显示闹钟

    展开全文
  • 第一步: 新建timeview class,extends linearlayout: public class TimeView extends LinearLayout { private TextView textView; public TimeView(Context context, AttributeSet attrs) { ...

    第一步:

    新建timeview class,extends linearlayout:

    public class TimeView extends LinearLayout {
        private TextView textView;
        public TimeView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public TimeView(Context context) {
            super(context);
        }
    
        public TimeView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
    
        @Override
        protected void onFinishInflate() {
            super.onFinishInflate();
            textView=(TextView)findViewById(R.id.time);
            handler.sendEmptyMessage(0);
        }
    
        @Override
        protected void onVisibilityChanged(View changedView, int visibility) {
            super.onVisibilityChanged(changedView, visibility);
            if (visibility==changedView.VISIBLE){
                handler.sendEmptyMessage(0);
    
            }else {
                handler.removeMessages(0);
            }
        }
    
    
        private void refreshtime(){
            java.util.Calendar c= java.util.Calendar.getInstance();
            textView.setText(String.format("%d:%d:%d",c.get(java.util.Calendar.HOUR_OF_DAY),c.get(java.util.Calendar.MINUTE),c.get(java.util.Calendar.SECOND)));
        }
    
        private Handler handler=new Handler(){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                refreshtime();
                if (getVisibility()== View.VISIBLE){
    
                    sendEmptyMessageDelayed(0,1000);
                }
            }
        };
    }
    替换layout中的第一个tabhost,此时layout代码如下:

    <?xml version="1.0" encoding="utf-8"?>
    <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="com.example.jowang.clock.MainActivity">
    
    
        <TabHost
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/tabHost"
            android:layout_gravity="center_horizontal">
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                >
    
                <TabWidget
                    android:id="@android:id/tabs"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"></TabWidget>
    
                <FrameLayout
                    android:id="@android:id/tabcontent"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">
    
                    <com.example.jowang.clock.TimeView
                        android:id="@+id/tabTime"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:orientation="vertical">
                        <TextView
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:id="@+id/time"
                            android:textAppearance="?android:attr/textAppearanceLarge"
                            android:gravity="center"
    
                            />
                    </com.example.jowang.clock.TimeView>
    
                    <LinearLayout
                        android:id="@+id/tabAlarm"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:orientation="vertical"></LinearLayout>
    
                    <LinearLayout
                        android:id="@+id/tabTimer"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:orientation="vertical"></LinearLayout>
                    <LinearLayout
                        android:id="@+id/tabStopwatch"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:orientation="vertical"></LinearLayout>
                </FrameLayout>
            </LinearLayout>
        </TabHost>
    </LinearLayout>
    

    展开全文
  • 新建项目,在layout中添加tabhost组件: xml version="1.0" encoding="utf-8"?> LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=... android

    新建项目,在layout中添加tabhost组件:

    <?xml version="1.0" encoding="utf-8"?>
    <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="com.example.jowang.clock.MainActivity">
    
    
        <TabHost
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/tabHost"
            android:layout_gravity="center_horizontal">
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">
    
                <TabWidget
                    android:id="@android:id/tabs"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"></TabWidget>
    
                <FrameLayout
                    android:id="@android:id/tabcontent"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">
    
                    <LinearLayout
                        android:id="@+id/tabTime"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:orientation="vertical"></LinearLayout>
    
                    <LinearLayout
                        android:id="@+id/tabAlarm"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:orientation="vertical"></LinearLayout>
    
                    <LinearLayout
                        android:id="@+id/tabTimer"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:orientation="vertical"></LinearLayout>
                    <LinearLayout
                        android:id="@+id/tabStopwatch"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:orientation="vertical"></LinearLayout>
                </FrameLayout>
            </LinearLayout>
        </TabHost>
    </LinearLayout>
    
    在mainactivity中写入代码:

    public class MainActivity extends AppCompatActivity {
        private TabHost tabHost;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            tabHost=(TabHost)findViewById(R.id.tabHost);
            tabHost.setup();
            tabHost.addTab(tabHost.newTabSpec("tabTime").setIndicator("时钟").setContent(R.id.tabTime));
            tabHost.addTab(tabHost.newTabSpec("tabAlarm").setIndicator("闹钟").setContent(R.id.tabAlarm));
            tabHost.addTab(tabHost.newTabSpec("tabTimer").setIndicator("计时器").setContent(R.id.tabTimer));
            tabHost.addTab(tabHost.newTabSpec("tabStopwatch").setIndicator("秒表").setContent(R.id.tabStopwatch));
    
        }
    }

    展开全文
  • Android Studio 3.2.1编写的简单数字时钟(用子线程发送消息到主线程的方式实现,有丰富的注释,方便理解)。
  • 现在要添加TimePickerDialog功能。 代码如下: public class Alarm extends LinearLayout { private Button button; private ListView listView; ArrayAdapter adapter; public Alarm(Context context) {

    现在要添加TimePickerDialog功能。

    代码如下:

    public class Alarm extends LinearLayout {
        private Button button;
        private ListView listView;
        ArrayAdapter<Alarm.myalarm> adapter;
        public Alarm(Context context) {
            super(context);
        }
        public Alarm(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
        public Alarm(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
        @Override
        protected void onFinishInflate() {
            super.onFinishInflate();
            button=(Button)findViewById(R.id.btn1);
            listView=(ListView)findViewById(R.id.list1);
            adapter=new ArrayAdapter<Alarm.myalarm>(getContext(),android.R.layout.simple_list_item_1);
            listView.setAdapter(adapter);
            button.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View view) {
                    addAlarm();
                }
            });
        }
        public void addAlarm(){
            Calendar calendar=Calendar.getInstance();
            new TimePickerDialog(getContext(), new TimePickerDialog.OnTimeSetListener() {
                @Override
                public void onTimeSet(TimePicker timePicker, int hour, int minute) {
                    Calendar c=Calendar.getInstance();
                    c.set(Calendar.HOUR,hour);
                    c.set(Calendar.MINUTE,minute);
                    Calendar currenttime=Calendar.getInstance();
                    if (c.getTimeInMillis()>currenttime.getTimeInMillis()){
                        c.setTimeInMillis(c.getTimeInMillis()+24*60*60*1000);
                    }
                    adapter.add(new myalarm(c.getTimeInMillis()));
                }
            },calendar.get(Calendar.HOUR),calendar.get(Calendar.MINUTE),true).show();
        }
        class myalarm{
            private Calendar date;
            private long time=0;
            private String timeLabel="";
            public myalarm(long time){
                this.time=time;
                date=Calendar.getInstance();
                date.setTimeInMillis(time);
                timeLabel=String.format("%dM%dD%d:%d",date.get(Calendar.YEAR),date.get(Calendar.MONTH),date.get(Calendar.HOUR),date.get(Calendar.MINUTE));
            }
    
            public long getTime() {
                return time;
            }
    
            public String getTimeLabe() {
                return timeLabel;
            }
    
            @Override
            public String toString() {
                return timeLabel;
            }
        }
    
    }
    addalarm方法中的三个calendar真心很晕

    此时点击添加按钮,可以弹出时间选择对话框,吐槽一下android的日期选择器不好用

    展开全文
  • 设计了一款基于Android多功能时钟手机应用软件,总体功能框架由时钟显示模块、闹钟设置模块、计时器模块、秒表模块组成。通过模拟器调试分析直至最后编码通过,项目所展示的Android 应用开发整个过程对移动互联...
  • Android自定义ClockView实现时钟效果
    展开全文
  • Android Studio多功能闹钟[android源码]多功能闹钟App简 介主 要 技 术界面截图主要代码源码链接作者信息 多功能闹钟App 简 介 此多功能闹钟界面采用TabHost框架,头部包含分别用LinearLayout水平布局显示四个...
  • 在最近的项目当中,我遇到一个在界面中实现系统数字时钟的需求。一看这个其实挺简单的,开个一个子线程获取当前的系统时间睡眠1分钟发送当前时间,然后利用Handler去修改当前显示的时间,直接撸代码。 第一种:...
  • Android 动态壁纸开发(时钟)这是我人生第一篇文章,希望大家不喜无喷啊!有兴趣的可以看看玩,因为语言组织能力有限,就废话不说直接进入重点! 先看效果 上图是动态壁纸钟的一个时钟。 我们先来看看 ...
  • 多功能时钟应用

    2016-04-05 17:09:11
    近几天做了个多功能时钟,分享一下 主界面 对应的代码: MainActivity.javapackage com.example.clock;import android.app.Activity; import android.os.Bundle; import android.widget.TabHost;public class ...
  • [java] view plaincopyprint? package com.smart.impl... import java.util.Calendar; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; im
  •  前不久在网上看见Android实现的模拟时钟,感觉十分有意思,这里是地址:  http://www.eoeandroid.com/forum.php?mod=viewthread&tid=58324可惜的是这种方式没有  秒表。笔者突然对其有了兴趣,也想去实现以下...
  • 先上图: 本文参考了
  • 今天继续聊自定义View,当然今天的这个比较麻烦一些,如果没有自定义View的经历,建议先看看自定义文字View与水印图片View 自定义文字View 自定义水印图片View ...话不聊 ,我们今天实现下如下的效果: 首
  • Android系统闹钟定时功能框架,总体来说就是用数据库存储定时数据,有一个状态管理器来统一管理这些定时状态的触发和更新。在Andriod系统中实现定时功能,最终还是要用到系统提供的AlarmManager,只是当一个定时完成...
  • 今天跟大家分享一下一个自定义View ----模拟时钟的具体实现,先来看看效果图吧,单独提取出来的,相比场景桌面中的模拟时钟,多加了一个秒针、显示了日期和星期。在场景桌面中,为了桌面的整体效率,就忍痛割爱,...
  • 接下来是我的一个简单的多功能时钟的小实战(视频资源https://pan.baidu.com/s/1mL8VUVC-9W9lO6IEpobDZg 密码:2ajv) 具体的效果可以参考手机上的时钟。   首先我们来看一看布局文件layout_main...
1 2 3 4 5 ... 20
收藏数 9,597
精华内容 3,838