Android 学习笔记

news2024/11/17 11:27:49

目录

  • 一.Android入门
    • 1.Android 概述
    • 2.Android Studio
    • 3.创建模拟器
    • 4.使用外部模拟器
    • 5.第一个app
  • 二.app开发基础
    • 1.开发语言
    • 2.app工程目录结构
    • 3.文本控件TextView
      • (1)设置文本内容
      • (2)设置文本大小
      • (3)设置文本颜色
      • (4)设置背景颜色
      • (5)设置视图宽高
      • (6)设置视图间距
      • (7)设置视图对齐方式
    • 4.线性布局LinearLayout
      • 权重
    • 5.相对布局RelativeLayout
    • 6.网格布局GridLayout
    • 7.滚动视图ScrollView
    • 8.按钮控件Button
    • 9.点击事件和长按事件
    • 10.禁用与恢复按钮
    • 11.图像视图ImageView
    • 12.图像按钮ImageButton
    • 13.在文本中添加图像
  • 三.Activity
    • 1.启动和结束
    • 2.生命周期
    • 3.启动模式
      • 默认启动模式standard
      • 栈顶复用模式singleTop
      • 栈内复用模式singleTask
      • 全局唯一模式singleInstance
      • 动态设置启动模式
    • 4.在活动之间传递消息
      • 显式Intent
      • 隐式Intent
      • 发送数据
      • 返回数据
  • 四.控件
    • 1.Drawable介绍
    • 2.Shape图形
      • size(尺寸)
      • stroke(描边)
      • corners(圆角)
      • solid(填充)
      • padding(间隔)
      • gradient(渐变)
      • state_pressed(按压效果)
    • 3.复合按钮
    • 4.编辑框EditText
    • 5.下拉列表Spinner
    • 6.列表视图ListView
    • 7.网格视图GridView
    • 8.RecyclerView
    • 9.翻页视图ViewPager
  • 五.数据存储
    • 1.SharedPreferences
    • 2.SQLite
      • SQLiteDatabase
      • SQLiteOpenHelper
      • 读写本地图片
  • 六.Application
  • 七.ContentProvider
  • 八.Fragment

一.Android入门

1.Android 概述

安卓(Android)是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统。主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。

请添加图片描述

Android的系统架构和其操作系统一样,采用了分层的架构。分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux内核层。

2.Android Studio

Android Studio是Android运用的开发工具,由谷歌公司在2013年5月推出,是基于IDER演变而来的,比Eclipse更加好用

下载 Android Studio

官网地址:https://developer.android.google.cn/studio

详细安装步骤:https://blog.csdn.net/m0_65379736/article/details/126813964

3.创建模拟器

首选打开Android Studio,然后【点击】

请添加图片描述

点击【Create device】

请添加图片描述

然后,点击【Phone】

请添加图片描述

选择安卓版本

请添加图片描述

根据需求选择竖屏或横屏,然后点击【Finish】

请添加图片描述

启动模拟器

请添加图片描述

出现以下界面,表明安装成功,

请添加图片描述

若没有创建成功,请重新操作此步骤,创建模拟器。若实在不行,就使用外部模拟器

4.使用外部模拟器

下载夜神模拟器

直接下载,安装就直接下一步、下一步就可以了

连接夜神模拟器

先进入安装夜神模拟器中的bin目录

请添加图片描述

输入cmd,然后回车

请添加图片描述

然后输入在黑窗口中输入下面这行命令,回车

nox_adb.exe connect 127.0.0.1:62001

请添加图片描述

出现以下界面,表明连接成功

请添加图片描述

5.第一个app

直接运行即可,前提是创建了模拟器且已打开

请添加图片描述

二.app开发基础

1.开发语言

app开发主要有两大技术路线,分别是原生开发和混合开发

Android 的官方编程语言包括Java和Kotlin,但是要做Android开发必须学Java,没有Java基础是做不了的;因为这个源码是用Java写的,即使现在流行用Kotin开发,也要会Java才行

2.app工程目录结构

请添加图片描述

  • manifests子目录,下面有一个xml文件,即AndroidManifest.xml,是APP的运行配置文件。

  • java子目录,下面有3个com.example.,myapplication包,其中第一个包存放的是APP工程的java源代码,后面两个包存放的是测试用的java代码。

  • res子目录,存放的是APP工程的资源文件。

res子目录下面又有4个子目录:

  • drawable目录存放的是图形描述文件与用户图片

  • layout目录存放的是APP页面的布局文件

  • mipmap目录存放的是启动图标

  • values目录存放的是一些常量定义文件,字符串常量strings.xml、像素常量dimens.xml、颜色常量colors.xml、样式风格定义styles.xml等。

Gradle Scripts工程的编译配置文件:

请添加图片描述

  • build.gradle,该文件分别为项目及和模块级两种,用于描述APP工程的编译规则。

  • proguard-rules.pro,该文件用于描述java文件的代码混淆规则。

  • gradle.properties,该文件用于配置编译工程的命令行参数,一般无须改动。

  • settings.gradle,配置哪些模块一起编译。初始内容为include“app”,表示只编译APP模块。

  • local.properties,项目的本地配置,一般无须改动。该文件是在工程编译时自动生成的,用于描述开发本机的配置,比如SDK的本地路径、NDK的本地路径等。

