【S1】1.基本知识 & intent初步

2015-05-02

----曾经看过的现在忘记的也差不多了,于是才终于发现,只有认真做笔记才能更好的掌握。

如果不是因为迫于生计,没有人会去用java。——许多程序员

(吐槽结束)

站在应用层进行开发,且在没有时间,大作业deadline就要到了的情况下,熟悉API,有一个好的API查阅习惯是最需要的。而且熟悉API是学习语言最为根本,不会因语言过时而丢失的好处。

所用IDE为Android studio。

Android studio下载各版本API稍有难度,我现在电脑上仅有version21,该问题我必须尽快解决。

1. 项目目录结构

新建一个空项目,自己建一遍项目目录,个人感觉是一种不错的学习方法。

需要重视的有

  • manifests

    • 项目配置文件,四大组件(activity,service,broadcast,content provider)需要在这里注册,并给予适当权限,还能制定兼容版本和目标版本。
  • java 
    • 放置java代码的地方
  • res->layout
    • 放置布局的XML文件
  • res其他内容
    • 放置图片的drawable,若只有一张图片可选定drawable-hdpi
    • menu放置菜单配置XML文件
    • value 中string放置XML中的string文件,个人认为作用相当于宏定义,有利于文件修改

Android studio隐藏了不少无关内容,但我们需要知道,任何一个资源都赋给了一个唯一的资源ID放在一个文件中。生成的apk调试程序也在一个被项目表隐藏的文件夹中存放。第三方Jar包在Android studio中需要自行创建目录文件。

2. LogCat

相当于cout,system.out.println,print,printf等输出语句,用于调试。

Log.e()是Android程序开发专用的一种简单且最有用的调试手段。且勿利用system.out调试。

以Log.e()为例,其接受两个参数,第一个为tag,用于filter过滤,第二个是打印的信息,用于判断错误原因。

3. 基本流程

1.) 在java目录下新建一个(java).class文件,继承Activity,重写onCreate()方法。

重写时首先super调用父类方法用默认实现进行初始化。

2.) 在layout目录下新建(layout).xml文件,初期学习选择LinearLayout。布局的基本参数有

orientation,layout_width,layout_height,默认的scheme。

总体布局结束后添加其他组件,不建议利用图形的界面进行编辑,不利于理解,也不利于在java类文件中对布局进行操作。

值得注意的有两点

  尽量将xml布局文件中的字符串保存在res->string中去。有利于后期修改。

  注意将每一个控件添加名字,便于在java类文件中引用。

3.) 在AndroidManifest注册。在application下添加activity,利用intent-filter将其设置为主activity。activity的参数有name和label。name是java类文件名称,label是显示的app名称。安装包名称才是建项目时确定的名称。

4. 更进一步

可以延伸的部分

1. Toast提示

Toast.makeText(FirstActivity.this, "first", Toast.LENGTH_LONG).show();

其中的FirstActivity.this即为context,即toast发生的环境。

2. 隐藏标题栏

1 protected void onCreate(Bundle saveInstanceState) {
2     super.onCreate(saveInstanceState);
3     requestWindowFeature(Window.FEATURE_NO_TITLE);
4     setContentView(R.layout.first);
5 }

第三行即为隐藏标题栏代码。

3. 添加Menu

1.) res下新建menu文件夹,在menu下新建XML文件。对其进行配置。

1 <?xml version="1.0" encoding="utf-8"?>
2 <menu xmlns:android="http://schemas.android.com/apk/res/android">
3     <item
4         android:id="@+id/item1"
5         android:title="@string/menu1"/>
6     <item
7         android:id="@+id/item2"
8         android:title="@string/menu2"/>
9 </menu>

menu利用的是默认主题,有两个item,title和id分别定义显示名字和操作的名字。对应的每一个ID都会生成一个唯一的资源操作符。在java类文件中可以用findViewById()方法找到。并向下转型进行操作。

2.) 在需要加入菜单的activity的java类文件中重写onCreateOptionsMenu()方法

1 public boolean onCreateOptionsMenu(Menu menu) {
2     getMenuInflater().inflate(R.menu.main, menu);
3     return true;
4 }

通过getMenuInflater()方法能够得到MenuInflater对象。用inflate()方法可以给当前活动创建菜单。

inflate()方法接收两个参数,第一个参数用于指定我们通过哪一个资源文件来创建菜单。第二个参数用于指定我们的菜单项将添加到哪一个Menu对象当中。然后给这个方法返回true,表示允许创建的菜单显示出来,如果返回了false,创建的菜单将无法显示。

3.)  对选定菜单项进行操作,重写onOptionsItemSelected()方法。

 1     @Override
 2     public boolean onMenuItemSelected(int featureId, MenuItem item) {
 3         switch (item.getItemId()){
 4             case R.id.add_item:
 5
 6             case R.id.remove_item:
 7
 8             default:
 9
10         }
11         return true;
12     }

