一、 编写第一个Android应用程序

一. 熟悉XML文件,并做简单修改

开发环境是Android studio. activity_main.xml文件是是描述和布局相关

1.熟悉 activity_main.xml文件
  • layout 布局
  • Activity每个可视化窗口
  • TextView 首字母大写,表明这个控件是个类对象,是View的子类,继承View
    在这里插入图片描述
    “wrap_content” 表示取决于内容
    “fill_parent” 表示填充整个窗口
  • 可以切换代码模式和图形模式
    在这里插入图片描述
2. 修改xml文件,实现按钮和复选框
<?xml version="1.0" encoding="utf-8"?>
<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: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="com.example.myapplication.MainActivity"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="你好"
        android:id="@+id/textView" />

    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="ALL ON"/>

    <CheckBox
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="LED1"/>
    <CheckBox
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="LED2"/>
    <CheckBox
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="LED3"/>
    <CheckBox
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="LED4"/>
</LinearLayout>

layout中有的这几个控件,相对位置应该由layout的属性决定
LinearLayout 表示线性
android:orientation=“vertical” 添加垂直排列属性

  • 效果如下
    在这里插入图片描述

二、增加逻辑,修改MainActivity.java文件

2.1 实现逻辑:

  • 如果按下ALLON 那么按钮变为ALLOFF
    同时勾选4个LED
  • 如果按下ALLOFF 那么按钮变为ALLON
    取消勾选LED
  • 单独勾选LED

2.2 修改MainAcitvity.java文件

2.2.1 Button的用法
  • Button的用法
    要想操作Button,查看button的用法,选中button shift+F1跳转到页面
    file:///C:/androidSDK/sdk1/docs/reference/android/widget/Button.html
    在这里插入图片描述
    首先实例化Button对象,然后设置按钮监听函数
    需要用到按钮的id,在XML文件中添加按钮id
    在这里插入图片描述
2.2.2 分析默认生成的 MainActivity.java文件
  • MainActivity.java
	package com.example.myapplication;
	
	import android.support.v7.app.AppCompatActivity;
	import android.os.Bundle;
	
	public class MainActivity extends AppCompatActivity {
	
	    @Override
	    protected void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        setContentView(R.layout.activity_main);
	    }
	}
  • MainActivity.java 这是主程序的入口文件
  • package 将程序打包,封装成类
  • import android.os.Bundle;每个extends 了Activity的类中 oncreat方法都需要传递一个bundle 参数
  • OnCreate 是Andorid中的一个特别的函数,来“表示一个窗口正在生成” 对应import android.os.Bundle
  • super.onCreate(savedInstanceState) 就是调用父类的onCreate构造函数,savedInstanceState是保存当前Activity的状态信息。
  • setContentView(R.layout.activity_main) activity_main就是当前项目res下的layout里的activity_main.xml文件
2.2.3 修改 MainActivity.java 实现按钮状态切换
  • MainActivity.java
	package com.example.myapplication;
	
	import android.support.v7.app.AppCompatActivity;
	import android.os.Bundle;
	import android.widget.Button;
	import android.view.View;
	
	public class MainActivity extends AppCompatActivity {
	
	    boolean ledon = false;
	    private Button button = null;
	    @Override
	    protected void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        setContentView(R.layout.activity_main);
	
	        button = (Button) findViewById(R.id.BUTTON);
	        button.setOnClickListener(new View.OnClickListener() {
	            public void onClick(View v) {
	                // Perform action on click
	                ledon =!ledon;
	                if(ledon)
	                    button.setText("ALL OFF");
	                else
	                    button.setText("ALL ON");
	            }
	        });
	    }
	}
  • 下边的View.OnClickListener 是个接口,在android.view.View这个包中,所以引入
    在这里插入图片描述
  • 定义boolean类型变量 ledon 表示led的状态
  • 定义私有变量 private Button button = null; 实例化Button
  • button = (Button) findViewById(R.id.BUTTON); button这个按钮变量指向BUTTON按钮,android 的用户界面一般使用xml文件做的,对应的xml文件在layout包下如果xml里放了个按钮什么的,在activity中要获取该按钮就用findViewById(R.id.xml文件中对应的id)
    在这里插入图片描述
    编译是为了让AS根据xml文件生成一些java源代码,编译完之后,在程序文件中选择BUTTON 按CTRL+B就可以跳转到XML文件
    Alt+F7 可以找到BUTTON对应的整数
    在这里插入图片描述
  • setOnClickListener 设置监听器,按下按钮的时候这个函数就会被调用,new View.OnClickListener() 表示匿名类
  • 通过ledon变量改变按钮上的文字
  • 这种方法称为匿名类