AndroidManifest.xml配置文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication">

    <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.MyApplication">
        <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>
  • AndroidManifest.xml的根节点为manifest,它的packagel属性指定了该App的包名。manifest下面有个application节点,它的各属
    性说明如下:
    android:allowBackup,是否允许应用备份。允许用户备份系统应用和第三方应用的apk安装包和应用数据,以便在刷机或者数据丢失后恢复应用,用户即可通过adb backup和adb restore来进行对应用数据的格份和恢复。为true表示允许,为false则表示不允许。
  • android:icon,指定App在手机屏幕上显示的图标。
  • android:label,指定App在手机屏幕上显示的名称。
  • android:roundIcon,指定App的圆角图标。
  • android:supportsRtl,是否支持阿拉伯语/波斯语这种从右往左的文字排列顺序。为true表示支持,为false!则表示不支持。
  • android:theme,指定App的显示风格。

注意到application下面还有个activity节点,它是活动页面的注册声明,只有在AndroidManifest…xml中正确配置了activity节点,才能在运行时访问对应的活动页面。初始配置的MainActivity正是App的默认主页,之所以说该页面是App主页,是因为它的activity节点内部还
配置了以下的过滤信息:

<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>

其中action节点设置的android.intent.action.MAIN表示该页面是App的入口页面,启动App时会最先打开该页面。而category节点设置的android.intent.category.LAUNCHER决定了是否在手机屏幕上显示App图标,如果同时有两个activity节点内部都设置了android.intent.category.LAUNCHER,那么桌面就会显示两个App图标。

3.文本控件TextView

(1)设置文本内容

在XML文件中通过属性 android:text 设置文本

<TextView
        android:id="@+id/tv_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        />

在Java代码中调用文本视图对象的 setText 方法设置文本

private TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        this.textView = (TextView) findViewById(R.id.tv_1);
        textView.setText("你好,世界");
    }

还可以引用字符串string文件

在XML文件中引用(@string/name名)

在Java代码中引用(R.string.name名)

(2)设置文本大小

在XML文件中通过属性 android:textSize 设置文本大小,单位sp可以用px和dp

  • px:它是手机屏幕的最小显示单位,与设备的显示屏像素有关。
  • dp:它是与设备无关的显示单位,只与屏幕的尺寸有关。
  • sp:专门设置字体的大小,在系统中可以调整字体的大小
android:textSize="30sp"

在Java代码中调用 setTextSize 方法设置文本大小

textView.setTextSize(30);	//默认单位sp

(3)设置文本颜色

在XML文件中通过属性 android:textColor 设置文本颜色

android:textColor="#FF000000"

在Java代码中调用 setTextColor 方法设置文本颜色

textView.setTextColor(0xff000000);	//设置字体为黑色

(4)设置背景颜色

在XML文件中通过属性 android:background 背景颜色,可以理解为填充整个控件的颜色,可以是图片

android:background="ff00ffff"
android:background="@drawable/iocm_1"

(5)设置视图宽高

android:layout_width 视图宽度属性

android:layout_height 视图高度属性 ,单位dp

  • match_parent,跟父控件保持一致
  • wrap_content,根据内容自动分配

(6)设置视图间距

外边距属性 android:layout_margin 设置当前视图与周围平级视图之间的距离,还有:

layout_marginLeft、layout_marginTop、layout_marginRight、layout_marginBottom

内边距属性 android:padding 设置当前视图与子视图之间的距离,还有:

paddingLeft、paddingTop、paddingRight、paddingBottom

(7)设置视图对齐方式

android:layout_gravity 设置当前视图与父控件的对齐方式

android:gravity 设置当前视图与子视图之间的对齐方式

  • center_horizontal(水平居中)
  • center_vertical(垂直居中)
  • center(中央)

还包括:left、top、right、bottom,可以用竖线连接,如"left|top"表示朝左上角对齐

4.线性布局LinearLayout

通过属性android:orientation将内部的控件在线性方向上依次排列

  • vertical(水平排列),水平方向从左往右排
  • horizontal(垂直排列),垂直方向从上往下排

若不指定,默认水平排列

权重

线性布局的子视图各自拥有多大比例的宽高,通过在子视图中设置 android:layout_weight 属性,形成宽高比例

5.相对布局RelativeLayout

使子视图的位置由其它视图决定

属性描述
android:layout_centerHorizontal如果为true,将该控件的置于水平居中
android:layout_centerVertical如果为true,将该控件的置于垂直居中
android:layout_centerInParent如果为true,将该控件的置于父控件的中央
android:layout_alignParentTop如果为true,将该控件的顶部与其父控件的顶部对齐
android:layout_alignParentBottom如果为true,将该控件的底部与其父控件的底部对齐
android:layout_alignParentLeft如果为true,将该控件的左部与其父控件的左部对齐
android:layout_alignParentRight如果为true,将该控件的右部与其父控件的右部对齐
android:layout_below=“@id/view_1”将该控件置于"@id/view_1"控件下边
android:layout_above=“@id/view_1”将该控件置于"@id/view_1"控件上边
android:layout_toLeftOf=“@id/view_1”将该控件置于"@id/view_1"控件的左边
android:layout_toRightOf =“@id/view_1”将该控件置于"@id/view_1"控件的右边
android:layout_alignTop =“@id/view_1”将该控件的顶部边缘与"@id/view_1"顶部边缘对齐
android:layout_alignBottom =“@id/view_1”将该控件的底部边缘与"@id/view_1"底部边缘对齐
android:layout_alignLeft =“@id/view_1”将该控件的左边缘与"@id/view_1"的左边缘对齐
android:layout_alignRight =“@id/view_1”将该控件的右边缘与"@id/view_1"的右边缘对齐