传入的item即为菜单项的view,利用switch将view的id与R.java中资源的ID进行对比来判断对谁进行操作。

4. 销毁活动

利用finish();即可销毁一个活动。

5. 建设多个activity

仅需写多个java类文件,每个类文件对应一个单独的layout文件,注意其中的变量名称,不能有重复。分别写完后在AndroidManifest.xml中进行配置,只需要

1         <activity android:name=".SecondActivity">
2         </activity>

即可完成一个非主activity的基本配置。

5. Intent实现的activity切换与通信。

Intent一般可被用于启动活动、启动服务、以及发送广播等场景。同时,其也可以进行一些数据的传递。

显式intent:

intent的构造函数有多个。先说一个与activity切换关系很大的:

Intent(Context packageContext, Class<?> cls);

第一个与前面toast的首个参数含义相同,指目前的环境。即当前的java.this。第二个是启动的类文件名。

1     button1.setOnClickListener(new View.OnClickListener() {
2         @Override
3         public void onClick(View v) {
4             Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
5             startActivity(intent);
6         }
7     });

用startActivity判断打开新的activity。
用起来十分简单。

隐式intent:

隐式的intent是利用匹配intent传入的信息与AndroidManifest内的信息来确定显示的activity的。

1         button1.setOnClickListener(new View.OnClickListener() {
2             @Override
3             public void onClick(View v) {
4                 Intent intent = new Intent("MY_OWN");
5                 startActivity(intent);
6             }
7         });

当一个activity的intent-filter内的action与category,和java文件中intent传入的信息相同时,activity就会打开。

上面的代码中传入的是“MYOWN”,对应的配置情况为

1         <activity android:name=".SecondActivity">
2             <intent-filter>
3                 <action android:name="MY_OWN"/>
4                 <category android:name="android.intent.category.DEFAULT"/>
5             </intent-filter>
6         </activity>

default对应的是默认情况。

也可以通过addCategory()方法来改变添加分类。例如:

1 Intent intent = new Intent("MY_OWN");
2 intent.addCategory("MY_CATEGORY");

此时若直接调试,会报错。因为没有任何一个完全符合要求的activity。除非更改配置的category信息:

1         <activity android:name=".SecondActivity">
2             <intent-filter>
3                 <action android:name="MY_OWN"/>
4                 <category android:name="MY_CATEGORY"/>
5             </intent-filter>
6         </activity

还有很多隐式的用法。

1 public void onClick(View v) {
2     Intent intent = new Intent(Intent.ACTION_VIEW);
3     intent.setData(Uri.parse("http://www.cnblogs.com/xtlu/"));
4     startActivity(intent);
5 }

其中Intent.ACTION_VIEW是一个常信息,匹配后利用setData中的内容请求其他应用的操作。

setData的用法就是另外的故事了。Data属性可以在接受该隐式intent的activity的intent内进行配置。常见的参数有scheme,host,port,path,mimeType。用IDE打出首字母即可查找并查阅文档。

类似的还有很多,上面的可以打开网页,利用Intent.ACTION_DIAL还可以打开拨打电话页面。不再赘述。

数据传递intent:

我只是随便起的名字。)

数据可以传递过去,也可以传递回来。

从当前activity传递数据,利用

1 intent.putExtra("data", data);

其中"data"是key,data才是数据。若data为string类型,则接受data的activity内可以这样写:

1 protected void onCreate(Bundle savedInstanceState) {
2     super.onCreate(savedInstanceState);
3     setContentView(R.layout.second_layout);
4     Intent intent = getIntent();
5     String data = intent.getStringExtra("data");
6 }

写在onCreate()方法内,直接调用。用getIntent()方法取出上次传入的intent,getStringExtra()用于取string类型的data。所需参数为key。

传回数据所用的start方法不同。利用startActivityForResult()启动新的activity。

1 public void onClick(View v) {
2     Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
3     startActivityForResult(intent, 1);
4 }

第二个参数为请求码,先不要着急它的意思。

在第二个activity中发送数据的过程:

1 button2.setOnClickListener(new OnClickListener() {
2     @Override
3     public void onClick(View v) {
4         Intent intent = new Intent();
5         intent.putExtra("data_return", "Hello FirstActivity");
6         setResult(RESULT_OK, intent);
7         finish();
8     }
9 });

创建空的intent仅用来发送数据。setResult第一个参数返回处理结果,第二个即为intent事件。

不要着急第一个返回的处理结果的意思。

请求码和处理结果都在接受信息的时候有用。

 1 @Override
 2 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 3     switch (requestCode) {
 4     case 1:
 5       if (resultCode == RESULT_OK) {
 6           String returnedData = data.getStringExtra("data_return");
 7        }
 8       break;
 9     default:
10     }
11 }