2.2.4 用另外个方法实现
  • MainActivity.java
	package com.example.myapplication;
	
	import android.support.v7.app.AppCompatActivity;
	import android.os.Bundle;
	import android.widget.Button;
	import android.view.View;
	
	public class MainActivity extends AppCompatActivity {
	
	    boolean ledon = false;
	    private Button button = null;
	
	    class MyButtonListener implements View.OnClickListener{
	        @Override
	        public void onClick(View v) {
	            ledon =!ledon;
	            if(ledon)
	                button.setText("ALL OFF");
	            else
	                button.setText("ALL ON");
	        }
	    }
	    @Override
	    protected void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        setContentView(R.layout.activity_main);
	        
	        button = (Button) findViewById(R.id.BUTTON);
	        button.setOnClickListener(new MyButtonListener());
	/*
	
	        button.setOnClickListener(new View.OnClickListener() {
	            public void onClick(View v) {
	                // Perform action on click
	                ledon =!ledon;
	                if(ledon)
	                    button.setText("ALL OFF");
	                else
	                    button.setText("ALL ON");
	            }
	        });*/
	    }
	}

  • View.OnClickListener()是一个接口,我们可以定义一个类实现这个接口,MyButtonListener定义这个类,按Ctrl+i就可以自动补全onClick代码
  • 设置buuton监听器 ,创建MyButtonListener自定义类对象,将这个内部类的对象传入按钮的setOnClickListener方法中
2.2.5 增加控制复选框
  • MainActivity.java
	package com.example.myapplication;
	
	import android.support.v7.app.AppCompatActivity;
	import android.os.Bundle;
	import android.widget.Button;
	import android.view.View;
	import android.widget.CheckBox;
	
	public class MainActivity extends AppCompatActivity {
	
	    boolean ledon = false;
	    private Button button = null;
	    private CheckBox checkBoxled1 = null;
	    private CheckBox checkBoxled2 = null;
	    private CheckBox checkBoxled3 = null;
	    private CheckBox checkBoxled4 = null;
	
	
	    class MyButtonListener implements View.OnClickListener{
	        @Override
	        public void onClick(View v) {
	            ledon =!ledon;
	            if(ledon) {
	                button.setText("ALL OFF");
	                checkBoxled1.setChecked(true);
	                checkBoxled2.setChecked(true);
	                checkBoxled3.setChecked(true);
	                checkBoxled4.setChecked(true);
	            }
	            else {
	                button.setText("ALL ON");
	                checkBoxled1.setChecked(false);
	                checkBoxled2.setChecked(false);
	                checkBoxled3.setChecked(false);
	                checkBoxled4.setChecked(false);
	            }
	        }
	    }
	    @Override
	    protected void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        setContentView(R.layout.activity_main);
	
	        button = (Button) findViewById(R.id.BUTTON);
	
	        checkBoxled1 = (CheckBox) findViewById(R.id.LED1);
	        checkBoxled2 = (CheckBox) findViewById(R.id.LED2);
	        checkBoxled3 = (CheckBox) findViewById(R.id.LED3);
	        checkBoxled4 = (CheckBox) findViewById(R.id.LED4);
	
	        button.setOnClickListener(new MyButtonListener());
	/*
	
	        button.setOnClickListener(new View.OnClickListener() {
	            public void onClick(View v) {
	                // Perform action on click
	                ledon =!ledon;
	                if(ledon)
	                    button.setText("ALL OFF");
	                else
	                    button.setText("ALL ON");
	            }
	        });*/
	    }
	}

  • 要想控制复选框,首先实例化复选框的对象,先定义,然后调用findId实例化对象
  • Ctrl+shift+空格 自动补全强制转换类型
  • 要控制复选框需要对应的id,修改xml文件,增加复选框id
    在这里插入图片描述
2.2.6 单独操作复选框调用对应的方法