6.网格布局GridLayout

支持多行多列的表格排列,默认从左往右、从上往下排列

  • android:columnCount,网格的列数,每行能放多少个视图
  • android:rowCount,网格的行数,每列能放多少个视图

7.滚动视图ScrollView

ScrollView 设置垂直方向的滚动视图

HorizontalScrollView 设置水平方向滚动视图

8.按钮控件Button

由TextView派生而来的,但是Button拥有默认的按钮背景,内部文本默认居中对齐,会将内部文本中的英文默认转换为大写

  • android:textAllCaps,是否将英文字母转换为大写,默认为"ture"

在xml文件中通过属性 android:clickable 设置是否点击

onClick方法设置按钮的监听器,点击按钮调用对应的方法,方法格式 public void XXXX(View v)

这个监听目前已经淘汰,但是可以用

private Button mBtn3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_button);
        mBtn3 = (Button) findViewById(R.id.btn_3);
        mBtn3.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Toast.makeText(ButtonActivity.this, "btn3被点击了", Toast.LENGTH_SHORT).show();
            }
        });
    }

使用drawableXXX属性,可以将图片与按钮结合,使用paddingXXX即可调整其位置

注意

Button默认背景蓝紫色,若手动设置的颜色无效,可能是因为res/values/themes.xml中的parent=“Theme.MaterialComponents.DayNight.DarkActionBar”,只需要将DarkActionBar改为Bridge

请添加图片描述

9.点击事件和长按事件

监听器,专门监听控件的动作行为。只有控件发生了指定的动作,监听器才会触发开关去执行对应的代码逻辑。
按钮控件有两种常用的监听器:

  • 点击监听器,通过setOnClickListener方法设置。按钮被按住少于S00毫秒时,会触发点击事件。
  • 长按监听器,通过setOnLongClickListener方法设置。按钮被按住超过500毫秒时,会触发长按
    事件。
private Button mBtn3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_button);
        mBtn3 = (Button) findViewById(R.id.btn_3);
        mBtn3.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Toast.makeText(ButtonActivity.this, "btn3被点击了", Toast.LENGTH_SHORT).show();
            }
        });
    }

10.禁用与恢复按钮

不可用按钮:按钮不允许点击,即使点击也没反应,同时按钮文字为灰色

可用按钮:按钮允许点击,点击按钮会触发点击事件,同时按钮文字为正常的黑色

在XML文件中通过android:enabled设置属性是否允许点击

android:enabled="true"

在Java代码中通过setEnabled方法设置属性是否允许点击

bn_t.setEnabled(false)

11.图像视图ImageView

在XML文件中通过属性 android:src 设置图片资源

android:src="@drawable/iocm_1"

在Java代码中通过setImageResource方法设置图片资源

imageView_1.setImageResource(R.drawable.iocm_1)

ImageView本身默认图片居中显示,若要改变图片的显示方式,可通过scaleType属性设定,

XML文件中ScaleType类中描述
fitXYFIT_XY拉伸图片使其正好填满视图(图片可能被拉伸变形)
fitStartFIT_START保持宽高比例,拉伸图片使其位于视图上方或左侧
fitCenterFIT_CENTER保持宽高比例,拉伸图片使其位于视图中间
fitEndFIT_END保持宽高比例,拉伸图片使其位于视图下方或右侧
centerCENTER保持图片原尺寸,并使其位于视图中间
centerCropCENTER_CROP拉伸图片使其充满视图,并位于视图中间
centerlnsideCENTER_INSIDE保持宽高比例,缩小图片使之位于视图中间(只缩小不放大)

在XML文件中通过属性 android:scaleType 设置图片显示方式

android:scaleType="fitXY"

在Java代码中通过setScaleType方法设置图片显示方式

imageView_1.setImageResource(ImageView.ScaleType.FIT_XY)

12.图像按钮ImageButton

显示图片的图像按钮,继承自ImageView,ImageButton只能显示图片,且图片按比例自动缩放,可以设置两张图片,实现叠加效果

  • android:foreground,设置前景图
  • android:background,设置背景图

13.在文本中添加图像

属性描述
android:drawableTop在文本上边导入图片
android:drawableBottom在文本下边导入图片
android:drawableLight在文本左边导入图片
android:drawableRight在文本右边导入图片
android:drawablePadding设置图片与文字之间的距离

三.Activity

Android的四大组件之一

Activity整个生命周期中有四种状态:

  1. 运行状态:在用户界面中最上层,完全能被用户看到,能够与用户进行交互

  2. 暂停状态:Activity失去焦点,Activity界面被部分遮挡,该Activity不再处于用户界面的最上层,且不能够与用户进行交互

  3. 停止状态:Activity在界面上完全不能被用户看到,也就是说这个Activity被其他Activity全部遮挡,但它依然保持所有状态和成员信息,只是它不再可见,它的窗口被隐藏

  4. 终止状态:被系统清理出内存

1.启动和结束

从当前页面跳转到新页面

startActivity(源页面.this, 目标页面.class)

从当前页面回到上一个页面,相当于关闭当前页面

finish(); 	//结束当前的活动页面

2.生命周期

请添加图片描述

