环境也搭建好了,android系统也基本了解了,那么接下来就可以开始学习android开发了,相信这么学下去肯定可以把android开发学习好的,再加上时而再温故下linux下的知识,看看android源码,终有一天可以让自己提高到另外一个高度。

好了,言归正传,真正地开始android开发学习之路了。

相信很多人都知道android四大组件,它们分别是活动(Activity),服务(Service),广播接收器(Broadcast Receiver)和内容提供器(Content Provider)。这里就先学习下第一个组件Activity。

一个Activity就类似一个页面,像打开例如拨号、拍照、微信、看地图等。每一个Activity被给予一个窗口,在上面可以绘制用户接口。窗口通常充满屏幕,但也可以小于屏幕而浮于其它窗口之上。

一个应用程序包含了很多Activities,通常一个应用有一个Main Activity用来启动的时候呈现给用户的第一个界面,每一个Activity可以启动另一个Activity,为了完成不同的功能。每一次一个Activity启动后,前一饿Activity就停止了,但是系统保留Activity在一个栈上。当一个新的Activity启动时,它会被推送到栈顶,取得用户焦点,当用户完成当前Activity然后点击了back按钮,或者toolbar的回退按钮的时候,它就被弹出栈,然后之前的Activity就恢复了。所以我们可以通过Activity的生命周期来实现一些需要的功能,创建,暂停,停止,销毁等,这个在后面再研究。

就像日历app一样如下图就是两个Activity,第一个是进入到的主界面的Activity,第二个设置的Activity了,当在第二个Activity的时候按back按钮,那么就会销毁第二个Activity,从而恢复到第一个Activity了。

 
     

讲了这么多原理,其实看得肯定听不知所措的,不管这些了,下面还是在Android Studio下创建一个工程,然后实现简单的Activity功能了,关于Activity还有很多需要学习研究的,后面再慢慢学习好了。

打开Android Studio软件,然后新建工程,Application name就命名为ActivityStudy,点击next

然后选择sdk,这里我的测试真机是android4.0.3的所以选择了API15,接着点击next

接着就是选择Activity模板了,这个和ios的也有点像,估摸着是学习ios的吧,这里选择一个空的Empty Activity,点击next。

接着就是设置Activity的名字以及layout的xml了。这里命名为FirstActivity,layout命名为activity_first。点击Finish就完成了Activity 的创建了。

然后进入工程如下图:

好了,工程创建完成了,主要和Activity相关的就是FirstActivity.java,AndroidManifest.xml和activity_first.xml了,这些都在篇博文Android开发学习之路--Android
Studio项目目录结构简介
做过简单的介绍,这里再描述下,当作温故而知新了。

首先FirstActivity.java,这里继承了AppCompatActivity,需要重写onCreate方法,主要这里只是个Empty Activity,所以也没有什么代码,setContentView函数呢,主要是实现mvc的v。m就是模块,很多代码可以抽象为模块;v就是视图,也就是那个layout的xml,这里就是activity_first.xml了,c是控制,这里也类似于FirstActivity.java了,用来控制显示。

package com.example.jared.activitystudy;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle; public class FirstActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
}
}

接着是activity_first.xml,这里就不多做说明了,我们来添加一个button,button是view的一个widget。切换到Desin模式选择Buton,拖到手机的界面当中去,然后切换回Text模式。

看到了xml文件中自动添加了一些代码,然后修改代码如下:

其中android:id就是唯一标识符,这个在代码中需要用到,match_parent主要是填充父view,wrap_content是包含内容。

最后就是注册AndroidManifest.xml了,这里基本是都是自动生成的,其中有@mipmap/ic_launcher表示的是app的图标。@string/app_name就是app显示的名字,@style/AppTheme是app的主题。这里用的@*符号主要的内容都在res下面。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.jared.activitystudy" > <application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity android:name=".FirstActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application> </manifest>

其中res下面的mipmap

res下面的strings.xml:

<resources>
<string name="app_name">ActivityStudy</string>
</resources>

res下面的styles.xml

<resources>

    <!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style> </resources>

好了,基本的都已经介绍完了,那么接下去就运行下看看效果了。点击运行按钮,弹出了对话框,主要这里我开启了一个模拟器,又连接着真机,这里选择模拟器好截图说明,真机的效果其实也一样的。

运行效果如下图,有没有觉得很奇怪,为什么明明在button的android:text中既有大写又有小些,为什么这里都变成了大写了呢?

 
       

解决上述办法如下,在最后加上一行textAllCaps="false",运行如上图所示。

<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="FirstActivity Button 1"
android:id="@+id/button1"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:textAllCaps="false"/>

至此,新建一个Activity,以及添加一个button等功能,相信都会操作了。

很多app都不再显示标题栏的,这里怎么隐藏掉app的标题栏呢?网上有传统的方法就是在在setContentView上面加上如下代码:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_first);
}

但是这里继承的不是Activity,而是继承了AppCompatActivity,其中AppCompatActivity又继承了Toolbar,所以上述代码编译是没有问题的,一旦运行就会出现异常的,那么正确的做法是什么呢?修改代码如下:

package com.example.jared.activitystudy;

import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle; public class FirstActivity extends AppCompatActivity { @Overrid
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//requestWindowFeature(Window.FEATURE_NO_TITLE);
ActionBar actionBar = getSupportActionBar();
actionBar.hide();
setContentView(R.layout.activity_first);
}
}

