在上篇博文讲解了Android的Activity这个组件的启动流程后,接下来我们就来看看我们的Activity与我们的布局文件的关系吧

我们先来看看一个最简单的布局文件的内容:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:textSize="50sp"
android:background="#00DD00"
android:text="@string/hello_world" /> </RelativeLayout>

在这个布局文件里面,我们在里面定义了一个TextView控件,这个控件就是文本内容的显示,我们可以给其指定各种属性,例如高度、宽度、背景色等。在布局文件配置好以后,我们来看看Activity对象里面的onCreate()方法中的内容:

  @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

我们看到 setContentView(R.layout.activity_main);这里我们就是加载了我们指定的那个布局文件,当执行完这句话以后,布局文件里定义的所有的控件都会被加载进来,并且生成对应的View对象,说到View对象,我们要知道,我们定义的所有的控件,例如TextView、Button等等,这些都是View对象的子类。

我们知道,在布局文件被加载后,就会生成对应的控件对象,我们要如何在代码中得到该对象呢?可以通过 findViewById 这个方法,就可以根据ID找到我们需要的那个View对象了,例如我们要找到刚才的那个TextView对象:

    private TextView textView;

    @Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.textView);
textView.setBackgroundColor(Color.GREEN);
   }

通过上面的 textView = (TextView) findViewById(R.id.textView);代码就可以得到我们布局文件中的TextView对象,因为所有的控件对象都是View的子类,而findViewById方法返回的是View类型的对象,所以我们这里要对其进行向下类型转换。在得到TextView这个对象后,我们就可以在java代码里来设置其各个属性。记住:在布局文件中能配置的内容,在java代码中也能设置,反之亦然。

在了解了这些之后,我们再来学一个知识点: 监听器,相信做过java开发的都知道监听器的概念,所以这里也就不阐述了。我们这里要实现的是通过给一个Button控件注册监听器,来处理一些操作。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="50sp"
android:text="0" /> <Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="button" /> </LinearLayout>

这是我们的布局文件,里面定义了一个TextView和一个Button,我们要做的就是当点击一下Button时,让TextView的内容每次加1,当长按Button时,让TextView的内容每次加2

public class MainActivity extends Activity
{
private TextView textView;
private Button button;
private int count = 0; @Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.textView);
textView.setBackgroundColor(Color.GREEN); button = (Button) findViewById(R.id.button);
// 给button对象注册一个onClick监听器
button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
count++;
textView.setText(count + "");
}
});
// 给button注册一个onLongClick监听器
button.setOnLongClickListener(new OnLongClickListener()
{
/**
* 这个方法返回一个boolean值,如果返回true,则表示是一个长按的操作,会执行下面这个方法
* 如果返回false,则表示是一个点击操作,会首先执行完下面的方法,然后再执行点击的方法
*/
@Override
public boolean onLongClick(View arg0)
{
count += 2;
textView.setText(count+"");
return true;
}
});
} @Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }

这个就是我们的Activity的代码,我们首先要获得TextView和Button这个对象,通过findViewById就可以获得,然后给button注册两个监听器,一个是OnclickListener,另一个是OnLongClickListener,然后我们这里通过匿名内部类来得到实现了这两个接口的对象,实现了其抽象方法。这样我们就可以在方法里面实现我们需要的操作了。

Android 组件系列-----Activity初步的更多相关文章

  1. Android组件系列----Activity组件详解

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  2. Android 组件系列-----Activity的传值和回传值

    在这篇随笔里将讲解Activity的传值和回传值. 一.通过startActivity来进行Activity的传值 在Android中,如果我们要通过一个Activity来启动另一个Activity, ...

  3. Android 组件系列-----Activity生命周期

    本篇随笔将会深入学习Activity,包括如何定义多个Activity,并设置为默认的Activity.如何从一个Activity跳转到另一个Activity,还有就是详细分析Activity的生命周 ...

  4. Android 组件系列-----Activity保存状态

    本篇随笔将详细的讲解Activity保存状态的概念,也就是saving activity state. 一.Activity状态保持概念 保存Activity的状态是非常重要的,例如我们在玩一个游戏的 ...

  5. Android组件系列----Activity的生命周期

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  6. 【转】Android 组件系列-----Activity保存状态

    本篇随笔将详细的讲解Activity保存状态的概念,也就是saving activity state. 一.Activity状态保持概念 保存Activity的状态是非常重要的,例如我们在玩一个游戏的 ...

  7. Android组件系列----当前Activity跳转到另一个Activity的详细过程

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  8. Android组件系列----BroadcastReceiver广播接收器

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  9. 第01讲 Android开发系列---Activity

    一.  Android系统版本及详细信息 最新数据  https://developer.android.com/about/dashboards/ 二.  Android项目初探 1.    使用a ...

随机推荐

  1. la 4015

    题解: 烂大街的树形dp?? f[i][j]表示到i点,在i的子树中经过j个,且要返回i点的最小值 g[i][j]表示到i点,在i的子树中经过j个,且不用返回i点的最小值 然后转移做背包就可以了 (注 ...

  2. 利用dwebsocket在Django中使用Websocket

    一.Websockets介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信 ...

  3. gitbook editor教程

    用户首先需要安装 nodejs,以便能够使用 npm 来安装 gitbook.所以我们先安装node.js,安装过程很简单,都是不断按下「Next」按钮就可以了 写node -h可以看看是否安装成功 ...

  4. 043 HIVE中的HQL操作

    1.字段查询 select empno,ename from emp; 2.过滤where,limit,distinct select * from emp where sal >2500; s ...

  5. (转)CASE WHEN 用法

    Case具有两种格式.简单Case函数和Case搜索函数. 简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END   ...

  6. 条件随机场之CRF++源码详解-特征

    我在学习条件随机场的时候经常有这样的疑问,crf预测当前节点label如何利用其他节点的信息.crf的训练样本与其他的分类器有什么不同.crf的公式中特征函数是什么以及这些特征函数是如何表示的.在这一 ...

  7. spring的i o c简单回顾

    1.springIOC是一个创建对象的容器,他负责将我们需要的对象帮我们创建出来,创建时间是:当我们从上下文环境中读取此对象时就会帮我们创建,严格意义上来讲它是一种编程思想不是一种技术. 2.依赖注入 ...

  8. ajax那些事儿

    一.Ajax的定义浏览器与服务器之间,采用HTTP协议通信.用户在浏览器地址栏键入一个网址,或者通过网页表单向服务器提交内容,这时浏览器就会向服务器发出HTTP请求.Ajax全称Asynchronou ...

  9. Linux输入设备详解

    <什么是Linux输入设备> ➤简介      Linux输入设备总类繁杂,常见的包括有按键.键盘.触摸屏.鼠标.摇杆等等,他们本身就是字符设备,而linux内核将这些设备的共同性抽象出来 ...

  10. nowcoder提高组2题解

    T1 化一下试子就ok code #include<cstdio> #include<algorithm> inline long long read() { long lon ...