onCreate:创建活动。把页面布局加载进内存,进入了初始状态。
onStart:开始活动。把活动页面显示在屏幕上,进入了就绪状态。
onResume:恢复活动。活动页面进入活跃状态,能够与用户正常交互,例如允许响应用户的点击动作、允许用户输入文字等等。
onPause:暂停活动。页面进入暂停状态,无法与用户正常交互。
onStop:停止活动。页面将不在屏幕上显示。
onDestroy:销毁活动。回收活动占用的系统资源,把页面从内存中清除。
onRestart:重启活动。重新加载内存中的页面数据。
onNewlntent:重用已有的活动实例。

各状态之间的切换过程

打开新页面的方法调用顺序

onCreate》onStart》onResume

关闭旧页面的方法调用顺序

onPause》onStop》onDestroy

请添加图片描述

3.启动模式

默认启动模式standard

该模式下,启动的Activity会依照启动顺序被依次压入Task栈中

请添加图片描述

栈顶复用模式singleTop

该模式下,如果栈顶Activity为我们要新建的Activity,那么就不会重复创建新的Activity

请添加图片描述

栈内复用模式singleTask

该模式下,如果task栈内存中存在目标Activity实例,则将task内的对应Activity实例之上的所有Activity弹出栈,并将对应Activity置于栈顶

请添加图片描述

全局唯一模式singleInstance

该模式下,我们会为目标Activity创建一个新的task栈,将目标Activity放入新的task,并让目标Activity获得焦点。新的task有且只有这一个Activity实例。如果已经创建过目标Activity实例,则不会创建新的task,而是将以前的创建过的Activity唤醒。

请添加图片描述

动态设置启动模式

setFlags方法值说明
Intent.FLAG_ACTIVITY_NEW_TASK开辟一个新的任务栈
Intent.FLAG_ACTIVITY_SINGLE_TOP当栈顶为待跳转的活动实例之时,则重用栈顶的实例
Intent.FLAG_ACTIVITY_CLEAR_TOP当栈中存在待跳转的活动实例时,则重新创建一个新实例,并清除原实例上方的所有实例
Intent.FLAG_ACTIVITY_NO_HISTORY栈中不保存新启动的活动实例
Intent.FLAG_ACTIVITY_CLEAR_TASK跳转到新页面时,栈中的原有实例都被清空

4.在活动之间传递消息

Intent是各个组件之间信息沟通的桥梁,用于各个组件之间的通信

元素名称设置方法说明
ComponentsetComponent组件,指定意图的来源与目标
ActionsetAction动作,指定意图的动作行为
DatasetDataUri,指定动作要操作的数据路径
CategoryaddCategory类别,指定意图的操作类别
TypesetType数据类型,指定消息的数据类型
ExtrasputExtras扩展信息,指定装载的包裹信息
FlagssetFlags标志位,指定活动的启动标志

显式Intent

直接指定来源活动与目标活动,属于精准匹配

  1. 在Intent的构造函数中指定

    Intent intent = new Intent(this, ActNextActivity.class);	
    
  2. 调用意图对象的setClass方法指定

    Intent intent = new Intent();
    intent.setClass(this, ActNextActivity.class);
    
  3. 调用意图对象的setComponent方法指定

    Intent intent = new Intent();
    ComponentName component = new ComponentName(this, ActNextActivity.class);
    intent.serComponent(component);
    

隐式Intent

没有明确指定要跳转的目标活动,只给出一个动作字符串让系统自动匹配,属于模糊匹配

Intent类的系统动作常量名系统动作常量值说明
ACTION_MAINandroid.intent.action.MAINapp启动时的入口
ACTION_VIEWandroid.intent.action.VIEW向用户显示数据
ACTION_SENDandroid.intent.action.SEND分享内容
ACTION_CALLandroid.intent.action.CALL直接拨号
ACTION_DIALandroid.intent.action.DIAL准备拨号
ACTION_SENDTOandroid.intent.action.SENDTO发送短信
ACTION_ANSWERandroid.intent.action.ANSWER接听电话

动作名称既可以通过setAction方法指定,也可以通过构造函数Intent(String action)直接生成意图对象

发送数据

Intent使用Bundle对象存放待传递的数据信息

Bundle对象操作各类型数据的读写方法

数据类型读方法写方法
整型getIntputInt
浮点getFloatputFloat
双精度getDoubleputDouble
布尔值getBooleanputBoolean
字符串getStringputString
字符串数组getStringArrayputStringArray
字符串列表getStringArrayListputSrtingArrayList
可序列化结构getSerializableputSerializable

发送消息包裹,调用意图对象的putExtras方法

接收消息包裹,调用意图对象的getExtras方法

返回数据

处理下一个页面的应答数据

  1. 上一个页面打包好请求数据,调用registerForActivityResult方法执行跳转动作
  2. 下一个页面接收并解析请求数据,进行相应处理
  3. 下一个页面在返回上一个页面时,打包应答数据并调用setResult方法返回数据包裹
  4. 上一个页面重写方法onActivityResult,解析获得下一个页面的返回数据

四.控件

1.Drawable介绍

Android把所有能够显示的图形都抽象为Drawable类(可绘制的)。包括图片、色块、画板、背景等。

drawable目录一般保存描述性的XML文件,而图片文件一般放在具体分辨率的drawable目录下

  • drawable-ldpi里面存放低分辨率的图片(如240×320),现在基本没有这样的智能手机了
  • drawable-mdpi里面存放中等分辨率的图片(如320×480),这样的智能手机已经很少了
  • drawable-hdpi里面存放高分辨率的图片(如480×800),一般对应4英寸~4.5英寸的手机(但不绝对,同尺寸手机有可能分辨率不同,手机分辨率就高不就低,因为分辨率低了屏幕会有模糊的感觉)
  • drawable-xhdpi里面存放加高分辨率的图片(如720×1280),一般对应5英寸~5.5英寸的手机
  • drawable-xxhdpi里面存放超高分辨率的图片(如1080×1920),一般对应6英寸~6.5英寸的手机
  • drawable-xxxhdpi里面存放超超高分辨率的图片(如1440×2560),一般对应7英寸以上的平板电脑

