Android笔记之Android基本控件布局与Activity的生命周期

本文详细介绍了Android的基础知识,包括Android的历史、开发环境搭建、Activity的概念及生命周期,以及常见控件如文本框、按钮、多选按钮、单选按钮、ImageView的使用方法。重点讲解了各种控件布局,如LinearLayout、Relative Layout及其属性,还有时间日期选择器、进度条和评分条的使用。同时,文章阐述了Activity的启动流程、生命周期函数及其状态,以及Intent对象在Activity间的数据传递。
摘要由CSDN通过智能技术生成

前言

喜欢安卓里千奇百怪的app,酷炫的UI或者好玩的游戏。想知道那些软件是如何做的,为什么我在微博里发一条消息,就能一直存在网上,让别人看到?为什么我点击一个按钮就出现了一个效果,某个功能?为什么滑动屏幕,侧边栏就滑出来了?QQ里拖动消息的“红圆点”就让强迫症患者轻松了许多。那些强大的功能、酷炫的动画效果深深地吸引了我。于是,偏离了自己的专业,开始学习编程。好吧,这并不是在讲我的编程人生,但也却是初入CSDN写的第一篇文章。希望在这里记录自己的编程人生吧~O(∩_∩)O~

找了一些视频,感觉mars老师讲的不错,通俗易懂,条理清晰,非常适合入门。于是把视频中学习到的东西整理出来,方便以后复习。

这部分笔记主要记的是Android的基本控件布局以及Activity的生命周期。

内容

Android历史

Android的发展史可以参考百度百科

Android开发环境的搭建

我的Android开发环境是翻墙直接在安卓官网上下的。用的是Android Studio1.4版本;sdk文档是安卓6.0;Java是1.8版。这部分网上教程很多,也很简单。

Activity的概念

Activity是指app的某个界面,比如QQ的消息是一个Activity,跳转到联系人,又是一个Activity;在跳到空间动态又是一个Activity。如果后台有个东西下好了,弹出来一个窗口说东西下好了,那也是一个Activity。如果将网站比作安卓系统,那么一个Activity就好比一个网页。

文本框与按钮的使用

Activity启动流程


要启动一个activity,Android系统会先读取AndroidManifest.xml文件,找到默认的activity,生成activity的对象,调用activity中的onCreate()方法。onCreate方法读取activity_main.xml文件,然后在activity上显示内容。

Activity布局文件之间的关系


1、所有res文件夹中的.xml文件都会在gen文件夹的R.Java文件中生成ID;
2、R.layout.activity_main是布局文件的id。
3、SetContenView函数的作用是让当前的activity去显示在R.layout.activity_main布局文件中所定义的内容;
4、Activity显示的内容取决于activity_main.xml文件。

在Activity当中获取代表控件对象


activity_main.xml文件里的布局代码是写死的,怎样显示的就怎样显示,写好了就不能更改。那么和客户互动的、实时变化的属性是怎么弄的呢?答案是用Java写的。在对应的Activity类中,实例化对应的属性,然后对类的实例化进行修改。

View初步

View的基本概念

Activity布局中所用到的控件统统都是View,比如:文本、按钮、单选等等;
View类是所有控件的父类;

在Activity当中获取代表View的对象

设置View的属性

为View设置监听器

什么是监听器:监控着控件的状态变化。
设置监听器的一般步骤:
1、 获取代表控件的对象
2、 定义一个类,实现监听器接口
3、 生成监听器对象
4、 为控件绑定监听器对象

控件布局初步

控件布局的基本概念

什么是控件布局
所谓的控件布局方法,就是指控制控件在Activity当中的位置、大小、颜色以及其他控件样式属性的方法。
1、 使用布局文件完成控件布局(静态)
2、 在Java代码当中完成控件布局(动态)

控件布局的种类

布局方法分类一
a) Linear Layout:要么是全部横着放,要么竖着放
b) Relative Layout:通过控件的相对位置控制布局方式

布局方法分类二
a) ListView
b) GridView

布局的距离单位

1.距离单位px


2.距离单位dp


3.距离单位sp

什么是sp
a、Sp:scaled pixels
b、Sp单位通常是用于指定字体的大小
c、当用户修改手机显示字体时,sp会随之改变
在设置字体的大小size的时候用sp,可以跟随系统;而在设置字体的布局layout时用dp。
在默认系统字体大小的情况下,sp和dp一样大

控件的外边距和内边距

多选按钮checkbox

多选按钮(Checkbox)的基本概念

标签与CheckBox类

CheckBox是View的子类

OnClickListener与OnCheckChangeListener监听器

OnClickListener:监测控件是否被点击了
OnCheckChangeListener:监控控件选中状态

对于OnClickListener
实现功能:选中或取消按钮,则打印出对应的文字

public class MainActivity extends AppCompatActivity
{
   
    private CheckBox checkBox_lol;
    private CheckBox checkBox_dota;
    private CheckBox checkBox_cs;

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

        checkBox_lol = (CheckBox)findViewById(R.id.lol);
        checkBox_dota = (CheckBox)findViewById(R.id.dota);
        checkBox_cs = (CheckBox)findViewById(R.id.cs);

