安卓复习大纲

复习大纲

问答题

  1. 常用组件Button、ImageButton、ImageView、TextView和EditText的属性有哪些?并说明其作用是什么?(例如:EditText组件中,有hint属性,起到提示的作用。)

    *号代表所有控件

    组件属性作用
    *android:layout_width设置控件的宽度
    *android:layout_height设置控件的高度
    *android:id设置控件的ID
    *android:background设置控件的背景
    Button、TextView、EditTextandroid:text设置控件的文本
    Button、TextView、EditTextandroid:textSize设置控件文本字体大小
    Button、TextView、EditTextandroid:textColor设置控件的文本颜色
    ImageButton、ImageViewandroid:src设置控件显示的图片资源
    EditTextandroid:inputType设置编辑框的可输入内容
    EditTextandroid:hint提示作用
  2. Android软件框架结构自上而下可分为哪些层?每一层的主要功能是什么?(例如:钉钉或打开网页属于哪一层?)

    1. 应用程序层(Application):应用层为系统对用户所提供的应用程序。
    2. 应用程序框架层(Application Framework):这一层是核心应用程序所使用的API框架,为应用层提供各种接口API,包括各种组件和服务来支持我们的安卓开发。
    3. 各种库(Libraries)和Android运行环境(RunTime):提供应用程序框架层所需要的系统级实现。
    4. 操作系统层(OS):提供操作系统的本质功能:文件管理、内存管理、进程管理、网络协议栈等。
  3. Android应用程序的四大组件是什么?主要功能是什么?

    • Activity:为用户提供可视化界面及操作
    • Intent:是程序中各个组件进行数据传递和动作执行的一种方式
    • Content Provider:是所有应用程序之间数据共享的一个桥梁
    • Service:Service是一个长期运行在后台且没有用户界面的组件。
  4. 如何区分Android Studio中的ProjectModule

    在使用Android Studio(以下简称AS)新建项目时都会有这样一个概念:
    Eclipse中的WorkSpace相当于AS中的Project
    Eclipse中的Project相当于AS中的Module(只就新建而言)。

    所以Eclipse中在一个WorkSpace中建立多个Project等同于在AS的Project中建立多个Module。

  5. Android项目中各个文件夹和文件的含义和用途是什么?

    项目结构及其作用如图所示:

    application   --->项目的根目录,存放项目的所有代码和配置文件
    └── src   --->项目的所有文件目录,存放项目的代码和资源文件
        └── main   --->项目的所有文件目录,存放项目的代码和资源文件
            ├── AndroidManifest.xml   --->项目的清单文件,用于配置各个组件或者是一些访问权限等
            ├── java   --->java类存放目录
            │   └── cn   --->Java包目录
            └── res   --->可以存放项目中所有的资源文件,例如:布局、图片(*.png、*.jpg)、文本等
                ├── drawable   --->存放项目中的图片资源文件
                ├── layout   --->存放项目中的布局资源文件
                └── values   --->存放一些资源文件的信息,用于读取文本资源
    
    9 directories, 6 files
    
    文件(夹)作用
    \src项目的所有文件目录,存放项目的代码和资源文件
    \src\main项目的所有文件目录,存放项目的代码和资源文件
    \src\main\AndroidManifest.xml项目的清单文件,用于配置各个组件或者是一些访问权限等
    \src\main\javajava类存放目录
    \src\main\res可以存放项目中所有的资源文件,例如:布局、图片(.png、.jpg)、文本等
    \src\main\res\drawable存放项目中的图片资源文件
    \src\main\res\layout存放项目中的布局资源文件
    \src\main\res\values存放一些资源文件的信息,用于读取文本资源
  6. Android布局有哪些?结合教学PPT,分别对相对布局、线性布局和帧布局做练习。

    • LinearLayout(线性布局)
    • TableLayout(表格布局)
    • RelativeLayout(相对布局)
    • FrameLayout(帧布局)
    • AbsoluteLayout(绝对布局)
  7. Intent有哪些重要属性,Activity之间是如何进行信息的传递的?

    属性: Component(组件)、Action(动作)、Data(数据)、Category(分类)、Type(类型)、Extra(扩展信息)。
    在Android中是通过intent中的属性进行信息的传递的.

  8. 简述Activity的四种状态以及不同状态使用的方法。

    1. Running(活动)状态:一个新的Activity启动入栈后,显示在屏幕最前端,它是可见的、有焦点的,并且可与用户进行互,此时的Activity即处于Running状态。
    2. Paused(暂停)状态:Activity可见但不拥有焦点(当然也不可与用户交互),此时的Activity即处于Paused状态。
    3. Stopped(停止)状态:当Activity不可见时,它就处于Stopped状态。这时Activity仍然留在内存里并保存所有的状态和成员信息。一旦Activity退出或关闭,当前的状态和成员信息就丢失了。
    4. Killed(销毁)状态:Activity从堆栈中被移除后,即处于Killed状态,需要重新启动,然后才可以再次使用这个Activity。
  9. 简要说明Service的几种启动方式及其特点。

    • startService方式:Service可无限期的运行。
    • bindService方式:Service会随绑定的Activity结束时一起停止
  10. 简述几种Android数据存储的方法和特点,并说明每一种数据存储方法的步骤、使用的语法、创建过程等。

  11. 文件存储:文件存储方式是一种较常用的方法,在Android读取/写入文件的方法,与Java中实现I/O的程序是完全一样的,使用步骤:

    1. 通过文件名和写入模式创建输出流对象

      FileOutputStream outputStream = openFileOutput(FILE_NAME, MODE_APPEND);
      
    2. 通过文件输出流将要写入的内容写入文件

      outputStream.write(txt_write.getText().toString().getBytes());
      
    3. 最后关闭输出流

      outputStream.close();
      
  12. SQLite数据库:SQLiteAndroid所集成的一个轻量级的嵌入式数据库,它不仅可以使用Andorid API操作,同时它也支持SQL语句进行增删改查等操作,使用步骤:

    1. 编写一个类继承SQLiteOpenHelper,用于初始化数据库和建表等操作

      public class StudentDBHelper extends SQLiteOpenHelper {
      
          public StudentDBHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
              super(context, name, factory, version);
          }
      
          @Override
          public void onCreate(SQLiteDatabase sqLiteDatabase) {
              // 执行建表语句
              String sql = "create table t_student(stuNo TEXT primary key ,stuName TEXT);";
              sqLiteDatabase.execSQL(sql);
              Log.i("student.db", "数据库创建成功!");
          }
      
          @Override
          public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
          }
      }
      
    2. 使用上一步我们创建的StudentDBHelper来实例化一个数据库对象

      StudentDBHelper studentDBHelper = new StudentDBHelper(MainActivity.this, dbName, null, 1);
      SQLiteDatabase db = studentDBHelper.getReadableDatabase();
      
    3. 使用创建出的数据库对象进行数据库的增删改查操作

      //  组装键值对
      ContentValues contentValues = new ContentValues();
      contentValues.put("stuNo", stuNo);
      contentValues.put("stuName", stuName);
      //  进行插入,三个参数分别为 要插入的表名 若数据为空时 设置为null的那一列 键值对数据,返回受影响条数,返回1则插入成功
      long result = db.insert(tableName, "stuName", contentValues);
      
  13. SharedPreferences:SharedPreferences是Android提供的用于存储一些简单配置信息的一种机制,采用了XML格式将数据存储到设备中。使用步骤:

    1. 通过SharedPreferences名称和模式ID来获取SharedPreferences实例对象

      SharedPreferences preferences = getSharedPreferences("PREFS_NAME", MODE_PRIVATE);
      
    2. 通过实例的edit()方法获取编辑器对象

      SharedPreferences.Editor edit = preferences.edit();
      
    3. 向编辑器对象中添加数据

      edit.putString("stringName","stringValue");
      
    4. 调用编辑器对象的commit()apply()方法提交数据,完成数据的存储

      edit.commit();
      edit.apply();
      
  14. AndroidManifests.xml文件的作用是什么?其中常见的属性有哪些?分析如何添加第二个Activity的注册信息、Service的注册信息和广播接收器的注册信息。

    1. 作用:项目的清单文件,用于配置各个组件或者是一些访问权限等

    2. 常见属性

      1. android:icon:配置应用的图标
      2. android:label:配置应用名
      3. android:theme:配置应用的主题样式
    3. 注册Activity

      <activity
      	android:name=".SecondActivity" -----Activity的类路径
      	android:enabled="true"         -----是否可实例化
      	android:exported="true" >     -----是否可导出
      </activity>
      
    4. 注册Service

      <service
      	android:name=".MusicService"   -----Service的类路径
      	android:enabled="true"         -----是否可实例化
      	android:exported="true" >     -----是否可导出
      </service>
      
    5. 注册广播接收器

      <receiver 
          android:name=".Receiver"        -----BroadcastReceiver的类路径
          android:enabled="true"                -----是否可实例化
          android:exported="true">              -----是否可导出
          <intent-filter>
              <action android:name="action" />  -----配置接收器监听的动作
          </intent-filter>
      </receiver>
      