分辨率每加大一级,宽度和高度就要增加二分之一或三分之一像素。在开发Ap时,为了兼容不同的手机屏幕,在各目录存放不同分辨率的图片(Android会根据手机的分辨率适配对应文件夹里的图片),从而提升视觉效果

2.Shape图形

形状图形的定义文件是以shape标签为根节点的XML描述文件,支持4种类型的形状:

形状说明
rectangle矩形,默认为矩形
oval椭圆。此时corners节点会失效
line直线。此时必须设置stroke节点,否则会报错
ring圆环

size(尺寸)

size是shapel的下级节点,用来描述形状图形的宽高尺寸。若无size节点,则表示宽高与宿主视图一样大小。

  • height:图形高度
  • width:图形宽度

stroke(描边)

stroke是shapel的下级节点,用来描述形状图形的描边规格。若无stroke节点,则表示不存在描边。

  • color:描边的颜色

  • dashGap:每段虚线之间的间隔

  • dashWidth:每段虚线的宽度。若dashGap和dashWidth有一个值为O,则描边为实线

  • width:描边的厚度

corners(圆角)

corners是shapef的下级节点,用来描述形状图形的圆角大小。若无corners-节点,则表示没有圆角。

  • bottomLeftRadius:左下圆角的半径
  • bottomRightRadius:右下圆角的半径
  • topLeftRadius:左上圆角的半径
  • topRightRadius:右上圆角的半径
  • radius:4个圆角的半径

solid(填充)

solid是shapel的下级节点,用来描述形状图形的填充色彩。若无solid节点,则表示无填充颜色。

  • coor:内部填充的颜色

padding(间隔)

padding是shapel的下级节点,用来描述形状图形与周围边界的间隔。若无padding节点,则表示四周不设间隔。

  • top:与上方的间隔
  • bottom:与下方的间隔
  • left:与左边的间隔
  • right:与右边的间隔

gradient(渐变)

gradient是shape的下级节点,用来描述形状图形的颜色渐变。若无gradient节点,则表示没有渐变效果。

  • angle:渐变的起始角度。为0时表示时钟的9点位置,值增大表示往逆时针方向旋转。如:值为90表示6点位置,值为180表示3点位置,值为270表示0点/12点位置
  • type:渐变类型,linear(线性渐变,默认)、radial(放射渐变)、sweep(滚动渐变)
  • centerX:圆心的X坐标。当android:type="‘linear’"时不可用
  • centerY::圆心的Y坐标。当android:type="linear’"时不可用
  • gradientRadius:渐变的半径。当android:type="radial"时需要设置该属性
  • centerColor:渐变的中间颜色
  • startColor:渐变的起始颜色
  • endColor:渐变的终止颜色
  • useLevel:是否无渐变色,true为无渐变色、false为有渐变色

state_pressed(按压效果)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape>
            <solid android:color="#cc7a00"/>
            <corners android:radius="5dp"/>
        </shape>
    </item>
    <item android:state_pressed="false">
        <shape>
            <solid android:color="#ff9900"/>
            <corners android:radius="5dp"/>
        </shape>
    </item>
</selector>
属性说明适用控件
state_pressed是否按下按钮Button
state_checked是否勾选复选框CheckBox、单选按钮RadioButton
state_focused是否获取焦点文本编辑框EditText
state_selected是否选中各控件通用

3.复合按钮

请添加图片描述

CompoundButton在XML文件中主要属性:

  • checked:指定按钮的勾选状态,true表示勾选,false则表示未勾选。默认为未勾选
  • button=“@null” 表示取消自带的默认样式
  • buto:指定左侧勾选图标的图形资源,如果不指定就使用系统的默认图标

CompoundButton在Java代码中主要方法:

  • setChecked:设置按钮的勾选状态
  • setButtonDrawable:设置左侧勾选图标的图形资源
  • setOnCheckedChangeListener:设置勾选状态变化的监听器
  • isChecked:判断按钮是否勾选

Switch开关按钮在XML文件新添加的属性:

  • textOn:设置右侧开启时的文本
  • textOff:设置左侧关闭时的文本
  • track:设置开关轨道背景
  • thumb:设置开关标识图标

RadioGroup单选组实质上是个布局,同一组RadioButton都要放在同一个RadioGroup节点下。RadioGroup提供了orientation属性指定下级控件的排列方向,该属性为horizontal时,单选按钮在水平方向排列;该属性为vertical时,单选按钮在垂直方向排列。

RadioGroup下面还可以挂载其他子控件(如TextView、ImageView等)。单选组相当于特殊的线性布局,它们的主要区别:

  1. 单选组多了管理单选按钮的功能,而线性布局不具备该功能
  2. 如果不指定orientation,属性,那么单选组默认垂直排列,而线性布局默认水平排列

RadioGroup在Java代码中常用方法:

  • check:选中指定资源编号的单选按钮
  • getCheckedRadioButtonld:获取已选中单选按钮的资源编号
  • setOnCheckedChangeListener:设置单选按钮勾选变化的监听器

4.编辑框EditText

