前言
喜欢安卓里千奇百怪的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);
}
}
}