编程练习题

项目资源

设计一个QQ登录界面,并实现以下功能:
  1. 点击“登录”按钮,可以跳转到另一个界面。
  2. 第二个界面,添加“文本框”组件,写上自己的学号信息。
  3. 在第二个界面,添加一个“退出”按钮,点击“退出”按钮,使其切换到首界面。

项目目录及文件如下

➜ login tree
.
└── src
    └── main
        ├── AndroidManifest.xml   ---->项目清单文件
        ├── java
        │   └── cn
        │       └── lddcc
        │           └── study
        │               └── test
        │                   └── login
        │                       ├── MainActivity.java   --->主页面类
        │                       └── SecondActivity.java   --->第二个页面类
        └── res
            └── layout
                ├── activity_main.xml   --->主页面布局文件
                └── activity_second.xml   --->第二个页面布局文件

10 directories, 5 files

AndroidManifest.xml 项目的清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="cn.lddcc.study.test.login">
   <application
       android:allowBackup="true"
       android:icon="@mipmap/ic_launcher"
       android:label="@string/app_name"
       android:roundIcon="@mipmap/ic_launcher_round"
       android:supportsRtl="true"
       android:theme="@style/Theme.HomeWork">
       <activity
           android:name=".SecondActivity"
           android:exported="true" />
       <activity
           android:name=".MainActivity"
           android:exported="true">
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
   </application>