再次运行,就有如下的显示了,标题栏北隐藏掉了。

好了,Activity先就学习到这里了。接下去再学习别的内容了。

Android开发学习之路--Activity之初体验的更多相关文章

  1. Android开发学习之路--Service之初体验

    android最后一个组件便是service了,终于学习到最后一个组件了,从年前的开发环境的搭建,到现在学到最后一个组件花了三周的时间,期间记录的点点滴滴,照着书本学习编写的代码都受益匪浅,这里要感谢 ...

  2. Android开发学习之路--React-Native之初体验

      近段时间业余在学node.js,租了个阿里云准备搭建后端,想用node.js,偶尔得知react-native可以在不同平台跑,js在iOS和android上都可以运行ok,今天就简单学习下rea ...

  3. Android开发学习之路--传感器之初体验

    说到传感器,还是有很多的,有加速度啊,光照啊,磁传感器等等.当然android手机之所以称为智能手机,少不了这几款传感器的功劳了.下面就学习下了,这里主要学习光照,加速度和磁. 新建工程emSenso ...

  4. Android开发学习之路--UI之初体验

    之前都是学习Activity,对于布局都没有做过学习,这里就简单学习下吧.下面看下Android Studio下有哪些控件: 这里分为Widgets,Text Fields,Containers,Da ...

  5. Android开发学习之路--RxAndroid之初体验

    学了一段时间android,看了部分的项目代码,然后想想老是学基础也够枯燥乏味的,那么就来学习学习新东西吧,相信很多学java的都听说过RxJava,那么android下也有RxAndroid. Rx ...

  6. Android开发学习之路--Camera之初体验

    顾名思义Camera就是拍照和录像的功能,像微信里面,我们想拍照传一下照片,就可以通过camera来拍照,然后存储照片,发送给好友.那么微信的app里面是不会直接通过camera api来实现的,因为 ...

  7. Android开发学习之路--Notification之初体验

    一般当我们收到短信啊,微信啊,或者有些app的提醒,我们都会在通知栏收到一天简单的消息,然后点击消息进入到app里面,其实android中有专门的Notification的类可以完成这个工作,这里就实 ...

  8. Android开发学习之路--Activity之四种启动模式

    后天终于可以回家了,马上就要过年了,趁着年底打酱油的模式,就多学习学习,然后记录记录吧.关于Activity已经学习了七七八八了,还有就是Activity的四种启动模式了,它们分别为,standard ...

  9. Android开发学习之路--Activity之Intent

    窗外再次飘起了小雪,还有1周就过年了,2016年即将到来,来年不知道自己将身处何处,船到桥头自然直吧.还是继续学习吧,上次学习了Activity,那么如果是两个Activity之间,怎么从一个Acti ...

随机推荐

  1. [bzoj4864][BeiJing 2017 Wc]神秘物质

    来自FallDream的博客,未经允许,请勿转载,谢谢. 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微观粒子.这 一天, 小诚刚从研 ...

  2. python txt文件的写入和读取

    1.文件的打开 使用open () 函数 打开文件.他有两个参数,文件路径或文件名和文件的打开方式. "r" 只读模式,不能编辑和删除文件内容. "w" 写入模 ...

  3. C语言程序设计 第一次作业

    (一)实验总结 1.求圆面积和周长 (1)题目 输入圆的半径,计算圆的周长和面积. (2)流程图 (3)测试数据及运行结果 (4)实验分析问题一:输出时往输出框输不上.原因 :没有加双引号.2.判断闰 ...

  4. vue学习中v-if和v-show一起使用的问题

    v-if和v-show一起使用 在开发项目过程中v-if和v-show一起使用时,接下面跟着的v-else会在页面上面显示两次 .代码如下: <tbody class="sortabl ...

  5. IBM-x3650做RAID5更换硬盘后rebuild步骤分享

    1.按Ctrl+H进入WebBIOS配置 2.点击start 3.点击Drives,对slot5进行配置 4.选择slot5,选择Properties,点击Go按钮 5.选择MakeUnconfGoo ...

  6. VLAN之间单臂路由通信

    实验目的 理解单臂路由的应用场景 掌握路由器子接口的配置方法 掌握子接口封装VLAN的配置方法 理解单臂路由的工作原理 实验原理 单臂路由解决用户需要跨越VLAN实现通信的情况. 原理:通过一台路由器 ...

  7. cannot open file "cxcore.lib"

    运行例子程序的时候总是出现连接错误:LINK : fatal error LNK1104: cannot open file "cxcore.lib". 在VC选项里把C:\Pro ...

  8. vue+node.js+webpack开发微信公众号功能填坑——v -for循环

    页面整体框架实现,实现小功能,循环出数据,整体代码是上一篇 vue+node.js+webpack开发微信公众号功能填坑--组件按需引入 修改部门代码 app.vue <yd-flexbox&g ...

  9. linux shell数组

    from: http://www.jb51.net/article/34322.htm bash shell只支持一维数组,但参数个数没有限制. 声明一个数组:declare -a array(其实不 ...

  10. 转:window与linux互相拷贝文件

    window与linux互相拷贝文件   借助 PSCP 命令可以实现文件的互拷:     1.下载pscp.exe 文件 (我的资源文件中有)   2.如果想在所有目录可以执行,请更改环境变量. w ...