环境也搭建好了,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. [暑假的bzoj刷水记录]

    (这篇我就不信有网站来扣) 这个暑假打算刷刷题啥的 但是写博客好累啊  堆一起算了 隔一段更新一下.  7月27号之前刷的的就不写了 , 写的累 代码不贴了,可以找我要啊.. 2017.8.27upd ...

  2. C++ C# python 中常用数学计算函数对比

    1.求x 的n次幂. C++ #include<cmath> f=pow(x,n) C# f=Math.Pow(x,n) python import numpy as np f=np.po ...

  3. python dataframe数据条件筛选

    一般情况下我们从一堆数据中选择我们获取想要的数据会通过一下方式: (1)创建链表或数组: (2)用for 循环遍历所有数据,将想要的存入链表或数组. 但是python中我们不需要这么做,我们可以用Pa ...

  4. Java Servlet 笔记1

    1. 什么是Servlet. Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序 ...

  5. C语言程序第三次作业

    (一)改错题 计算f(x)的值:输入实数x,计算并输出下列分段函数f(x)的值,输出时保留1位小数. 输入输出样例1: Enterr x: 10.0 f(10.0) = 0.1 输入输出样例2: En ...

  6. ionic3-ng4学习见闻--(自定义ion-tab图标)

    学习混合开发语言,目的就是为了快速开发一个适用于多平台的app. app基本都会有footer,也就是tabbar,用来快速导航不同的页面. ionic也有这个组件,ion-tab. 常用方法如下: ...

  7. SSH搭建spring,使用依赖注入的方法

    配置文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.o ...

  8. 在vue生命周期中及时销毁全局作用的代码

    一.纯客户端中 对于全局的代码,比如定时器等,在 beforeDestroy或 destroyed 生命周期时将其销毁.如果在跳转路由时候,组件销毁了,全局的定时器却没有销毁,这会使得页面产生卡顿. ...

  9. NVIDIA Titan Xp Star Wars Collector's Edition显卡深度学习工作站 + Ubuntu17.10 + Tensorflow-gpu + Anaconda3 + Python 3.6 设置

    为了能让 Tensorflow GPU 版本跑起来,我折腾了1个多星期. 总体参照 https://zhuanlan.zhihu.com/p/32118549 ,安装成功,但还是有不足的地方, 在此记 ...

  10. Ajax相关——get请求和post请求的区别

    一.完整的URL由以下几部分组成: scheme:通信协议,常用的有:http/ftp. host:主机,服务器(计算机)域名或IP地址 port:端口,整数,可选,省略时使用默认端口,http的默认 ...