Android Demo练习体会

摘要:
前言因为我昨天刚刚构建了Android应用程序环境,我真的很想体验一下Android的开发过程。今天下班后,我在网上找到了一些信息,并根据DEMO信息制作了一个小程序,以熟悉其开发过程。在SDK安装文件下的文档中,如果没有人可以通过SDK或eclipse从官方网站安装,请打开eclipse-˃window-˃AndroidsdkandAVDmanager-˃AvailablePackages,展开右侧的树目录,然后单击要下载的文档文件。所有Android控件的属性都是通过Android:格式设置的。有关控件属性的详细信息,请参阅API文档。代码中最外层的LinearLayout是线型布局,其中指定android:orientation=“vertical”表示垂直布局。

前言

  由于昨天刚搭建好Android使用环境,非常想体验下Android开发过程,今天下班便在网上找了一些资料,根据资料DEMO做一个小程序来熟悉其开发过程。首先推荐一个网站http://www.inandroid.cn/bbs/forum-15-1.html。里面的内容对于初学还是不错的。为了开发方便API文档是不可少的,但是目前网上还没有中文的,所以只能硬着头皮看SDK下的文档了。在SDK安装文件下的docs里面,如果没有可以通过SDK或eclipse从官网上安装一个,打开eclipse->window->Android sdk and AVD manager->Available Packages,然后展开右边的树目录,勾上docs文档下载即可。

  先看看一个简单的效果图吧

    Android Demo练习体会第1张

  这是一个通过身高,体重计算健康状态的小程序。(模拟器操作就跟手机一模一)

正文

  1 项目结构图

  Android Demo练习体会第2张

  2 详细说明(copy自http://www.cnblogs.com/over140/archive/2010/09/27/1836567.html)   

    src存放java源代码。

  gen存放编译器自动生成的java代码,这个目录下的文件是系统自动维护的。

  assets存放在这个目录下的文件,无论是mp3还是图片,都会被打包到发布包中。

  res资源文件目录,添加到这个目录下的文件都会在gen下的R.ava文件中显示出来;如果res下存放的资源在应用中没有使用到,那么在gen下的R.java的文件中就不会显示,   那么打包的时候就不会将这部分资源打包,减少了应用的发布文件大小。

  drawable:存放图片文件,注意图片名称必须是[a-z0-9_.]组成;drawable目录下不能分子级目录,只能通过命名方法来加以区分。

  layout:存放与UI相关的布局文件,都是xml文件。

  raw直接复制到设备中的任意文件,不会被编译,可以放数据库文件。

  values存放字符串,颜色,数组等常量数据。可以任意命名,但是通常命名:color.xmlstrings.xmlarray.xmlstyles.xmldimens.xml(定义尺寸值:dimension           value)

  xml任意的XML文件,在运行时可以通过调用Resources.getXML()读取。

3 代码

  界面UI代码是layout文件下的main.xml文件

  

Android Demo练习体会第3张Android Demo练习体会第4张代码
<?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"
>
<TextView
android:layout_width="fill_parent"
android:layout_height
="wrap_content"
android:text
="@string/height">
</TextView>
<EditText android:id="@+id/height"
android:layout_width
="fill_parent"
android:layout_height
="wrap_content"
android:numeric
="integer"
android:text
="">
</EditText>
<TextView
android:layout_width="fill_parent"
android:layout_height
="wrap_content"
android:text
="@string/weight">
</TextView>
<EditText android:id="@+id/weight"
android:layout_width
="fill_parent"
android:layout_height
="wrap_content"
android:numeric
="integer"
android:text
="">
</EditText>
<Button android:id="@+id/submit"
android:layout_width
="fill_parent"
android:layout_height
="wrap_content"
android:text
="@string/bmi_btn">
</Button>
<TextView android:id="@+id/result"
android:layout_width
="fill_parent"
android:layout_height
="wrap_content"
android:text
="">
</TextView>
<TextView android:id="@+id/suggest"
android:layout_width
="fill_parent"
android:layout_height
="wrap_content"
android:text
="">
</TextView>
</LinearLayout>

   上面用到了3个widget分别是 TextView,Button和EditText。Android的所有控件的属性都是通过android:形式来设置的,关于控件属性的详细介绍可以看API文档。代码中最外层的LinearLayout是一种线型布局,其中指定android:orientation="vertical"表示垂直布局。通过@[类型]/[识别符号]如@string/height通过R.java做中介可以读取values下的xml文档。

所有Res下的xml文档都会在R.java中自动生成相应的代码

Android Demo练习体会第5张Android Demo练习体会第6张R.java
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* aapt tool from the resource data it found. It
* should not be modified by hand.
*/

package com.demo.android.bmi;

public final class R {
public static final class attr {
}
public static final class drawable {
public static final int icon=0x7f020000;
}
public static final class id {
public static final int height=0x7f050000;
public static final int result=0x7f050003;
public static final int submit=0x7f050002;
public static final int suggest=0x7f050004;
public static final int weight=0x7f050001;
}
public static final class layout {
public static final int main=0x7f030000;
}
public static final class string {
public static final int advice_average=0x7f040001;
public static final int advice_heavy=0x7f040002;
public static final int advice_light=0x7f040000;
public static final int app_name=0x7f040004;
public static final int bmi_btn=0x7f040007;
public static final int height=0x7f040005;
public static final int hello=0x7f040003;
public static final int weight=0x7f040006;
}
}
Android Demo练习体会第7张Android Demo练习体会第8张strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, Bmi!</string>
<string name="app_name">BMI</string>
<string name="height">身高(CM)</string>
<string name="weight">体重(KG)</string>
<string name="bmi_btn">计算MBI值</string>
</resources>

  在源代码中可以使用R.类型.识别标识来获取值。通过这种方式将界面main.xml和描述信息strings.xml有效的分离出来。到目前为止,一个如第一张图所示的界面已经出来了。关于逻辑实现部分等下次在补充(比较晚了困哦)。

PS:其实我觉得Android的UI界面标记语言跟Sliverlight很接近。大家有什么好的资料拿出来一起分享哦!睡了睡了每天熬夜对身体不好啊!

补充:

  结果图:

  Android Demo练习体会第9张

逻辑代码:

  

Android Demo练习体会第10张Android Demo练习体会第11张代码
package com.demo.android.bmi;

import java.text.DecimalFormat;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class Bmi extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

//通过findViewById方法获取控件
Button submitBtn = (Button)findViewById(R.id.submit);
//为按钮添加鼠标单击事件
submitBtn.setOnClickListener(calBMI);
}