我们想通过选中复选框,操作对应的led亮灭,也就是对应控制led的方法,怎么通过操作复选框,调用对应的方法呢?

  • CheckBox用法
    选择CheckBox 按shift+F1 跳转到网页,根据说明,设置android:onClick 属性就可以调用对应的方法
    file:///C:/androidSDK/sdk1/docs/guide/topics/ui/controls/checkbox.html
    在这里插入图片描述
  • 修改xml文件,增加android:onClick 属性,就表示选择复选框onCheckboxClicked这个方法就会被调用
    在这里插入图片描述
  • MainActivity.java
	package com.example.myapplication;
	
	import android.support.v7.app.AppCompatActivity;
	import android.os.Bundle;
	import android.widget.Button;
	import android.view.View;
	import android.widget.CheckBox;
	import android.widget.Toast;
	
	public class MainActivity extends AppCompatActivity {
	
	    boolean ledon = false;
	    private Button button = null;
	    private CheckBox checkBoxled1 = null;
	    private CheckBox checkBoxled2 = null;
	    private CheckBox checkBoxled3 = null;
	    private CheckBox checkBoxled4 = null;
	
	
	    class MyButtonListener implements View.OnClickListener{
	        @Override
	        public void onClick(View v) {
	            ledon =!ledon;
	            if(ledon) {
	                button.setText("ALL OFF");
	                checkBoxled1.setChecked(true);
	                checkBoxled2.setChecked(true);
	                checkBoxled3.setChecked(true);
	                checkBoxled4.setChecked(true);
	            }
	            else {
	                button.setText("ALL ON");
	                checkBoxled1.setChecked(false);
	                checkBoxled2.setChecked(false);
	                checkBoxled3.setChecked(false);
	                checkBoxled4.setChecked(false);
	            }
	        }
	    }
	
	    public void onCheckboxClicked(View view) {
	        // Is the view now checked?
	        boolean checked = ((CheckBox) view).isChecked();
	
	        // Check which checkbox was clicked
	        switch(view.getId()) {
	            case R.id.LED1:
	                if (checked) {
	                    Toast.makeText(getApplicationContext(), "LED1 on", Toast.LENGTH_SHORT).show();// 显示时间较短
	                }
	                else{
	                    Toast.makeText(getApplicationContext(), "LED1 off", Toast.LENGTH_SHORT).show();// 显示时间较短
	                }
	                break;
	            case R.id.LED2:
	                if (checked) {
	                    Toast.makeText(getApplicationContext(), "LED2 on", Toast.LENGTH_SHORT).show();// 显示时间较短
	                }
	                else{
	                    Toast.makeText(getApplicationContext(), "LED2 off", Toast.LENGTH_SHORT).show();// 显示时间较短
	                }
	                break;
	            case R.id.LED3:
	                if (checked) {
	                    Toast.makeText(getApplicationContext(), "LED3 on", Toast.LENGTH_SHORT).show();// 显示时间较短
	                }
	                else{
	                    Toast.makeText(getApplicationContext(), "LED3 off", Toast.LENGTH_SHORT).show();// 显示时间较短
	                }
	                break;
	            case R.id.LED4:
	                if (checked) {
	                    Toast.makeText(getApplicationContext(), "LED4 on", Toast.LENGTH_SHORT).show();// 显示时间较短
	                }
	                else{
	                    Toast.makeText(getApplicationContext(), "LED4 off", Toast.LENGTH_SHORT).show();// 显示时间较短
	                }
	                break;
	            // TODO: Veggie sandwich
	        }
	    }
	    @Override
	    protected void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        setContentView(R.layout.activity_main);
	
	        button = (Button) findViewById(R.id.BUTTON);
	
	        checkBoxled1 = (CheckBox) findViewById(R.id.LED1);
	        checkBoxled2 = (CheckBox) findViewById(R.id.LED2);
	        checkBoxled3 = (CheckBox) findViewById(R.id.LED3);
	        checkBoxled4 = (CheckBox) findViewById(R.id.LED4);
	
	        button.setOnClickListener(new MyButtonListener());
	/*
	
	        button.setOnClickListener(new View.OnClickListener() {
	            public void onClick(View v) {
	                // Perform action on click
	                ledon =!ledon;
	                if(ledon)
	                    button.setText("ALL OFF");
	                else
	                    button.setText("ALL ON");
	            }
	        });*/
	    }
	}
  • 四个复选框对应一个方法,所以view.getId() 表示哪一个复选框被选中了
  • toast是Android系统中一种简易的消息框类型
    Toast.makeText(getApplicationContext(), “默认样式的Toast”, Toast.LENGTH_SHORT).show();// 显示时间较短

复习java内部类

interface A {
     public void printInfo( );
}

class B implements A {
    public void printInfo( ) {
           System.out.println("Hello, world!");
    }
}

public class Anony {
   public static void testFunc(A a) {
       a.printInfo( );
   }
    public static void main(String args[]) {
         testFunc(new B());
         testFunc(new A() {
           public void printInfo() {
             System.out.println("Hello, world!");
           }
         });
    }
}

经过以上操作,我们既可以实现这样的逻辑了

  • 如果按下ALLON 那么按钮变为ALLOFF
    同时勾选4个LED
  • 如果按下ALLOFF 那么按钮变为ALLON
    取消勾选LED
  • 单独勾选LED
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AIOT技术栈

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值