在上篇博文讲解了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,然后我们这里通过匿名内部类来得到实现了这两个接口的对象,实现了其抽象方法。这样我们就可以在方法里面实现我们需要的操作了。

转载于:https://blog.51cto.com/3237526/1606354

Android 组件系列-----Activity初步相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  7. Android组件系列----ContentProvider内容提供者 和 android:authorities

    authorities 是provider所在的包的名字+provider本身定义的名称 ---zgs [正文] 一.ContentProvider简介: ContentProvider内容提供者(四 ...

  8. Android组件系列——Content Provider

    Content Provider 跨进程共享数据的标准方式 与SharedPreferences存储中的全局可读可写操作模式不同的是,Content Provider可选择只对某一部分数据进行共享,从 ...

  9. 第一章 四大组件 之 Activity(一)

    文章目录 第一组件 Activity (一)Activity生命周期 1.生命周期五大状态 2.生命周期流程 3.常见场景的生命周期调用方式 4.具体场景生命周期调用方式 (1)横竖屏切换对Activ ...

最新文章

  1. php 发布时间设计,php – 发布和评论的数据库设计
  2. 抢票 | AI未来说学术论坛第十期 视频理解与推荐专场
  3. Java集合—HashMap底层原理
  4. 10 个理由让你继续干 IT
  5. insert into user mysql root_跳过授权表登录后使用insert into创建root权限用户
  6. es match 查询时间段_elasticsearch 笔记二 之基础查询
  7. android studio crashlytics,Crashlytics发现了一个无效的API密钥 – AndroidStudio构建
  8. pythonATM,购物车项目实战_补充3——core模块
  9. HBuilderX运行微信小程序启动失败
  10. CSAPP实验二——bomb lab实验
  11. 【Day7.1】张掖七彩丹霞看日出
  12. Mac上十个必备的效率软件
  13. 十个鲜为人知的 Linux 命令 - Part 3
  14. 大数据平台资源治理经验总结
  15. HTML 微信 获取微信ID,关于微信订阅号获取openid的问题_html/css_WEB-ITnose
  16. 铅酸蓄电池知识(待更新)
  17. php适应浏览器显示,浏览器变动时进行自适应代码分享
  18. MATLAB的RTL-SDR硬件支持包使用详细教程
  19. 易基因|m5C甲基化研究揭示mRNA m5C对维持果蝇生殖干细胞发育的分子机制
  20. C++必背基础知识点总结

热门文章

  1. python中扑克牌类设计_python中的图像界面设计(二)
  2. mysql分窗函数_频谱分析中如何选择合适的窗函数
  3. 使用分页方式读取超大文件的性能试验
  4. 寄存器是中央处理器内的组成部分
  5. Visual Studio下的PHP开发工具VS.PHP初探
  6. SQL Server 2005 Service Broker 初探 [摘抄]
  7. MySQL in 查询,并通过 FIELD 函数按照查询条件顺序返回结果
  8. Linux(debian7)操作基础(十二)之文件加密使用指南
  9. 【Linux】shell命令学习之find
  10. 【Linux】线程同步之信号量同步