/*
* 声明事件
*/
private OnClickListener calBMI = new OnClickListener() {

@Override
public void onClick(View v) {
DecimalFormat nf
= new DecimalFormat("0.00");
EditText fieldHeight
= (EditText)findViewById(R.id.height);
EditText fieldWeight
= (EditText)findViewById(R.id.weight);
//通过getText()方法获取控件内容
double height = Double.parseDouble(fieldHeight.getText().toString())/100;
double weight = Double.parseDouble(fieldWeight.getText().toString());
double BMI = weight/(height*height);

TextView result
= (TextView)findViewById(R.id.result);
//通过setText()方法设置控件内容
result.setText("Your BMI is " + nf.format(BMI));

TextView fieldSuggest
= (TextView)findViewById(R.id.suggest);
if(BMI>25){
fieldSuggest.setText(R.string.advice_heavy);
}
else if(BMI<20){
fieldSuggest.setText(R.string.advice_light);
}
else{
fieldSuggest.setText(R.string.advice_average);
}
}
};
}

免责声明:文章转载自《Android Demo练习体会》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇OneinStack——PHP多版本共存jar包中的MANIFEST.MF能否手工编辑替换下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C#批量附加指定目录下的所有数据库文件到数据库中

应用场合:因为经常更换操作系统,所以D盘存放数据库文件目录的数据库每次都要一个一个的附加到MSSQL中,因此设计程序批量附加省时间也方便自己和大家。 程序不足:没有去研究跟实现NDF日志文件附加和多个日志文件的数据库附加。 程序源码:         /// <summary>         /// 循环查找指定目录下要附加的数据库文件和对...

[Swift]Scanner字符串扫描类

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址:https://github.com/strengthen/LeetCode➤原文地址:https://w...

Scala入门系列(十二):隐式转换

引言 Scala提供的隐式转换和隐式参数功能,是非常有特色的功能。是Java等编程语言所没有的功能。它可以允许你手动指定,将某种类型的对象转换成其他类型的对象。通过这些功能可以实现非常强大而且特殊的功能。 Scala的隐式转换,其实最核心的就是定义隐式转换函数,即implicit conversion function。定义的隐式转换函数,只要在编写的...

xml之dom4j解析

* 使用dom4j解析xml 实例在java520里面 TextDom4j * dom4j,是一个组织,针对xml解析,提供解析器dom4j * dom4j不是javase的一部分,想要使用第一步需要怎么做 - 导入dom4j提供jar包 - 常见一个文件夹lib - 复制jar包到lib下面 - 邮件点击jar包.builb path -- add to...

Dubbo学习笔记12:使用Dubbo中需要注意的一些事情

指定方法异步调用 前面我们讲解了通过设置ReferenceConfig的setAsync()方法来让整个接口里的所有方法变为异步调用,那么如何指定某些方法为异步调用呢?下面讲解下如何正确地设置默写方法为异步调用。 假如你只需要设置接口里的方法sayHello为异步调用,那么可以使用下面方式: final List<MethodConfig> a...

关于JavaScriptInterface的一系列问题

先明确主题,主要做了什么。 接手时app主体是混合开发,以elipse+android SDK为开发环境,但我是个渣渣,我只会用AS,就转成了AS,这部分等会新开文章写。 主要的view只有一个activity_main,里边写了个webview,在mainactivity里去掉了actionbar,一个导入库都没有有四个jar包,然后所有的HTML代码放...