Android多功能時鐘開發(fā)案例(基礎篇)
本文我們進入Android多功能時鐘開發(fā)實戰(zhàn)學習,具體的效果可以參考手機上的時鐘,內(nèi)容如下
首先我們來看一看布局文件layout_main.xml
整個布局:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" > <TabHost android:id="@android:id/tabhost" android:layout_width="match_parent" android:layout_height="match_parent" > <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.clock.TimeView android:id="@+id/tabTime" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > </com.example.clock.TimeView> <com.example.clock.AlarmView android:id="@+id/tabAlarm" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <span style="white-space:pre"> </span>…… </com.example.clock.AlarmView> <com.example.clock.TimerView android:id="@+id/tabTimer" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <span style="white-space:pre"> </span>…… </com.example.clock.TimerView> <com.example.clock.StopWatchView android:id="@+id/tabStopWatch" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <span style="white-space:pre"> </span>…… </com.example.clock.StopWatchView> </FrameLayout> </LinearLayout> </TabHost> </FrameLayout>
整個布局整的是一個FrameLayout,我們在里面放了一個TabHost,接下來我們就可以在里面直接添加自己想要的布局了,可能初學者初一看會有那么一個疑問,就是<com.example.clock.……></com.example.clock.……>這個是什么東西??這是一個自定義的控件,我們創(chuàng)建的一個繼承了LinearLayout的一個類(講解可以參考這里//chabaoo.cn/article/85515.htm),上面我們看到了四個這樣的標簽,表示我們有四個這樣的Tab頁面。關于布局的東西這里就不多講了,之后會把我自己在學習過程中的一些不懂,以及相關的知識點上傳到資源中,大家可以下載來看看。
完整的布局文件代碼:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" > <TabHost android:id="@android:id/tabhost" android:layout_width="match_parent" android:layout_height="match_parent" > <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.clock.TimeView android:id="@+id/tabTime" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/tvTime" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:textAppearance="?android:attr/textAppearanceLarge" /> </com.example.clock.TimeView> <com.example.clock.AlarmView android:id="@+id/tabAlarm" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView android:id="@+id/lvListAlarm" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" > </ListView> <Button android:id="@+id/btnAddAlarm" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/add_alarm" > </Button> </com.example.clock.AlarmView> <com.example.clock.TimerView android:id="@+id/tabTimer" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" android:orientation="horizontal" > <EditText android:id="@+id/etHour" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:inputType="number" android:singleLine="true" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=":" android:textAppearance="?android:attr/textAppearanceLarge" /> <EditText android:id="@+id/etMin" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:inputType="number" android:singleLine="true" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=":" android:textAppearance="?android:attr/textAppearanceLarge" /> <EditText android:id="@+id/etSec" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:inputType="number" android:singleLine="true" android:textAppearance="?android:attr/textAppearanceLarge" /> </LinearLayout> <LinearLayout android:id="@+id/btnGroup" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:id="@+id/btnStart" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/start" /> <Button android:id="@+id/btnPause" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/pause" /> <Button android:id="@+id/btnResume" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/resume" /> <Button android:id="@+id/btnReset" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/reset" /> </LinearLayout> </com.example.clock.TimerView> <com.example.clock.StopWatchView android:id="@+id/tabStopWatch" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:id="@+id/timeHour" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=":" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:id="@+id/timeMin" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=":" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:id="@+id/timeSec" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="." android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:id="@+id/timeMsec" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:textAppearance="?android:attr/textAppearanceLarge" /> </LinearLayout> <ListView android:id="@+id/lvWatchTime" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" > </ListView> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:id="@+id/btnSWStart" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/start" /> <Button android:id="@+id/btnSWPause" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/pause" /> <Button android:id="@+id/btnSWResume" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/resume" /> <Button android:id="@+id/btnSWLap" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/lap" /> <Button android:id="@+id/btnSWReset" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/reset" /> </LinearLayout> </com.example.clock.StopWatchView> </FrameLayout> </LinearLayout> </TabHost> </FrameLayout>
講完了布局,我們來講講MainActivity
private TabHost tabHost; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tabHost = (TabHost) findViewById(android.R.id.tabhost); tabHost.setup(); // 為TabHost添加標簽 // 新建一個newTabSpec(newTabSpec)用來指定該標簽的id(就是用來區(qū)分標簽)的 // 設置其標簽和圖表(setIndicator) // 設置內(nèi)容(setContent) /* * 設置選項卡 : -- 設置按鈕名稱 : setIndicator(時鐘); -- 設置選項卡內(nèi)容 : setContent(), * 可以設置視圖組件, 可以設置Activity, 也可以設置Fragement; */ 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)); }
在MainActivity中主要的操作就是設置TabHost,上面的代碼中已經(jīng)貼上了解釋,這里就不講了,接下來一篇我們就重點來講講時鐘、鬧鐘、計時器和秒表這四部分,希望大家繼續(xù)學習。
以上就是本文的全部內(nèi)容,希望對大家學習Android軟件編程有所幫助。
- Android獲取設備CPU核數(shù)、時鐘頻率以及內(nèi)存大小的方法
- Android多功能時鐘開發(fā)案例(實戰(zhàn)篇)
- android實現(xiàn)widget時鐘示例分享
- Android 仿日歷翻頁、仿htc時鐘翻頁、數(shù)字翻頁切換效果
- android高仿小米時鐘(使用Camera和Matrix實現(xiàn)3D效果)
- Android實現(xiàn)簡單時鐘View的方法
- Android自定義動態(tài)壁紙開發(fā)(時鐘)
- Android編程基于自定義控件實現(xiàn)時鐘功能的方法
- Android仿小米時鐘效果
- Android自定義View實現(xiàn)時鐘功能
相關文章
Android 短信轉(zhuǎn)換成彩信的消息數(shù)量(實例代碼)
本文通過實例代碼給大家介紹了Android 短信轉(zhuǎn)換成彩信的消息數(shù)量,需要的朋友可以參考下2017-05-05unity3d發(fā)布apk在android虛擬機中運行的詳細步驟(unity3d導出android apk)
這篇文章主要介紹了unity3d發(fā)布apk在android虛擬機中運行的詳細步驟,需要的朋友可以參考下2014-05-05Android端內(nèi)數(shù)據(jù)狀態(tài)同步方案VM-Mapping詳解
這篇文章主要介紹了Android端內(nèi)數(shù)據(jù)狀態(tài)同步方案VM-Mapping詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-09-09