Android入门学习:项目的建立/基本GUI的编写

来源:互联网 发布:软件下载站模板 编辑:程序博客网 时间:2024/06/05 23:57

Android入门学习:项目的建立/基本GUI的编写

最近开始学习Android,这里记录下自己的学习历程,包括以下内容:

  • 开发环境的配置
  • 项目建立
  • 项目结构介绍
  • 基本GUI编写
  • 多个界面(活动)的编写

开发环境的配置

需要下载的东西:JDK,SDK,Android Studio。其中JDK\SDK需要配置环境变量。
Android Studio:http://www.android-studio.org/
个人下载的是无SDK的版本,推荐下载完整的包含SDK的版本,这样可以少下载很多额外的东西(如GOOGLE的各种API,AndRoid Emulator,一些安卓虚拟机等)
安装完毕后打开Android Studio开始建立项目。

项目建立

打开IDE的主界面后,左上角FILE-new-new project创建项目。
这里写图片描述
填写项目名/开发者公司名/项目地址
这里写图片描述
最低兼容至4.03安卓版本
这里写图片描述
选择建立活动,这里选择建立空活动,这样系统会自动帮我们生成活动、对应布局及设置其为主活动,方便了很多。

项目结构介绍

建立完后项目后,要调整项目的结构,调整前左上方的项目结构如下:
这里写图片描述

这个是IDE便于开发者审阅给出的试图,并非真正的项目结构,点击上方的条形框将视图模式切换为Project。如图:
这里写图片描述

Gradle是一个基于JVM的构建工具,是一款通用灵活的构建工具,支持maven, Ivy仓库,支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件,基于Groovy,build脚本使用Groovy编写。 —— [ 百度百科 ]

对于本人这类初学者来说,不太需要关注Gradle,只需要关注app中的内容。
build:放着项目的一些编译文件。
libs:存放项目需要(引入)的类库。
src:和普通的java项目一样,这里是主要存放开发内容的部分,包括:
两个test的文件夹:存放一些测试脚本。
main:主要的开发内容,包括:
java:存放活动文件,个人理解android的活动就是一个个窗口,有点像以前用swing写界面的时候的Jframe。
res:存放着各种资源,如图
这里写图片描述

layout:布局文件,是一个个xml,对应java文件夹中的一个个活动。Android Studio还提供了可视化界面方便制作界面。这里将界面和逻辑分离,便于编写减少出错,个人觉得很赞,比以前在eclipse用的老掉牙的window builder好用很多。

这里写图片描述

左下方Text进入文本模式编辑,Design进入界面设计模式,拖拽组件进行编辑,且可在右侧直接调整组件的属性。类似于VS。

这里写图片描述

各种minimap:这里保存了为了兼容各种分辨率的图片,避免调整分辨率时图片出现不好的效果。
value:保存着一些开发者自定义数据的xml。

基本GUI编写

这是我自己写的一个只有一个按钮的界面:

public class MainActivity extends AppCompatActivity {    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.mainmenu,menu);        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        switch(item.getItemId()){            case R.id.add_item:                Toast.makeText(MainActivity.this,"add",Toast.LENGTH_SHORT).show();                break;            case R.id.remove_item:                Toast.makeText(MainActivity.this,"remove",Toast.LENGTH_SHORT).show();                break;        }        return super.onOptionsItemSelected(item);    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Button bt1=(Button) findViewById(R.id.button);        bt1.setOnClickListener(new View.OnClickListener(){            @Override            public void onClick(View v) {                Toast.makeText(MainActivity.this,"hello",Toast.LENGTH_SHORT).show();            }        });    }}

首先注明:MainActivity 继承了 AppCompatActivity,这是为了向下兼容低版本的Android(如2.0)。
由于之前创建项目时选择的是建立empty activity,故ide帮我自动配好了活动的声明、注册、主活动的选择。如图,在AndroidManifest.xml中:

这里写图片描述

每个activity即对应各个活动,这里我添加了android:label=”Hello!”,设置了活动的标题栏。intent-filter里的两行代码将该活动设置为主活动,这样应用开始时加载的是这个活动。这里intent是Android程序中各组件交互的一种重要方式,之后在多个活动互动中还要用到它。

接下来先设计界面,打开res/layout文件夹中对应活动的xml。先进入text模式,IDE自动给出的代码有些复杂,先改成如下:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:weightSum="1"></LinearLayout>

这里调整了layout的样式,使用了LinearLayout。
之后进入design模式进行设计,这里我拖入一个按钮:

这里写图片描述

由于暂未学习按钮具体的布局方式,这里按钮只能调整大小,不能移动位置。右侧的属性,若将宽度/长度设置为match模式,则其大小和父类一样大;若设置为wrap模式,则大小恰好能容纳其中的内容。设计完后,
布局文件的代码如下:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:weightSum="1">    <Button        android:id="@+id/button"        android:layout_width="match_parent"        android:layout_height="61dp"        android:layout_weight="0.05"        android:text="Button" /></LinearLayout>

这里通过@+id/button声明一个新的按钮。在其他地方引用它的话就是@id/button

接下来给按钮设置监听器和事件,回到活动代码,在onCreate方法中添加:

  @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Button bt1=(Button) findViewById(R.id.button);        bt1.setOnClickListener(new View.OnClickListener(){            @Override            public void onClick(View v) {                Toast.makeText(MainActivity.this,"hello",Toast.LENGTH_SHORT).show();                           }        });    }

这里通过findViewById找到之前在res中声明的按钮(id为button),给他设置onclick的事件的监听器。这里,通过Toast的makeText方法显示一个消息框。参数分别代表在对应活动上显示/内容/显示时长。
效果如下:
这里写图片描述

添加菜单
在res文件中新建一个menu文件夹,在其中new一个menu Resource File。代码如下:

<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"><item    android:id="@+id/add_item"    android:title="Add"    />    <item        android:id="@+id/remove_item"        android:title="Remove"        /></menu>

这里两个item代表两个菜单的选项。id分别为add_item/remove_item。回到主活动的java文件,添加两个方法,这里可以CRTL+O来快速添加需要继承的方法。代码如下:

 @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.mainmenu,menu);        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        switch(item.getItemId()){            case R.id.add_item:                Toast.makeText(MainActivity.this,"add",Toast.LENGTH_SHORT).show();                break;            case R.id.remove_item:                Toast.makeText(MainActivity.this,"remove",Toast.LENGTH_SHORT).show();                break;        }        return super.onOptionsItemSelected(item);    }

这里通过getMenuInflater().inflate来增加menu,R代表资源(log中也会用到),menu即res/menu文件夹,mainmenu即刚才写的新的菜单xml文件。来看看效果:
这里写图片描述
至此一个极其简单的界面就写完了。

多个界面(活动)的编写

刚才只写了一个活动,若要有多个活动互动,则需要之前提到的intent帮忙。
首先自然要写一个新的activity。在java文件夹的对应包里new一个empty activity。

这里写图片描述

这里第一个框和第三个框要勾上,代表自动生成布局文件/向下兼容旧版android。第二个不勾,代表将其作为主活动。
创建完毕后按喜好设计新界面的布局文件。还有别忘了在manifest里添加活动的声明,这里android studio已经自动添加了,很方便。(layout文件夹里)之后就是关键的活动之间交互部分,即intent

intent包括两种,显式/隐式。显式即1对1的明显的调用,也是最简单的调用。(当然可以通过重复写多个语句实现一对多)修改之前主活动的按钮事件中的代码:

@Override            public void onClick(View v) {                Intent intent=new Intent(MainActivity.this,Main2Activity.class);                startActivity(intent);            }

这里很容易看出来主活动对第2活动的调用,然后通过startActivity开始新的活动。

但很多时候想以一句语句实现对多个活动的调用,这时候就需要用上隐式intent。在之前mainfest声明activity2的地方添加以下代码:

<activity android:name=".Main2Activity">            <intent-filter>            <action android:name="com.example.msi2017.helloworld.ACTION_START" />            <category android:name="android.intent.category.DEFAULT" />            </intent-filter></activity>

action这一行代表该活动可以响应这个行动,category 这一行代表响应这个活动能响应的action中含有的其他信息,便于在发起动作时,能精确定位需要相应的活动。故action只能有一个,而category 可以有多个。

回到之前的主活动,修改按钮事件的代码:

  @Override            public void onClick(View v) {                Intent intent=new Intent("com.example.msi2017.helloworld.ACTION_START");                startActivity(intent);            }

这里,startActivity中默认包含了android.intent.category.DEFAULT这个category 。至此,活动一便能通过点击按钮调用活动2了,活动2可以通过点击back按钮回到活动1,或者在活动2组件的事件里添加finish()方法。来看看效果:
这里写图片描述 活动1
这里写图片描述 活动2

原创粉丝点击