</manifest>

MainActivity.java 主页面Java文件

package cn.lddcc.study.test.login;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //  给登录按钮添加事件
        findViewById(R.id.btn_login).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //  实例化一个Intent对象用于跳转到第二个页面
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                //  进行跳转
                startActivity(intent);
            }
        });
    }
}

SecondActivity.java 第二个页面Java文件

package cn.lddcc.study.test.login;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        //  给退出按钮添加单击事件
        findViewById(R.id.btn_cancel).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //  结束当前页面,若主页面未关闭,则会回退到主页面,即登录页
                SecondActivity.this.finish();
            }
        });
    }
}

activity_main.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:gravity="center|top"
    android:orientation="vertical"
    android:padding="20dp"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="75dp"
        android:orientation="horizontal">

        <TextView
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="用户名"
            android:textSize="15sp" />

        <EditText
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:hint="请输入用户名"
            android:textSize="15sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:orientation="horizontal">

        <TextView
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="密码"
            android:textSize="15sp" />

        <EditText
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:hint="请输入密码"
            android:inputType="textPassword"
            android:textSize="15sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:gravity="center"
        android:orientation="horizontal">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="15dp"
            android:text="注册" />

        <Button
            android:id="@+id/btn_login"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="15dp"
            android:text="登录" />
    </LinearLayout>
</LinearLayout>

activity_second.xml 第二个页面的布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".SecondActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="210809010XXXX"
        android:textSize="20sp" />

    <Button
        android:id="@+id/btn_cancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="退出" />

</LinearLayout>

运行图如下

image-20211201223025552

image-20211201223645709

设计一个“网易云”主界面,并实现以下功能;
  1. 添加“播放器”按钮
  2. 设置启动主界面,音乐即时响起
  3. 点击“播放器”按钮,关闭或启动音乐。

项目的目录如下

➜ music tree
.
└── src
    └── main
        ├── AndroidManifest.xml   --->项目清单文件
        ├── java
        │   └── cn
        │       └── lddcc
        │           └── study
        │               └── test
        │                   └── music
        │                       ├── MainActivity.java   --->主页面类
        │                       └── MusicService.java   --->音乐服务类
        └── res
            ├── layout
            │   └── activity_main.xml   --->主页面布局文件
            └── raw
                └── music.mp3   --->音乐文件

11 directories, 5 files

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cn.lddcc.study.test.music">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.HomeWork">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <service android:name=".MusicService" android:enabled="true" android:exported="false"/>
    </application>

</manifest>

MainActivity.java

package cn.lddcc.study.test.music;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.ImageButton;

public class MainActivity extends AppCompatActivity {

    //  定义服务的Intent
    Intent serviceIntent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //  实例化服务Intent对象
        serviceIntent = new Intent(MainActivity.this, MusicService.class);
        //  给播放器按钮添加单击事件
        findViewById(R.id.btn_play).setOnClickListener(v -> {
            //  若当前播放状态为false,则播放音乐;若为true,则停止播放
            if (!MusicService.isPlay) {
                //  通过开启服务来播放音乐
                startService(serviceIntent);
            } else {
                //  通过关闭服务来停止音乐
                stopService(serviceIntent);//停止Service
            }
        });
    }


    @Override
    protected void onStart() {
        //  当应用启东市就播放音乐
        startService(serviceIntent);
        super.onStart();
    }
}

MusicService.java

package cn.lddcc.study.test.music;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.util.Log;

import androidx.annotation.Nullable;

//  创建音乐服务类
public class MusicService extends Service {

    //  定义公共静态变量标识是否播放状态
    public static boolean isPlay;
    //  定义播放器
    private MediaPlayer player;

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        //  服务被创建时,创建MediaPlayer对象,并加载播放的音频文件
        player = MediaPlayer.create(this, R.raw.music);
        super.onCreate();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        //  服务开始时,若当前状态为未播放,则播放音乐,isPlay默认为false
        if (!player.isPlaying()) {
            player.start();// 播放音乐
            isPlay = player.isPlaying();//设置当前状态为正在播放
        }
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        //  停止音乐的播放
        player.stop();
        //  当前的状态为停止播放
        isPlay = player.isPlaying();
        //  释放资源
        player.release();
        super.onDestroy();
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btn_play"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="播放器" />


</LinearLayout>

运行图如下

image-20211201223827941

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不喜欢前端

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

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

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

打赏作者

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

抵扣说明:

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

余额充值