我们来讲一个计算器的Android的应用实例,其中包含了布局嵌套、菜单以及提示框的运用。下面的这个程序的效果图。
根据看到的结果,我们可以将这个布局分为两部分,第一部分就是上面一行的<inearLayout/>,第二部分就是下面的的按钮部分,它也是一个<inearLayout/>。这两个<inearLayout/>放在一个<inearLayout/>中,这就用到了布局的嵌套。
下面是布局文件的代码:
activity_main.xml
<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:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<EditText
android:id="@+id/op1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:inputType="numberDecimal"
android:background="@android:drawable/editbox_background"/>
<TextView
android:id="@+id/op"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:layout_weight="1" />
<EditText
android:id="@+id/op2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:inputType="numberDecimal"
android:background="@android:drawable/editbox_background"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_horizontal"
android:text="@string/dengyu" />
<EditText
android:id="@+id/result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:inputType="numberDecimal"
android:background="@android:drawable/editbox_background"/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/add"/>
<Button
android:id="@+id/sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/sub"/>
<Button
android:id="@+id/cheng"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/cheng"/>
<Button
android:id="@+id/chu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/chu"/>
</LinearLayout>
</LinearLayout>
在上边的程序中还运用到了菜单。这个事件的设计用到了menu文件夹下的main.mxl,我们在main.xml中设计菜单,下面是代码:
main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/about1"
android:orderInCategory="100"
android:title="@string/about"/>
<item
android:id="@+id/exit1"
android:orderInCategory="100"
android:title="@string/exit"/>
</menu>
string.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">computer</string>
<string name="action_settings">Settings</string>
<string name="dengyu">=</string>
<string name="add">+</string>
<string name="sub">-</string>
<string name="cheng">*</string>
<string name="chu">/</string>
<string name="about">关于</string>
<string name="exit">退出</string>
</resources>
关于提示框的设计比较简单,我们只需要在实体类中手写代码就行。
实体类computer
package bzu.aa.medole;
import java.io.WriteAbortedException;
public class computer {
public static double add(double num1,double num2){
return num1 + num2;
}
public static double sub(double num1,double num2){
return num1 - num2;
}
public static double cheng(double num1,double num2){
return num1 * num2;
}
public static double chu(double num1,double num2) throws ArithmeticException{
return num1 / num2;
}
}
MainActivity.java
package com.example.computer;
import bzu.aa.medole.*;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
private EditText op1;
private TextView op;
private EditText op2;
private EditText result;;
private Button add;
private Button sub;
private Button cheng;
private Button chu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
show();
}
public void show(){
op1 = (EditText)this.findViewById(R.id.op1);
op = (TextView)this.findViewById(R.id.op);
op2 = (EditText)this.findViewById(R.id.op2);
result = (EditText)this.findViewById(R.id.result);
add = (Button)this.findViewById(R.id.add);
add.setOnClickListener(new click());
sub = (Button)this.findViewById(R.id.sub);
sub.setOnClickListener(new click());
cheng = (Button)this.findViewById(R.id.cheng);
cheng.setOnClickListener(new click());
chu = (Button)this.findViewById(R.id.chu);
chu.setOnClickListener(new click());
}
public class click implements OnClickListener{
public void onClick(View v) {
String a = op1.getText().toString();
String b = op2.getText().toString();
double num1 = Double.parseDouble(a);
double num2 = Double.parseDouble(b);
double num = 0.0;
switch(v.getId()){
case R.id.add:
op.setText(" + ");
num = computer.add(num1,num2);
break;
case R.id.sub:
op.setText(" - ");
num = computer.sub(num1,num2);
break;
case R.id.cheng:
op.setText(" * ");
num = computer.cheng(num1,num2);
break;
case R.id.chu:
op.setText(" / ");
if(num2 == 0){
result.setText("除数不能为0");
}else{
num = computer.chu(num1,num2);
}
break;
}
if(!(num2 == 0 && op.getText().equals(" / "))){
result.setText(num +"");
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item){
int item_id = item.getItemId();
switch(item_id){
case R.id.about1:
AlertDialog.Builder adb = new AlertDialog.Builder(this);
adb.setTitle("关于").setMessage("作者\n姓名:郝高明").create().show();
break;
case R.id.exit1:
MainActivity.this.finish();
break;
}
return true;
}
}
按钮的监听事件已经在前面提到过了,这里就重点提一下菜单的监听事件。菜单的监听要重写两个方法,一个是public boolean onCreateOptionsMenu(Menu menu){},还有一个是public boolean onOptionsItemSelected(MenuItem item){},这两个方法是必不可少的,onCreateOptionsMenu()方法是获取菜单的布局的方法,就像我们要获取Acivity的布局所用到的protected void onCreate(Bundle savedInstanceState){}方法是一样的;onOptionsItemSelected()通过这个方法,我们就可以监听菜单的事件,通过获取id,判断所取得id值,就可以实现相应的操作。
提示框的运用就是先创建一个AlertDialog的实例,传参当前Activity对象,通过实例调用.setTitle()、.setMessage()、.create()、.show()等方法,这样就可以显示一个简单的提示框了。
当然你可以把它做的更“美丽”一点,加油!