即对应的requestcode(请求码)和resultcode(处理结果)都有一一对应的在接受信息方的处理方式。

返回值得过程也可以放在onBackPressed()中,这样不需要手动finish(),按back键也可返回。

时间: 2025-01-06 21:35:16

【S1】1.基本知识 & intent初步的相关文章

从零开始学android&lt;Intent初步.四十.&gt;

Intent意图是android中非常重要的部分,他在Activity,service中有较为广泛的应用. 1 public void startActivity(Intent intent) 普通 启动一个Activity,并通过Intent传送数据 2 public void startActivityForResult(Intent intent, int requestCode) 普通 启动并接收另一个Activity程序回传数据,当requestCode大于0才可以触发onActivi

安卓开发 activity和intent初步学习

安卓开发 主要是以activity为基础 若要实现一个activity  必须要在AndroidManifest.xml这个文件进行注册 1 <activity 2 android:name=".FirstActivity" 3 android:label="This is the first activity which i code"> 4 <intent-filter> 5 <action android:name="a

知识树初步布局

如图所示 相应的代码: <!DOCTYPE html><html> <head>  <style type="text/css">a:link{   font:12px;   color:cornflowerblue;   text-decoration: none;  }  a:visited  {   color:#003366;   text-decoration: none;  }   a:hover{   color:#0033

java1234教程系列笔记 S1 Java SE 02 eclipse初步使用、注释、标识符

第二章 第一节,讲了简单使用eclipse 写控制台程序.没有讲包,直接用的默认的包名. 还是编写了两个控制台例子 1 public class HelloWorld { 2 public static void main(String args[]) { 3 System.out.println("java 版 Hello World!"); 4 } 5 } 同时留了两个作业. 2.1.1 控制台输出“我爱java” 2.1.2 打印如下字符 *    ***  *****    *

连接企业的人、事、物、知识--企业IM的第三类生存方式

企业IM现状:尴尬 传统的企业IM在完成聊天.群组.文件传输.音频会话等传统IM功能后,发现自己陷入了尴尬的境地,因为功能的“同质化”,这些功能微信.QQ也有啊,其他IM厂商也有.于是IM厂商开始思考并改变,主要是2类: 1. 把传统IM功能做精做细,并集成简易办公功能. 比如钉钉的“钉一下”,通过消息的回执反馈,对任务进行提醒,甚至连接了群聊,还有邮件集成.一键审批等. IMO的消息类型较丰富,包含文字.语音.图片.文件.地理位置.甚至对话内容可一键生成任务,日程. IMO的文本.语音.文件对

C# Xamarin移动开发基础进修篇

一.课程介绍 英文原文:C# is the best language for mobile app development. Anything you can do in Objective-C, Swift or Java, you can do in C#. 中文译意:C#是移动应用程序开发的最佳语言. 在Objective-C,Swift或Java中你可以做的任何事情,你都可以在C#中完成. 1).本次分享课程适合人群如下: 1. 热爱Xamarin跨平台移动开发. 2.进一步了解和学习

Android 四大组件 Service 服务

1.Service简介 按照使用范围分类: 类别 优点 缺点 区别 应用 本地服务 Local  Service 本地服务在一定程度上节约了资源,另外本地服务因为是在同一进程,因此不需要IPC,也不需要AIDL.相应bindService会方便很多. 主进程被Kill后,服务便会终止. 本地服务依附在主进程上,而不是独立的进程,用于应用程序内部 . 音乐播放服务 远程服务 Remote Service 对应进程名格式为所在包名加上指定的android:process字符串.由于是独立的进程,因此

Android 简介

要了解应用的工作原理,请从应用基础知识开始入手. 要立即开始编码,请仔细阅读构建您的第一个应用. Android 提供了一个内容丰富的应用框架,支持您在 Java 语言环境中为移动设备开发创新应用和游戏.在左侧导航窗格列出的文档中,提供了有关如何使用各种 Android API 开发应用的详细信息. 如果您是 Android 应用开发新手,则需了解以下有关 Android 应用框架的基本概念,这一点至关重要: 应用提供多个入口点 Android 应用都是将各种可单独调用的不同组件加以组合开发而成

软件工程项目实施的一点思考

已经学习软件工程科目有一段时间了,对软件项目也有了一定的了解. 我们项目组需要完成的是教学管理系统,分由四个人完成.每个人的开发能力.编码能力都有所不同.对项目的认识存在不同的差别. 最初始的开发阶段,我们不明确应该用什么方式来完成我们的项目,整个团队都是蒙的.不知道该干什么.应该从什么地方着手.老师看到我们的困境,帮助我们理清思路,帮助我们分析业务的逻辑.数据的流向.人员的分配.在老师的帮助下,我们大体了解了我们要完成的项目的流程,项目中的各种基本逻辑,数据库中各种表的创建……老师帮助我们解决