最近终于完成了一个自己写的android小程序,之前提交给android程序大赛结果给毙了,那自己写了自己用好了呵呵。是一个随身记账的小程序,明年正式开始使用,结束自己的月光生活哇咔咔。
我也是自己边看书边写的,编程基础不算好,难免有不规范的地方,凑合看好了:-D
这个程序大致涉及以下这些android开发技术:界面布局,使用组件,菜单,对话框,消息提示条Toast,照相机,手机震动,数据库应用等。我记录下来开发过程中怎样利用这些技术以及遇到的一些问题,现在就和大家分享一下
1、怎样看到输出日志,方便调试?
2、怎样在一个xml里面布局达到我们想要的效果?
3、接受按钮事件响应的两种方式
4、怎样调用照相机
5、怎样写带图片的菜单栏
6、怎样使用Toast
7、怎样震动手机
8、R.java没有自动生成了怎么办
9、怎样创建和管理数据库
10、弹出对话框的使用
11、edittext的focus和click事件区别
12、退出程序的方法
13、开机自动启动的方法
1、eclipse里面的console输出日志在android工程下面好像不可用了,但是android有自己专属的日志输出台,在window->show view里面other,找到android选中logcat。在编程的时候:
String sql = "......"; Log.i("excute sql:", sql);
就可以看到如下的效果
注意,logcat不支持中文
2、xml布局写完xml代码后,可以点击layout预览,但是注意,它并一定能很好的呈现你所写的包括组件的属性等,比如你设置了一个按钮的textSize是30px,预览的时候可能看到一个变形的按钮,所以最终要在模拟器或者真机上面运行看效果。
我在布局是使用了最笨的绝对布局,因为我不知道怎么比较好看的使用已有的布局写出来,主界面是绝对布局一点一点调整的,不过跳转到的activity我使用了线性布局中嵌套相对布局的方法,还算比较容易写,效果也还可以。比如以下xml写的效果就是:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/white"> <TextView android:id="@+id/payTittle" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="新增支出" android:textColor="#FFFF0000" android:gravity="center_horizontal" /> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/pay_amount" android:layout_width="80px" android:layout_height="wrap_content" android:layout_marginLeft="10px" android:textSize="30px" android:text=" 金额: " /> <EditText android:id="@+id/pay_edittext_amount" android:layout_toRightOf="@id/pay_amount" android:layout_width="160px" android:layout_height="wrap_content" android:numeric="decimal" android:text="输入金额" /> <TextView android:layout_toRightOf="@id/pay_edittext_amount" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="30px" android:text=" 元" android:textColor="#FFFF0000" /> </RelativeLayout> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content"> <RadioGroup android:id="@+id/pay_category1" android:orientation="vertical" android:layout_width="160px" android:layout_height="wrap_content"> <RadioButton android:id="@+id/pay_category_buy" android:text=" 买东西" android:textColor="#000000" android:layout_marginLeft="10px"/> <RadioButton android:id="@+id/pay_category_eat" android:text=" 吃饭" android:textColor="#000000" android:layout_marginLeft="10px"/> </RadioGroup> <RadioGroup android:id="@+id/pay_category2" android:layout_toRightOf="@id/pay_category1" android:orientation="vertical" android:layout_width="160px" android:layout_height="wrap_content"> <RadioButton android:id="@+id/pay_category_live" android:text=" 住宿" android:textColor="#000000" android:layout_marginRight="10px"/> <RadioButton android:id="@+id/pay_category_behave" android:text=" 出行" android:textColor="#000000" android:layout_marginRight="10px"/> </RadioGroup> </RelativeLayout> <DatePicker android:id="@+id/date_picker" android:layout_marginLeft="10px" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/pay_comment" android:layout_width="80px" android:layout_height="wrap_content" android:layout_marginLeft="10px" android:textSize="30px" android:text=" 备注: " /> <EditText android:id="@+id/pay_edittext_comment" android:layout_toRightOf="@id/pay_comment" android:layout_width="160px" android:layout_height="wrap_content" android:text="输入备注" /> </RelativeLayout> <Button android:id="@+id/pay_get_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:textSize="30px" android:text="完成" /> </LinearLayout>
另外一个问题是横竖屏转换的时候,怎样保证布局不变形?依然是最笨的方法,禁止横屏。。。方法自己百度
3、接受按钮响应,一种可以为每一个按钮设置响应函数:
Button button = (Button) findViewById(R.id.button); button.setOnClickListener(button_listener); //之后 private Button.OnClickListener button_listener = new Button.OnClickListener() { public void onClick(View v) { setTitle("哎呦,button被点了一下"); } };
或者写成回调函数统一响应所有的click事件,在函数里面判断传递进来的id是什么
// 获取按钮对象实例句柄 mBtnPay = (ImageButton) findViewById(R.id.imagebutton_pay); mBtnEarn = (ImageButton) findViewById(R.id.imagebutton_earn); mBtnReview = (ImageButton) // 设置侦听器 mBtnPay.setOnClickListener(this); mBtnEarn.setOnClickListener(this); mBtnReview.setOnClickListener(this); @Override /* * 接收点击事情时回调 */ public void onClick(View v) { switch (v.getId()) { case R.id.imagebutton_pay: { // 跳转到支付页面 Intent intent = new Intent(); intent.setClass(MoonliteBoxActivity.this, PayActivity.class); startActivity(intent); break; } case R.id.imagebutton_earn: { // 跳转到收入页面 Intent intent = new Intent(); intent.setClass(MoonliteBoxActivity.this, EarnActivity.class); startActivity(intent); break; } case R.id.imagebutton_review: { // 跳转到账单页面 Intent intent = new Intent(); intent.setClass(MoonliteBoxActivity.this, ReviewActivity.class); startActivity(intent); break; } } }
4、调用照相机的代码其实很简单,不想很多网上说的那么复杂
Intent intent = new Intent(); // 调用照相机 intent.setAction("android.media.action.STILL_IMAGE_CAMERA"); startActivity(intent);
5、菜单栏就是按下menu键之后出现的菜单
如果要写带图片的菜单,那必须写成xml的形式再关联到代码中
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <group> <item android:id="@+id/MI_ABOUT" android:title="About" android:icon="@drawable/about"> </item> <item android:id="@+id/MI_Exit" android:title="Exit" android:icon="@drawable/exit"> </item> </group> </menu>
在程序中这样调用:
@Override /* * 创建menu栏 */ public boolean onCreateOptionsMenu(Menu menu) { // 填充菜单 MenuInflater inflater = getMenuInflater(); inflater.inflate(R.layout.options_menu, menu); //和xml关联 return (super.onCreateOptionsMenu(menu)); } @Override /* * menu按键响应 */ public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.MI_ABOUT: { doAbout(); break; } case R.id.MI_Exit: { doQuit(); break; } } return (super.onOptionsItemSelected(item)); }
6、Toast我是灰常喜欢用,这种提示条方便使用而且看着也很舒服
Toast toast = null; toast = Toast.makeText(getApplicationContext(), "写入成功!", Toast.LENGTH_LONG);//可以控制时间长短 toast.show();
如果是要带图的Toast:
Toast toast = null; toast = Toast.makeText(getApplicationContext(), "开发者的头像", Toast.LENGTH_LONG); toast.setGravity(Gravity.CENTER, 0, 0); LinearLayout toastView = (LinearLayout) toast.getView(); ImageView image = new ImageView(getApplicationContext()); image.setImageResource(R.drawable.my); toastView.addView(image, 0); toast.show();
7、调用震动的代码也很简单,但是一定要记得在manifest.xml中间加上
<uses-permission android:name="android.permission.VIBRATE"> </uses-permission>
然后再程序中:
// 震动半秒 Vibrator service = (Vibrator) this .getSystemService(Context.VIBRATOR_SERVICE); service.vibrate(500);
当然,模拟器是感受不到滴
先写到这里,后面的几点有时间继续写:-D
android系统图标下载(我的资源都是使用的这里面的):http://download.csdn.net/source/2756292,资源分要6分,如果谁下载不了我可以发邮件给他