随着Android的越炒越热和各种应用的不断推出,自己也比较巧合的在去年12月份宽带续费时给送了个电信的Android系统定制机——算是促使我提前了Android开发的学习计划,并给我提供了一个开发测试的'场地'(手机),也更增强了我学习Android程序开发的兴趣——别的市场前景等先暂且不说,至少我学会了,可以做个程序自己用。闲话少说,Android程序开发学习笔记这个系列,我将尽量让每篇博客保持统一的风格,在开始分享学习经验之前列出这篇博客主要讲些什么——知识点,也力求以简短明了的讲述,让正在学习Android程序开发的朋友们能更快、更准确的了解到你想知道的,不过我也知道即使写的再'好',可能还是有人感觉没有讲清楚或讲到正点上,希望大家能多提意见,让这个系列能更具可读性!
本文知识要点:
1.3 Activity之间跳转简单传值,Intent的简单使用
1.4 控件事件的绑定
1.1 Android应用程序目录结构、文件夹及其文件说明
原本想在上图中直接添加批注,但感觉比较麻烦且空间小不容易说清楚,下面就针对上图中的几个红色区域重点说明下:
R.java——此文件是应用程序资源(Resource)类,包括控件id,layout,strings,drawable,以方便在整个应用程序中对资源的使用和统一管理;此类是自动生成的,不要手动修改!
res文件夹下的 以drawable开头的文件夹分别放的是高(h)、低(l)、中(m)不同分辨率的图片,即为了兼容或者说让应用程序在不同分辨率下的机器上更好的呈现,一般一张图片要弄三张不同分辨率的放在这三个文件夹下,如:应用程序的图标或其中所用到的图片,应用程序在启动时会根据当前机器(客户端)的分辨率采用合适的一张图片;放在drawable文件夹下的图片会自动在R.java文件的drawable类生成一个相应的变量,代码如下:
public static final class drawable {
public static final int cat=0x7f020000;
public static final int ic_launcher=0x7f020001;
}
layout文件夹下放的是内容视图文件,可以理解为跟.net中.aspx文件类似——界面布局文件,那就会有朋友问了:每个内容视图文件的代码控制类是如何与之关联的?这个需要在每个Activity类的onCreate方法中 通过 setContentView(R.layout.formactivity); 此行代码设置。其中main.xml是默认的内容视图文件!
values文件夹下放的是当前应用程序中使用到的字符串——以键值对的形式存放,如:应用程序的名称、按钮等提示文本,这样做的好处是:将文本字符串与代码分离,方便做国际化,如你现在做的应用程序针对的是中国用户,当你想增加个日本或英文版本时,你只需要在values文件夹下增加相应国际化的strings.xml文件即可!具体做法会在以后的博客中讲解。
src文件夹下当前应用程序项目名称文件夹下 放的一般是Activity类(可以理解为界面窗体后置代码类)和其它的类文件。
AndroidManifest.xml 此文件类似与.net中的web.config文件——应用程序配置文件,如配置:应用程序名称和icon、最低支持的SDK版本、用户权限、第三方类库等,在这篇文章里只具体说下常用和基础的配置属性,文件内容如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.FirstAVd"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".FirstAVdActivity"
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=".FormActivity"
android:label="@string/formactivity_name" >
</activity>
</application>
</manifest>
package="android.FirstAVd" 当前应用程序的包名
android:versionCode="1" 当前应用程序的版本号
android:versionName="1.0" 当前应用程序的版本名称
<application
android:icon="@drawable/ic_launcher" 当前应用程序的图标
android:label="@string/app_name" > 当前应用程序的名称
<activity
android:name=".FirstAVdActivity" 界面窗体的类名
android:label="@string/app_name" > 界面窗体的名称
如上有两个activity的声明(注册),但只有内部有<intent-filter>的activity才是应用程序默认启动的窗体界面,而且每个activity必须要在此文件中声明(注册),否则将会报错!
1.2 Button TextView控件的基本用法
首先在内容视图xml文件中添加控件,再在对应的activity类中根据控件id获得控件对象,代码如下:
<TextView
android:id="@+id/tvShow"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/author" />
<Button
android:id="@+id/btnchangecontent"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class FirstAVdActivity extends Activity {
private TextView tvShow;
private Button btnSendSms;
private Button btnAction;
private Button btnchangecontent;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/**
* TextView tv2 = new TextView(this);
tv2.setText("Nice see you!"+new Date().getTime());
setContentView(tv2);
*/
//设置当前Activity的内容视图(文件)
setContentView(R.layout.main);
tvShow=(TextView)this.findViewById(R.id.tvShow);
btnAction=(Button)this.findViewById(R.id.btnforward);
btnAction.setText("测试按钮");
btnAction.setTextSize(23);
btnAction.setTextColor(Color.GREEN);
btnAction.setBackgroundColor(Color.GRAY);
btnAction.setOnClickListener(new BtnActionOnClickListener());
1.3 Activity之间跳转简单传值,Intent的简单使用
如以下代码实现的是从FirstAVdActivity跳转到FormActivity,并在FormActivity中获得传递的值的实现:
FirstAVdActivity中的跳转按钮事件——
class BtnActionOnClickListener implements OnClickListener
{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//创建一个Intent请求对象
Intent intent=new Intent();
//将要传递的值以键值对的形式存放在intent对象中
intent.putExtra("user_name", "tom_marker");
//设置请求的源(FirstAVdActivity)和目标(FormActivity)
intent.setClass(FirstAVdActivity.this, FormActivity.class);
//执行请求
FirstAVdActivity.this.startActivity(intent);
}
}
FormActivity中获得传递值——
public class FormActivity extends Activity {
private TextView tvShow;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
try {
super.onCreate(savedInstanceState);
setContentView(R.layout.formactivity);
Intent intent=this.getIntent();
tvShow=(TextView)this.findViewById(R.id.tvShow);
//tvShow.setText(new Date().getMinutes());
tvShow.setText(R.string.welText+intent.getStringExtra("user_name"));
} catch (Exception e) {
tvShow.setText("Error: "+e.getMessage());
}
}
}
1.4 控件事件的绑定
事件的绑定有如下两种方式,贴出代码,一看便知
方式一
btnchangecontent.setOnClickListener(new View.OnClickListener(){
public void onClick(View v)
{
//Toast提示控件
Toast.makeText(FirstAVdActivity.this,
"TextView里的文字发生了改变,你注意到了吗?",
Toast.LENGTH_LONG).show();
//将tvShow的文字发生改变
tvShow.setText("Android Button控件绑定单击事件"+"\n"+new Date().getTime());
}
});
方式二
btnSendSms.setOnClickListener(new BtnSendSmsOnClickListener());
class BtnSendSmsOnClickListener implements OnClickListener
{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//创建一个Intent请求对象
Uri uri=Uri.parse("smsto://13227517186");
Intent intent=new Intent(Intent.ACTION_SENDTO,uri);
intent.putExtra("sms_body", "This sms test content!");
FirstAVdActivity.this.startActivity(intent);
}
}
好了,时间有限,就写到这吧,可能有些仓促和没有说到的地方,希望能对你有所帮助,也希望大家多交流、提意见!
以上所讲代码示例下载 FirstAVd.rar