        CheckBoxListener checkBoxListener  = new CheckBoxListener();
        checkBox_lol.setOnClickListener(checkBoxListener);
        checkBox_dota.setOnClickListener(checkBoxListener);
        checkBox_cs.setOnClickListener(checkBoxListener);

    }
    class CheckBoxListener implements OnClickListener
    {
        @Override
        public void onClick(View v)//View是Checkbox的父类
        {
            CheckBox box = (CheckBox)v;
            if (box.isChecked())//isChecked()是否被选中,是返回true
            {
                System.out.println("我喜欢玩" + box.getText());
            }
            else
            {
                System.out.println("我不喜欢玩" + box.getText());
            }
        }
    }
}

对于OnCheckChangeListener
实现相同功能

public class MainActivity extends AppCompatActivity
{
   
    private CheckBox checkBox_lol;
    private CheckBox checkBox_dota;
    private CheckBox checkBox_cs;

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

        checkBox_lol = (CheckBox)findViewById(R.id.lol);
        checkBox_dota = (CheckBox)findViewById(R.id.dota);
        checkBox_cs = (CheckBox)findViewById(R.id.cs);

        CheckBoxListener checkBoxListener = new CheckBoxListener();
        checkBox_lol.setOnCheckedChangeListener(checkBoxListener);
        checkBox_dota.setOnCheckedChangeListener(checkBoxListener);
        checkBox_cs.setOnCheckedChangeListener(checkBoxListener);
    }
    class CheckBoxListener implements OnCheckedChangeListener
    {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
        {
            if (isChecked)
            {
                System.out.println("我喜欢玩" + buttonView.getText());
            }
            else
            {
                System.out.println("我不喜欢玩" + buttonView.getText());
            }
        }
    }
}

这一节需要掌握的几个内容有:
1、标签的使用
2、View是CheckBox、TextVIew等视图控件的父类;CompoundButton是复合控件(像CheckBox这样的有开关的控件)父类
3、OnClickListener和OnCheckedChangeListener的区别和用法
4、判断控件是否被选中的函数是isChecked()方法
5、获取一个控件的属性的一般方法是:获取到这个控件,然后getXXX()方法,具体参考关于该控件的文档

CheckBox练习

1、实现全选和全不选
2、强化全选功能,即在取消某个CheckBox时,全选的选项自动取消;勾选全部CheckBox时,全选的选项自动勾选。
3、强化后的全选和反选功能

暂时只实现了第一个功能,尝试了第二个功能,没成功。第三个功能应该需要遍历所有控件。有时间再想想吧。

//1、实现全选和全不选
public class MainActivity extends AppCompatActivity
{
   
    private CheckBox checkBox_lol;
    private CheckBox checkBox_dota;
    private CheckBox checkBox_cs;
    private CheckBox checkBox_all;

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

        checkBox_lol = (CheckBox)findViewById(R.id.lol);
        checkBox_dota = (CheckBox)findViewById(R.id.dota);
        checkBox_cs = (CheckBox)findViewById(R.id.cs);
        checkBox_all = (CheckBox)findViewById(R.id.all);

        CheckBoxListener checkBoxListener = new CheckBoxListener();
        CheckAllBoxListener checkAllBoxListener = new CheckAllBoxListener();
        checkBox_lol.setOnCheckedChangeListener(checkBoxListener);
        checkBox_dota.setOnCheckedChangeListener(checkBoxListener);
        checkBox_cs.setOnCheckedChangeListener(checkBoxListener);
        checkBox_all.setOnCheckedChangeListener(checkAllBoxListener);
    }
    public boolean IsCheckAll ()
    {
        if (checkBox_lol.isChecked() && checkBox_dota.isChecked() && checkBox_cs.isChecked())
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    class CheckBoxListener implements OnCheckedChangeListener
    {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
        {
            if (isChecked)
            {
                System.out.println("我喜欢玩" + buttonView.getText());
            }
            else
            {
                System.out.println("我不喜欢玩" + buttonView.getText());
            }
//            if (checkBox_lol.isChecked() && checkBox_dota.isChecked() && checkBox_cs.isChecked())
//            {
   
//                checkBox_all.setChecked(true);
//                System.out.println("true");
//            }
//            else if (checkBox_lol.isChecked() || checkBox_dota.isChecked() || checkBox_cs.isChecked())
//            {
   
//                checkBox_all.setChecked(false);
//            }
//            else
//            {
   
//                checkBox_all.setChecked(false);
//                System.out.println("false");
//            }

        }
    }
    class CheckAllBoxListener implements OnCheckedChangeListener
    {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
        {
            if (isChecked)
            {
                CheckAll(true);
                System.out.println("我都喜欢");
            }
            else
            {
                CheckAll(false);
                System.out.println("我都不喜欢");
            }

        }

        public void CheckAll(boolean bool)
        {
            checkBox_lol.setChecked(bool);
            checkBox_dota.setChecked(bool);
            checkBox_cs.setChecked(bool);
        }
    }
}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值