EditText在XML文件新添加的属性:

  • int:设置文本提示内容
  • textColorHint:设置文本提示内容的颜色
  • macLength:设置文本输入的最大长度
  • inputType:设置文本输入类型,如:textPassword(显示文本为*号) 、number(整数)、numberDecimal(小数)

5.下拉列表Spinner

Spinner在XML文件中的属性没什么特别的,主要是在Java文件中设置监听、适配器

//    定义下拉列表要显示的文本数组
    private String[] heroNames = {"美美1号", "美美2号", "美美3号", "美美4号"};
    private Spinner mSpinner;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mSpinner = (Spinner) findViewById(R.id.spinner);
//        声明一个下拉列表的数组适配器
        ArrayAdapter mAdapter = new ArrayAdapter(this, androidx.appcompat.R.layout.support_simple_spinner_dropdown_item, heroNames);
        mSpinner.setAdapter(mAdapter);
//        设置下拉框默认显示第一项
        mSpinner.setSelection(0);

        mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                String strMsg = "您选择了\""+heroNames[i]+"\"!";
                Toast.makeText(MainActivity.this, strMsg, Toast.LENGTH_LONG).show();
            }
            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {
            }
        });
    }

6.列表视图ListView

ListView类的设置方法说明
getCount获取列表项的个数
getItem获取列表项的数据
getItemId获取列表项的编号
getView获取每项的展示视图,并对每项的内部控件进行业务处理

设置数组适配器

	private ListView mListView;
    private String[] names = {"美美1号", "美美2号", "美美3号", "美美4号"};
    private List<HashMap> dataList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mListView = findViewById(R.id.listview);
        // 声明一个数组适配器
        ArrayAdapter mAdapter = new ArrayAdapter(this, androidx.appcompat.R.layout.support_simple_spinner_dropdown_item, names);
        mListView.setAdapter(mAdapter);
        }

7.网格视图GridView

GridView新添加的属性:

XML中的属性GridView类的设置方法说明
horizontalSpacingsetHorizontalSpacing指定网格顶在水平方向的间距
verticalSpacingsetVerticalSpacing指定网格顶在垂直方向的间距
numColumnssetNumColumns指定列的数目
stretchModesetStretchMode指定剩余空间的拉伸模式
columnWidthsetColumnWidth指定每列的宽度;拉伸模式为spacingWidth、spacingWidthUniform时,必须指定列宽
    private String[] names = new String[] {"美美1号", "美美2号", "美美3号", "美美4号"};
    List imagelist;
    private GridView mGridView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mGridView=findViewById(R.id.gridview);
        // 声明一个数组适配器
        ArrayAdapter mAdapter = new ArrayAdapter(this, androidx.appcompat.R.layout.support_simple_spinner_dropdown_item, names);
        mGridView.setAdapter(mGridView);
    }

8.RecyclerView

RecyclerView能够灵活实现大数据集的展示,视图的复用管理比ListView更好,能够显示列表、网格、瀑布流等形式,且不同的ViewHolder能够实现item多元化的功能。简单来说,就是列表和网格的一个优化版

9.翻页视图ViewPager

翻页视图就是允许页面在水平方向左右滑动

  • setAdapter:设置页面项的适配器。适配器用的是PagerAdapter及其子类

  • setCurrentItem:设置当前页码,也就是要显示哪个页面

  • addOnPageChangeListener:添加翻页视图的页面变更监听器。该监听器需实现接

OnPageChangeListener下的3个方法,

  1. onPageScrollStateChanged:在页面滑动状态变化时触发
  2. onPageScrolled:在页面滑动过程中触发
  3. onPageSelected:在选中页面时,即滑动结束后触发
  • getCount:获取页面项的个数
  • isViewFromObject:判断当前视图是否来自指定对象,返回view == object即可
  • instantiateItem:实例化指定位置的页面,并将其添加到容器中
  • destroyItem:从容器中销毁指定位置的页面
  • getPageTitle:获得指定页面的标题文本,有搭配翻页标签栏时才要实现该方法

五.数据存储

1.SharedPreferences

SharedPreferences是Android的一个轻量级存储工具,采用的存储结构Key-Vaue的键值对方式,存储在XML规范的配置文件中(路径:/data/data/应用包名/shared_perfs/文件名.xml)

运用场合:

  • 简单且孤立的数据
  • 文本形式的数据
  • 需要持久化存储的数据
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et_name = findViewById(R.id.et_name);
        et_age = findViewById(R.id.et_age);
        et_height = findViewById(R.id.et_age);
        preferences = getPreferenceScreen("config", Context.MODE_PRIVATE);
        reload();

        findViewById(R.id.btn_save).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String name = et_name.getText().toString();
                String age = et_age.getText().toString();
                String height = et_height.getText().toString();
				
                //储存数据
                SharedPreferences.Editor editor = preferences.edit();
                editor.putString("name", name);
                editor.putInt("age", Integer.parseInt(age));
                editor.putFloat("height", parseFloat(height));
                editor.commit();

            }
        });

    }
	//获取数据
    private void reload() {
        String name = preferences.getString("name", null);
        if (name != null) {
            et_name.setText(name);
        }
        int age = preferences.getInt("age", 0);
        if (age != 0) {
            et_age.setText(String.valueOf(age));
        }
        float height = preferences.getFloat("height", 0f);
        if (height != 0f) {
            et_height.setText(String.valueOf(height));
        }
    }
}

2.SQLite

SQLiteDatabase

