- 浏览: 154240 次
- 性别:
- 来自: 桂林
文章分类
最新评论
-
vavi:
这个原因应该是你的类放在系统的classpath下面,由系统类 ...
不同ClassLoader加载的类,能cast赋值啊! -
xyg123_1979163.com:
因为你的FileSystemClassLoader没有指定其父 ...
不同ClassLoader加载的类,能cast赋值啊! -
banxi1988:
mirguest 写道因为C中参数其实是传值的。调用那个函数时 ...
我做错的面试笔试题(c/c++版) -
mirguest:
#include<stdio.h>
#inclu ...
我做错的面试笔试题(c/c++版) -
mirguest:
因为C中参数其实是传值的。调用那个函数时,我们只是把全局的p的 ...
我做错的面试笔试题(c/c++版)
在原有应用中,还不能让用户自己添加茶叶,及修改每种茶叶的泡茶时间等等。
下面我们将完成这些功能。
首先要以一个菜单来在让用户执行这些功能,主要有添加及修改相关功能。
一般在android机都在机身了提供了一个menu按钮。当用户点击机身上的"Menu"按钮时,选项工菜单一般设置在底部出现。
Android会自己负责菜单的自动创建和显示。我们只需要告诉android。菜单显示什么内容及当用户点击相应的菜单选项时该做什么就行了。
先在string.xml文件中添加一个菜单标签先。如下:
创建选项菜单:
创建新Android Xml File。然后文件名为:main.xml
资源类型为menu。然后输入目录。eclipse自己会创建一个res/menu目录的。
打开res/menu/main.xml文件,添加菜单项。main.xml文件如下:
然后在BrewClockActivity.java代码中重载onCreateOptionsMenu()这个方法。
这个方法告诉Android,当用户点击"Menu"按钮时装载我们的菜单。
当用户点击"Menu"按钮时Android将调用onCreateOptionsMenu()方法。
inflate是充气膨胀膨化的意思。
MenuInflater类用来将menu的xml文件实例化为菜单对象。
This class is used to instantiate menu XML files into Menu objects.
在Activity类中有用来返回MenuInflater对象的方法。
小插曲,我现有时候模拟器运行不起来,我就跑到终端将其杀死。但是android在运行模拟器的同时也创建了其他进程,所以当我删除一个avd的时候,提示无法删除啊。
然后我新建一个,新建一个第一次运行时比较慢。
然后在run dialog..处还要确定target是新建的avd。
当程序运行起来的时候点击"Menu"按键时会在窗口在底部弹出一个菜单。
点击后菜单自动消失。
下面来处理下菜单点击事件。
当用户点击添加菜单后,菜单消失了,但是我们此时应该给用户一个添加菜叶品种记录的添加界面。也就是一个Activity子类。
如下:
然后再将这个activity注册到应用程序中。即在AndroidManifest.xml中的Application节点下
添加一个声明Activity的节点。
接下来开发茶叶添加编辑页面。
新建一个Android Xml 文件。选择资源类型为layout。
命名为add_tea.xml。
如下:
值得注意的是上面的让两个按钮并排显示。的代码。
上面有一个新的东西就是"@dimen/m9"。其实跟"@string/name"类似的。
有一个dimens.xml的文件在values目录下。
res/values/dimens.xml
在运行时发再没有画面,仔细查看了下:
发现应该还要把AddTeaActivity的onCreate()方法修改如下:
运行的时候遇到下面的一个错误:
11-10 01:40:03.609: ERROR/AndroidRuntime(711): Caused by: java.lang.RuntimeException: Binary XML file line #30: You must supply a layout_width attribute.
检查后发现,因为button中没有layout_width添加之后。问题解决:
下面在AddTeaActivity中关联界面表单属性。
及设置相关事件,处理事件。如下,一个相对完整的AddTeaActivity类了
一个值得注意的地方就是,上面的弹出的AlertDialog要用Back键才能消除。因为没有设置确定按钮。
总结下上面用到的新控件就是:
(1) SeekBar。相当于一个进度条。
(2) AlertDailog。有点类似于JavaScript中的alert()。
(3)Toast异步弹出消息框。
在模拟器玩android时,我发现,有两点问题。
(0) 添加成功之后,要重新启动这个程序才能显示新添加的茶叶。(等改进)
(1)不能输入中文。
(2) 不知道怎么上传音乐文件来测试音乐播放。
上面把主要的介绍到这里了,整个项目文件在附件里。
后面还会有完善的代码放出。
从开始接触到跟着教程和自己理解做成了这个一个小程序。
嗯,以后接着努力。
未完待续------------
下面我们将完成这些功能。
首先要以一个菜单来在让用户执行这些功能,主要有添加及修改相关功能。
一般在android机都在机身了提供了一个menu按钮。当用户点击机身上的"Menu"按钮时,选项工菜单一般设置在底部出现。
Android会自己负责菜单的自动创建和显示。我们只需要告诉android。菜单显示什么内容及当用户点击相应的菜单选项时该做什么就行了。
先在string.xml文件中添加一个菜单标签先。如下:
<!-- begin Menu 选项菜单项 --> <string name="add_tea_label">添加茶</string> <!-- end Menu 选项菜单项 -->
创建选项菜单:
创建新Android Xml File。然后文件名为:main.xml
资源类型为menu。然后输入目录。eclipse自己会创建一个res/menu目录的。
打开res/menu/main.xml文件,添加菜单项。main.xml文件如下:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/add_tea" android:title="@string/add_tea_label"></item> </menu>
然后在BrewClockActivity.java代码中重载onCreateOptionsMenu()这个方法。
这个方法告诉Android,当用户点击"Menu"按钮时装载我们的菜单。
@Override public boolean onCreateOptionsMenu(Menu menu){ MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main, menu); return true; }
当用户点击"Menu"按钮时Android将调用onCreateOptionsMenu()方法。
inflate是充气膨胀膨化的意思。
MenuInflater类用来将menu的xml文件实例化为菜单对象。
引用
This class is used to instantiate menu XML files into Menu objects.
在Activity类中有用来返回MenuInflater对象的方法。
public MenuInflater getMenuInflater () Since: API Level 1 Returns a MenuInflater with this context.
小插曲,我现有时候模拟器运行不起来,我就跑到终端将其杀死。但是android在运行模拟器的同时也创建了其他进程,所以当我删除一个avd的时候,提示无法删除啊。
然后我新建一个,新建一个第一次运行时比较慢。
然后在run dialog..处还要确定target是新建的avd。
当程序运行起来的时候点击"Menu"按键时会在窗口在底部弹出一个菜单。
点击后菜单自动消失。
下面来处理下菜单点击事件。
当用户点击添加菜单后,菜单消失了,但是我们此时应该给用户一个添加菜叶品种记录的添加界面。也就是一个Activity子类。
如下:
package me.banxi.brewclock; import android.app.Activity; import android.os.Bundle; public class AddTeaActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } }
然后再将这个activity注册到应用程序中。即在AndroidManifest.xml中的Application节点下
添加一个声明Activity的节点。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="me.banxi.brewclock" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".BrewClockActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".AddTeaActivity" android:label="@string/add_tea_label" /> </application> </manifest>
接下来开发茶叶添加编辑页面。
新建一个Android Xml 文件。选择资源类型为layout。
命名为add_tea.xml。
如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:text="@string/tea_name_label" android:textSize="30dip" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1"/> <EditText android:id="@+id/tea_name" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1"/> <TextView android:text="@string/brew_time_label" android:textSize="30dip" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1"/> <SeekBar android:id="@+id/brew_time_seekbar" android:layout_width="fill_parent" android:layout_height="wrap_content" android:progress="2" android:max="9" android:layout_weight="1"/> <TextView android:id="@+id/brew_time_value" android:text="3 m" android:textSize="30dip" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:layout_weight="1"/> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1"> <Button android:text="@string/ok" android:id="@+id/ok_add_tea" android:layout_height="match_parent" android:layout_weight="1" android:layout_margin="@dimen/m9"></Button> <Button android:text="@string/cancel" android:id="@+id/cancel_add_tea" android:layout_height="match_parent" android:layout_weight="1" android:layout_margin="@dimen/m9"></Button> </LinearLayout> </LinearLayout>
值得注意的是上面的让两个按钮并排显示。的代码。
上面有一个新的东西就是"@dimen/m9"。其实跟"@string/name"类似的。
有一个dimens.xml的文件在values目录下。
res/values/dimens.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="m7">7dip</dimen> <dimen name="m9">9dip</dimen> </resources>
在运行时发再没有画面,仔细查看了下:
发现应该还要把AddTeaActivity的onCreate()方法修改如下:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.add_tea); }
运行的时候遇到下面的一个错误:
引用
11-10 01:40:03.609: ERROR/AndroidRuntime(711): Caused by: java.lang.RuntimeException: Binary XML file line #30: You must supply a layout_width attribute.
检查后发现,因为button中没有layout_width添加之后。问题解决:
<LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1"> <Button android:text="@string/ok" android:id="@+id/ok_add_tea" android:layout_height="match_parent" android:layout_width="match_parent" android:layout_weight="1" android:layout_margin="@dimen/m9"></Button> <Button android:text="@string/cancel" android:id="@+id/cancel_add_tea" android:layout_height="match_parent" android:layout_width="match_parent" android:layout_weight="1" android:layout_margin="@dimen/m9"></Button> </LinearLayout>
下面在AddTeaActivity中关联界面表单属性。
及设置相关事件,处理事件。如下,一个相对完整的AddTeaActivity类了
package me.banxi.brewclock; import android.app.Activity; import android.app.AlertDialog; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; import android.widget.Toast; public class AddTeaActivity extends Activity { protected EditText teaName; protected SeekBar brewTimeSeekBar; protected TextView brewTimeLabel; protected Button okButton; protected Button cancelButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.add_tea); // get form view object from xml teaName = (EditText) findViewById(R.id.tea_name); brewTimeSeekBar = (SeekBar)findViewById(R.id.brew_time_seekbar); brewTimeLabel = (TextView)findViewById(R.id.brew_time_value); okButton = (Button)findViewById(R.id.ok_add_tea); cancelButton = (Button)findViewById(R.id.cancel_add_tea); // 为SeekBar添加事件监听器 brewTimeSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if(seekBar == brewTimeSeekBar){ brewTimeLabel.setText((progress+1)+"m" ); } } public void onStopTrackingTouch(SeekBar seekBar) {} public void onStartTrackingTouch(SeekBar seekBar) {} }); // 为OK Button 添加事件监听器 okButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { String teaNameText = teaName.getText().toString().trim(); int brewTimeValue = brewTimeSeekBar.getProgress()+1; if(teaNameText.length() < 2 ){ AlertDialog.Builder dialog = new AlertDialog.Builder(getApplicationContext()); dialog.setTitle(R.string.invalid_tea_name); dialog.setMessage(R.string.empty_tea_name); dialog.show(); }else{ saveTea(teaNameText, brewTimeValue); } } }); }// onCrreate private void saveTea(String teaNameText, int brewTimeValue) { TeasOpenHelper teasOpenHelper = new TeasOpenHelper(this); teasOpenHelper.insert(teaNameText, brewTimeValue); teasOpenHelper.close(); Toast.makeText(getApplicationContext(), getString(R.string.tea_add_success), Toast.LENGTH_SHORT).show(); } }
一个值得注意的地方就是,上面的弹出的AlertDialog要用Back键才能消除。因为没有设置确定按钮。
总结下上面用到的新控件就是:
(1) SeekBar。相当于一个进度条。
(2) AlertDailog。有点类似于JavaScript中的alert()。
(3)Toast异步弹出消息框。
在模拟器玩android时,我发现,有两点问题。
(0) 添加成功之后,要重新启动这个程序才能显示新添加的茶叶。(等改进)
(1)不能输入中文。
(2) 不知道怎么上传音乐文件来测试音乐播放。
上面把主要的介绍到这里了,整个项目文件在附件里。
后面还会有完善的代码放出。
从开始接触到跟着教程和自己理解做成了这个一个小程序。
嗯,以后接着努力。
未完待续------------
- BrewClock_v3.zip (102.1 KB)
- 下载次数: 10
发表评论
-
[翻译学习]JQuery Mobile按钮之基本按钮!
2012-01-15 14:12 10586(为什么代码不能高亮显示???) 一:基本按钮: 按钮通常用 ... -
[翻译学习]JQuery Mobile页面切换
2012-01-15 11:05 0这个以前翻译过,现在暂时不想翻,翻译的都不见了,怎么回事啊! -
android学习数独游戏开发(一)
2012-01-07 23:18 0一种简单的数独游戏 -
[翻译介绍]jquerymobile页面切换(Page transitions)!
2011-12-31 23:55 0原文来源: http://jquerymo ... -
[翻译介绍]jquerymobile的页面连接(Linking pages)
2011-12-30 15:03 15986一:链接页(Linking pages)jQuery Mobi ... -
[翻译介绍]jquerymobile页面(page)分解
2011-12-20 11:58 7768Jquery Mobile"page" ... -
用phonegap和jquery-mobile写android应用!
2011-12-20 10:42 5565今天纪录的是学习用phonegap和jquery-moblie ... -
Android4源代码下载实录1!
2011-11-16 00:13 5133官方下载介绍网站是这 ... -
Android学习手记二:程序升级加入sqlite支持!
2011-11-08 10:26 4224我在前面文章中记录了学习第一个android程序的过程及经验总 ... -
Android学习手记:第一个应用程序!
2011-10-29 23:44 1463原本很久以前就有打算学习Android的。但是因为androi ...
相关推荐
本文将基于"Android学习手记:第一个应用程序!"这一主题,结合源码分析,深入探讨Android应用开发的基本流程。 首先,你需要安装Android Studio,这是Google官方提供的集成开发环境(IDE),它包含了所有必要的...
《Oracle DBA手记2:数据库诊断案例与内部恢复实践》是一本专为Oracle数据库管理员(DBA)设计的专业书籍,旨在深入探讨Oracle数据库的诊断技巧和内部恢复策略。本书结合实际案例,提供了丰富的实战经验,帮助读者...
### Android开发手记一_NDK编程实例 #### 一、开发环境的搭建 在开始具体的NDK编程之前,首先需要确保开发环境已经被正确地搭建起来。对于初次接触Android NDK开发的朋友来说,拥有一个良好的环境配置是至关重要的...
<LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > android:layout_...
《匠人手记:一个单片机工作者的实践与思考》是一本由具有多年硬件开发经验的作者编写的书籍,旨在为那些对硬件开发感兴趣的读者提供深入的学习资源。本书不仅仅是一本理论指南,更是一本充满实践经验的手册,它能够...
本压缩包文件“MATLAB GUI设计学习手记(第二版)源程序”提供了关于MATLAB GUI设计的实例代码和教程,对于想要深入学习MATLAB GUI编程的用户来说,是一份宝贵的资源。 MATLAB GUI设计涉及多个方面,包括组件使用、...
匠人手记:一个单片机工作者的实践与思考匠人手记【完整高清版】
总体而言,《匠人手记》不仅仅是一本单片机技术书籍,它还传递了一种学习的态度和对技术的热爱。作者通过自己的工作经验和体会,向读者展示了一个真实而又充满思考的技术世界。这种技术与人文结合的风格,使本书在...
本资料“MATLAB GUI设计学习手记(第2版)”主要面向初学者,旨在帮助他们快速掌握GUI的设计技巧。 GUI(图形用户界面)在MATLAB中的设计是通过GUIDE(GUI Development Environment)工具完成的,它提供了一个可视化...
Oracle.DBA手记·4:数据安全警示录
Oracle DBA手记4:数据安全警示录 盖国强 著 ISBN 978-7-121-17206-9 2012年7月出版 定价:65.00元 16开 404页 宣传语 灾难与拯救 全真全程商业案例! 2内 容 简 介 这是一本写给大家看的数据安全之书,不仅仅是...
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> android:layout_...
Oracle.DBA手记·4:数据安全警示录.pdf
【Nexys3学习手记7:MicroBlaze小试牛刀】 这篇文章是关于使用Xilinx的嵌入式开发平台Nexys3进行MicroBlaze软核处理器的应用开发的学习笔记。MicroBlaze是一款可定制的32位RISC处理器,适用于FPGA(Field-...
《MATLAB GUI设计学习手记(第2版)》在第1版的基础上,完善了全书知识结构,突出了gui设计重点,对读者经常遇到的38个问题作了透彻的解答,并提炼出13个专题作了详尽的介绍,最后配以长达17.5小时的免费视频教程对书...
《程序匠人手记网络版全篇》是一份详尽且深入的编程学习资源,它汇集了程序匠人在编程领域的丰富经验和深入理解。这份资料旨在为程序员提供一个全面的学习平台,帮助他们提升技能,理解编程背后的思维方式,以及如何...
在《匠人手记》一书中,作者对单片机从选型到硬件接口设计,再到程序编写和调试技巧的每一个环节都进行了详尽的描述。书中可能包含多个具体的项目案例,通过实际的项目解析,讲解如何从零开始搭建一个单片机系统,...