在Java代码中操作SQLite需要专门的工具类,SQLiteDatabase是Android提供的SQLite数据库管理器

管理类

openOrCreateDatabase:打开指定路径的数据库,不存在则创建

deleteDatabase:删除指定路径的数据库

isOpen:判断数据库是否打开

close:关闭数据库

getVersion:获取数据库的版本号

setVersion:设置数据库的版本号

事务类:

beginTransaction:开始事务

setTransactionSuccessful:设置事务的成功标志

endTransaction:结束事务

数据处理类:

execSQL:执行拼接好的SQL控制语句

delete:删除符合条件的记录

update:更新符合条件的记录

insert:插入一条记录

query:执行查询操作,返回结果集的游标

rawQuery:执行拼接好的SQL查询语句,返回结果集的游标

SQLiteOpenHelper

SQLiteOpenHelper是Android提供的数据库辅助工具,用于指导开发者进行SQLite的合理使用

读写本地图片

Android的位图工具是Bitmap,app读写Bitmap可以使用性能更好的BufferedOutputStream和BufferedInputStream。

Android还提供了BitmapFactory工具用于读取各种来源图片方法:

decodeResource:该方法可从资源文件中读取图片信息

decodeFile:该方法可将指定路径的图片读取到Bitmap对象

decodeStream:该方法从输入流中读取位图数据

六.Application

Application是Android的一大组件,在app运行过程中有且仅有一个Application对象贯穿整个生命周期

Application类的方法说明
onCreate()在Application创建的时候调用,一般用于初始化,如全局的对象,环境的配置等
onConfigurationChanged(Configuration newConfig)重写此方法可以监听APP一些配置信息的改变事件
onLowMemory()重写此方法可以监听Android系统整体内存较低时候的事件
onTerminate()在程序结束的时候会调用。但这个方法在Android产品机是不会调用的

七.ContentProvider

ContentProvider是Android的一大组件,为app存取内部数据提供统一的外部接口,让不同的应用之间可以共享数据

动态申请权限:

  1. 检查App是否开启了指定权限

    调用ContextCompat的checkSelfPermission方法

  2. 请求系统弹窗,以便用户选择是否开启权限

    调用ActivityCompati的requestPermissions?方法,即可命令系统自动弹出权限申请窗口

  3. 判断用户的权限选择结果

    重写活动页面的权限请求回调方法onRequestPermissionsResult,在该方法内部处理用户的权限选择结果

八.Fragment

传统的Activity并不能很好的处理大屏问题,所以就出现了Fragment,能够划分区域的展示内容,且有属于自己的独立可操作空间

静态注册在布局文件中直接指定Fragment,而动态注册直接在代码中才动态添加Fragment

请添加图片描述

方法说明
onAttach()Fragment和Activity相关联时调用。可以通过该方法获取Activity引用,还可以通过getArguments()获取参数
onCreate()Fragment被创建时调用
onCreateView()创建Fragment的布局
onActivityCreated()当Activity完成onCreate()时调用
onStart()当Fragment可见时调用
onResume()当Fragment可见且可交互时调用
onPause()当Fragment不可交互但可见时调用
onStop()当Fragment不可见时调用
onDestroyView()当Fragment的UI从视图结构中移除时调用
onDestroy()销毁Fragment时调用
onDetach()当Fragment和Activity解除关联时调用

这是我写的笔记,不是很全,还望谅解哈!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/130151.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

fpga实操训练(硬件乘法器)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 fpga上面的资源一般分成lut、pin、dff、dsp、pll。至于rom、ram、fifo&#xff0c;一般也是基于dff和lut来创建的&#xff0c;之前我们也讨论过。今…

ABAP 之ALV展示及下钻弹窗数据页面

序 HELLO, 这里是百里一个学习中的ABAPER,这里记录工作学习中遇到的bug,知识内容等内容.今天讲的是在工作中经常会使用的数据下钻,通过跳出小界面的方式展示关联数据.今天结合工作经验这里做下技术总结. 下钻简介 在ALV报表展示中.会出现关键字段下钻,展示某个界面或者系统自…

C语言基础--操作符详解

文章目录一、操作符1. 算数操作符2. 移位操作符&#xff08;1&#xff09;右移操作符举例补充&#xff08;2&#xff09;左移操作符举例分析&#xff08;3&#xff09;警告3.位操作符&#xff08;1&#xff09;按位与&#xff08;2&#xff09;按位或&#xff08;3&#xff09;…

小程序之后台交互--个人中心

目录一、微信登录流程简介二、微信用户信息获取1、index.js2、index.wxml三、微信登录流程代码详解1、后台准备①导入微信小程序SDK②application.yml③WxProperties④WxConfig⑤WxAuthController1、登录-小程序①login.js②user.js③util.js四、emoji的存储1、修改配置文件my.…

ArcGIS基础实验操作100例--实验24提取栅格独立格网面

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 基础编辑篇--实验24 提取栅格独立格网面 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;…

VMware 中 克隆多台虚拟机 快速创建虚拟机集群

我们在实际开发中可能会涉及到多台虚拟机&#xff0c;所以我们这里就模仿企业的方式进行多台虚拟机的操作方法&#xff1a; 我们现在就来学习一下如何用一台已有的虚拟机克隆出多台虚拟机。 我们第一步先来进行虚拟机的克隆&#xff1a; 我们现在就有了3太虚拟机了。 启动第一…

excel超链接应用:快速生成目录的几个方法-下

在上篇文章中&#xff0c;我们说到了基本的制作目录的方法&#xff0c;以及用宏表函数和超链接函数制作目录、用快捷键CTRLF制作目录的方法。今天我们要分享的另外三种方法&#xff0c;保证小伙伴们闻所未闻见所未见&#xff0c;一个公式都不用&#xff0c;就能完成目录的制作&…

镜头分辨率的计算和理解

镜头分辨力 计算和理解 1、镜头分辨率 镜头的分辨率是指在成像平面上 1 毫米间距内能分辨开的黑白相间的线条对数&#xff0c;单位是“线对/毫米”&#xff08; lp/mm&#xff0c;line-pairs/mm &#xff09; 最小能分辨的尺寸是线对数的2倍倒数。 例如&#xff1a;镜头分辨率…

Spark 3.0 - 16.ML SVD 奇异值分解理论与实战

目录 一.引言 二.奇异值分解理论 1.行矩阵 RowMatrix 2.奇异值分解算法 三.奇异值分解实战 1.构建 RowMatrix 2.奇异值分解 SVD 四.总结 一.引言 奇异值分解是矩阵分解计算的一种常用方法&#xff0c;矩阵分解主要用于数据降维&#xff0c;通过将高维的数据映射到低维…

Navicat 16 中改进了的协同合作

几年前&#xff0c;当 Navicat 团队加入 Navicat Cloud 协同合作工具时&#xff0c;几乎没有人知道一个全球大流行的疫情会使协同合作成为大多数组织的重要组成部分&#xff0c;尤其是那些提供任何信息技术&#xff08;IT&#xff09;相关服务的组织。在 2021 年的最后几天&…

ArcGIS基础实验操作100例--实验26创建多分辨率DEM

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 基础编辑篇--实验26 创建多分辨率DEM 目录 一、实验背景 二、实验数据 三、实验步骤 方法一&#xff…

嵌入式C语言设计模式 --- 关于工厂模式的总结

前面三篇关于工厂模式的文章,主要介绍了三种工厂模式,分别是:简单工厂模式、工厂方法模式、抽象工厂模式。 关于这三种工厂模式,都各有利弊,应该根据不同的业务开发场景进行选择使用。 图片来源:网络 简单工厂模式 是最容易理解的一种设计模式,简单工厂模式不属于23种…

Spring循环依赖探究

1. 前言 Spring在较新版本中已经默认不允许bean之间发生「循环依赖」了&#xff0c;如果检测到循环依赖&#xff0c;容器启动时将会报错&#xff0c;此时可以通过配置来允许循环依赖。 spring.main.allow-circular-referencestrue什么是循环依赖&#xff1f; 循环依赖也叫循环…

【Python百日进阶-数据分析】Day143 - plotly箱线图:px.box()实例

文章目录四、实例4.1 plotly.express箱线图4.1.1 基本箱线图4.1.2 为 x的每个值绘制一个箱线图4.1.3 显示基础数据4.1.4 选择计算四分位数的算法4.1.5 四分位数算法之间的区别4.1.6 风格箱线图4.1.7 Dash中的箱线图四、实例 箱线图是变量通过其四分位数分布的统计表示。盒子的…

并发编程——3.共享模型之管程

目录3.共享模型之管程3.1.共享带来的问题3.1.1.Java中的体现3.1.2.问题分析3.1.3.临界区 (Critical Section)3.1.4.竞态条件 (Race Condition)3.2.synchronized 解决方案3.3.方法上的 synchronized3.4.变量的线程安全分析3.4.1.成员变量和静态变量是否线程安全&#xff1f;3.4.…

SpringBoot+VUE前后端分离项目学习笔记 - 【07 SpringBoot实现增删改查】

增删改查代码编写 UserController.java package com.zj.demo.controller;import com.zj.demo.entity.User; import com.zj.demo.mapper.UserMapper; import com.zj.demo.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.sp…

CVPR 2017|Deep Feature Flow for Video Recognition论文复现(pytorch版)

&#x1f3c6;引言&#xff1a;深度卷积神经网络在图像识别任务中取得了巨大的成功。然而&#xff0c;将最先进的图像识别网络转移到视频上并非易事&#xff0c;因为每帧评估速度太慢且负担不起。我们提出了一种快速准确的视频识别框架——深度特征流DFF。它只在稀疏关键帧上运…

数据结构与算法_五大算法之--回溯算法

1 回溯算法 回溯算法具有通用性&#xff0c;但是算法的效率不高&#xff0c;通常可以通过剪枝等操作提高算法的效率。 算法思想&#xff1a; 在包含问题的所有解空间树中&#xff0c;按照深度优先搜索的策略&#xff0c;从根节点出发&#xff0c;深度搜索解空间树。当搜索到某…

APSIM作物生长模型学习

由于研究需要&#xff0c;将对APSIM模型使用进行一定学习&#xff0c;特做此笔记&#xff0c;也供该模型的初学者共同进步。 首先是版本选择&#xff0c;这个模型发展较长&#xff0c;有经典的classic版本和次世代版本&#xff0c;而经过实际验证&#xff0c;次世代版本和经典版…

RHCSA 第六天笔记

网络配置 1&#xff0c;ip 命令 ip a 2,修改配置文件&#xff08;不推荐&#xff09; 3&#xff0c;nmcli命令 4&#xff0c;nmtui命令 5&#xff0c;cockpit 网络接口是指网络中的计算机或网络设备与其他设备实现通讯的进出口。这里&#xff0c;主要是指计算机的网络接口即网…