Android学习笔记1

简介: Android学习笔记1

Android 发展历程


Android 是一个基于Linux 内核的自由及开发源代码的操作系统


2005 年 8 月由Google收购注资

2007年11月发布Android的源代码

2008 年10月第一部Android智能手机发布,HTC公司制造

2011年 Android 位于世界第一

2013 Android 系统数量达到10亿台

App运行日志


SDK :软件开发工具包,将App源码编译为可执行的App应用


日志级别


Log.e:表示错误信息,比如可能导致程序崩溃的异常

Log.w:表示警告信息

Log.i:表示一般消息

Log.d:表示调试(debug)信息,可把程序运行时的变量值打印出来,方便跟踪调试

Log.v:表示冗余信息

Android App 基础

XML:布局文件

  • id:控件编号
  • layout_width:控件宽度
  • layout_height:控件高度
  • text:文本

内置了SQlite 数据库



工程结构

项目:一个项目下可以有多个模块

模块:编译运行App

  1. app(app模块)
  2. Gradle Scripts


工程目录

gradle :自动化构建工具,依赖、打包、部署、发布、各种渠道的差异管理工作

build.gradle


  1. 工程级别
  2. 模块级别 build.gradle (Module: Demo1.app)
// 插件的包
plugins {
    id 'com.android.application'
}
android {
    // 指定SDk版本号 33 就是Android API 33.0编译
    compileSdk 33
    defaultConfig {
        //app包名
        applicationId "com.example.demo1"
        //app运行的最小SDK版本,28最少要到9.0以上运行
        minSdk 28
        //目标设备的版本号,最希望app运行在哪个版本上
        targetSdk 33
        //指定app的应用版本号
        versionCode 1
        //应用版本名称
        versionName "1.0"
        //单元测试
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
//app的依赖信息
dependencies {
    //appcompat兼容库 版本号
    implementation 'androidx.appcompat:appcompat:1.3.0'
    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    //单元测试编译的junit版本号
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}



AndroidManifest.xml 清单文件

  • 每个应用必须具有,文件名一模一样
  • APP的配置信息
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.demo1"> <!--包名-->
    <application
        android:allowBackup="true"  是否备份
        android:icon="@mipmap/ic_launcher"  指定显示的图标
        android:label="@string/app_name" 指定显示的名称
        android:roundIcon="@mipmap/ic_launcher_round" app的圆角图标
        android:supportsRtl="true" 是否支持阿拉伯语言 / 波斯语 ,从左往右的文字排序
        android:theme="@style/Theme.Demo1">  <!--显示的风格,材料设计-->
        <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>


  • activity 是一个应用程序组件,提供一个屏幕,交互完成某个任务
  • 活动页面的注册声明

设计规范

界面显示与逻辑处理


利用 XML (activity_main.xml)标记描绘应用界面,实用Java(MainActivity.class)代码写程序逻辑


创建完整页面:


layout目录下创建XML文件

创建与 XML 文件队友的java代码

在AndroidManifest.xml 中注册页面配置


活动页面

简单的页面调整

  1. 布局文件,两个布局文件 ,从 2 跳到 1
    文本内容可以在string.xml 文件中设置,在布局文件中调用链接过来就可以完成
<resources>
    <string name="app_name">Demo1</string>
    <string name="demo02">Android DEV</string>
</resources>


创建Java代码,在1 的Java代码中设置跳转代码

Button button = findViewById(R.id.dragPage);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // 页面跳转
        Intent intent = new Intent();
        // 结合上下文
        intent.setClass(MainActivity.this,MainActivity2.class);
        startActivity(intent);
    }
});

注册页面 AndroidManifest.xml 添加一个activity标签

<activity android:name=".MainActivity2" />



简单控件

文本显示

设置文本内容

  1. XML 布局文件中:android :text 设置文本
<TextView
    android:id="@+id/view1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello"/>



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

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //设置掌控的页面
    setContentView(R.layout.activity_text_view);
    TextView view1 = findViewById(R.id.view1);
    view1.setText(R.string.hello);
}


两种方式中都尽量不要直接写文本内容

可以在 string.xml 文件中定义一个文本常量,再进行调用

<resources>
    <string name="app_name">SimpleControl</string>
    <string name="hello">你好世界未来与你相伴!!!</string>
</resources>


设置文本大小

  1. XML 布局文件中:android :textSize 设置文本大小
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"> 垂直布局
    <TextView
        android:id="@+id/tv_px"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello"
        android:textSize="30px"/>
    <TextView
        android:id="@+id/tv_dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello"
        android:textSize="30dp"/>
    <TextView
        android:id="@+id/tv_sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello"
        android:textSize="30sp"/>
</LinearLayout>



Java代码中调用文本视图对象的 setTextSize 方法设置文本大小

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_text_size);
    TextView s1 = findViewById(R.id.tv_dp);
    s1.setTextSize(50);
}


单位


px:手机屏幕最小显示单位,与设备的显示屏有关

图像元素,单个像素并不固定

dp(Dip):与设备无关的显示单位,只与屏幕的尺寸有关

长度单位

dp的UI 效果只在相同尺寸的屏幕上相同,如果屏幕尺寸差异过大,需要重新组dp适配

Dpi:像素密度

Density(密度):每平方英寸(2.542 cm2)的像素点数量

sp:专门设置字体大小,系统设置中可以调整字体大小

设置文本颜色

  1. XML 布局文件中:android :textSize 设置文本颜色
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <TextView
        android:id="@+id/tv_color1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello"
        android:textColor="@color/black"
        android:background="@color/purple_500"
        android:textSize="32sp" />
    <TextView
        android:id="@+id/tv_color2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello"
        android:textColor="@color/green"
        android:background="@color/gray"
        android:textSize="30dp" />
</LinearLayout>



Java代码中调用文本视图对象的 setTextColor 方法设置文本颜色

import android.annotation.SuppressLint;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.TextView;
public class TextColorActivity extends AppCompatActivity {
    @SuppressLint("ResourceAsColor")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_text_color);
        // 从布局文件获取id
        TextView viewColor1 = findViewById(R.id.tv_color1);
        // 设置系统自带的颜色
        viewColor1.setTextColor(Color.RED);
        //设置文本背景颜色
        viewColor1.setBackgroundColor(R.color.gray);
        //设置文本,是系统的颜色
        viewColor1.setBackgroundColor(Color.GREEN);
    }
}



颜色常量

<resources>
    <color name="purple_200">#FFBB86FC</color>
    <color name="purple_500">#FF6200EE</color>
    <color name="purple_700">#FF3700B3</color>
    <color name="teal_200">#FF03DAC5</color>
    <color name="teal_700">#FF018786</color>
    <color name="black">#FF000000</color>
    <color name="white">#FFFFFFFF</color>
    <color name="green">#058531</color>
    <color name="gray">#666666</color>
</resources>


视图基础

视图的宽高


布局文件中设置宽:android:layout_with 高:android:layout_height

取值

  • match_parent:表示与上级视图保持一致 (填充式)
  • wrap_content:表示与内容自适应 (文本内容是多少就多大)
  • 以dp为单位尺寸
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/black"
        android:text="@string/hello"
        android:textColor="@color/green"
        android:textSize="20sp" />
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/gray"
        android:text="@string/hello"
        android:textColor="@color/green"
        android:textSize="20sp" />
    <TextView
        android:layout_width="250dp"
        android:layout_height="50dp"
        android:background="@color/white"
        android:text="@string/hello"
        android:textColor="@color/green"
        android:textSize="20sp" />
</LinearLayout>



  1. 效果图:



Java代码设置宽高,确保 xml 布局文件中的 wrap_content


调用控件对象的 getLayoutParams() 方法,获取该控件的布局参数。

布局参数的 width 属性表示宽度,height 属性表示高度,修改这两个属性值。

调用控件对象的 setLayoutParams 方法,填入修改后的布局参数使之生效。

public class ViewBorderActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_border);
        TextView tv_wh = findViewById(R.id.wh);
        //获取布局参数
        ViewGroup.LayoutParams params = tv_wh.getLayoutParams();
        //修改布局参数中的宽高,默认dp,需要把dp转换为px数值
        params.width = Util.dip2px(this,300);
        //设置布局参数
        tv_wh.setLayoutParams(params);
    }
}


Util.java

public class Util {
    // 根据手机分辨率 从 dp 转换 为px像素 ,通过上下文
    public static int dip2px(Context context, float dpValue) {
        // 获取当前手机的像素密度(1dp = ?px)
        float scale = context.getResources().getDisplayMetrics().density;
        //四舍五入
        return (int) (dpValue * scale + 0.5f);
    }
}


设置视图间距

视图依赖继承关系


1.png

间距fang’shi


采用 layout_margin(外间距)属性,它指定了当前视图与周围平级视图之间的距离。


layout_margin、layout_marginLeft、layout_marginTop、layout_marginRight、layout_marginBottom

采用 padding(内间距)属性,它指定了当前视图与内部下级视图之间的距离。


padding、paddingLeft、paddingTop、 paddingRight、paddingBottom

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="300dp"
    android:background="#00AAF0"
    android:orientation="vertical">
    <!--中间层布局背景颜色为黄色-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="30dp"
        android:background="@color/yellow"
        android:padding="30dp"> 内层的视图与这个视图的间距
        <!--最内层背景颜色-->
        <View
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/red">
        </View>
    </LinearLayout>
</LinearLayout>


8af3374b110f96de7aaf547b5d7f23d0.png


设置视图的对齐方式

对齐方式


采用 layout_gravity 属性,它指定了当前视图相对于上级视图的对齐方式。

采用 gravity 属性,它指定了下级视图相对于当前视图的对齐方式。

两者的取值:


left、top、right、bottom

left | top :靠左靠上(左上角)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="300dp"
    android:background="@color/red"
    android:orientation="horizontal">
    <!--第一个子布局背景为黄色色,它在上级视图中朝下对齐,它的下级视图则靠左下对齐-->
    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="200dp"
        android:layout_gravity="bottom"
        android:layout_margin="15dp"
        android:layout_weight="1"
        android:background="@color/yellow"
        android:gravity="left|bottom"
        android:padding="10dp">
        <View
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:background="@color/teal_200">
        </View>
    </LinearLayout>
    <!--第一个子布局背景为黄色色,它在上级视图中朝上对齐,它的下级视图则靠右上下对齐-->
    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="200dp"
        android:layout_gravity="top"
        android:layout_margin="15dp"
        android:layout_weight="1"
        android:background="@color/yellow"
        android:gravity="right|top"  在外层设置内层的位置
        android:padding="10dp">
        <View
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:background="@color/teal_200">
        </View>
    </LinearLayout>
</LinearLayout>

459d13780c2372ee28cfd9beec6ee813.png


常用布局

线性布局 LinearLayout


排列方式

  1. orientation属性值为 horizontal 时,内部视图在水平方向从左往右排列。
  2. orientation属性值为 vertical 时,内部视图在垂直方向从上往下排列。

不指定orientation 的属性,默认为水平布局


权重布局 layout_weight


指的是线性布局的下级视图各自拥有多大比例的宽高

  • 不是在LinearLayout节点设置,而在线性布局的直接下级视图设置,该下级视图占据的宽高比例
  • layout_width = 0dp :表示水平方向宽高比例
  • layout_height =0dp:表示垂直方向的宽高比例
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <!--水平布局-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:background="@color/green">
        </TextView>
        <TextView
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:background="@color/green">
        </TextView>
    </LinearLayout>
    <!--垂直布局-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <TextView
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:background="@color/red">
        </TextView>
        <TextView
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:background="@color/red">
        </TextView>
    </LinearLayout>
    <!--水平权重布局-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <!--1/6-->
        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:layout_weight="1"
            android:background="@color/yellow">
        </TextView>
        <!--5/6-->
        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:layout_weight="5"
            android:background="@color/yellow">
        </TextView>
    </LinearLayout>
    <!--垂直权重布局-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <TextView
            android:layout_width="200dp"
            android:layout_height="0dp"
            android:layout_margin="5dp"
            android:layout_weight="1"
            android:background="@color/red">
        </TextView>
        <TextView
            android:layout_width="200dp"
            android:layout_height="0dp"
            android:layout_margin="5dp"
            android:layout_weight="1"
            android:background="@color/red">
        </TextView>
    </LinearLayout>
</LinearLayout>

效果图

相对布局RelativeLayout


  • 相对布局的下级视图位置有其他视图决定,确定下级视图的参照物
  1. 与该视图自身平级的视图
  2. 该视图的上级视图(也就是RelativeLayout)
  • 默认在 RelativeLayout 内部左上角
    位置:

a52d912995da3a6d032f3ab8ca9a1e87.png

<TextView
    android:id="@+id/parent1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@color/blue"
    android:text="上级位置"
    android:textColor="@color/black"
    android:textSize="15sp" />
<TextView
    android:id="@+id/Re_center"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:background="@color/gray"
    android:text="在上级中间"
    android:textColor="@color/black"
    android:textSize="15sp" />
<TextView
    android:id="@+id/parent1_right"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:background="@color/green"
    android:text="我在上级的右边"
    android:textColor="@color/black"
    android:textSize="15sp" />
<TextView
    android:id="@+id/parent_bottom"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:background="@color/green"
    android:text="在上级下面"
    android:textColor="@color/black"
    android:textSize="15sp" />
<TextView
    android:id="@+id/parent_bottom_center"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerInParent="true"
    android:background="@color/yellow"
    android:text="在上级中间下面"
    android:textColor="@color/black"
    android:textSize="15sp" />
<TextView
    android:id="@+id/bottom_right"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentBottom="true"
    android:layout_centerInParent="true"
    android:background="@color/green"
    android:text="在上级右下角"
    android:textColor="@color/black"
    android:textSize="15sp" />
<TextView
    android:id="@+id/center_left"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignTop="@id/Re_center"
    android:layout_toLeftOf="@id/Re_center"
    android:background="@color/red"
    android:text="在中间左边"
    android:textColor="@color/black"
    android:textSize="15sp" />
<TextView
    android:id="@+id/center_right"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignTop="@id/Re_center"
    android:layout_toRightOf="@id/Re_center"
    android:background="@color/red"
    android:text="在中间右边"
    android:textColor="@color/black"
    android:textSize="15sp" />
<TextView
    android:id="@+id/center_top"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@id/Re_center"
    android:layout_alignLeft="@id/Re_center"
    android:background="@color/red"
    android:text="在中间上边"
    android:textColor="@color/black"
    android:textSize="15sp" />
<TextView
    android:id="@+id/center_bottom"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/Re_center"
    android:layout_alignRight="@id/Re_center"
    android:background="@color/red"
    android:text="在中间下边"
    android:textColor="@color/black"
    android:textSize="15sp" />
<TextView
    android:id="@+id/parent_vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:background="@color/yellow"
    android:text="上级垂直中间"
    android:textColor="@color/black"
    android:textSize="15sp" />
<TextView
    android:id="@+id/parent_horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:background="@color/yellow"
    android:text="在上级中间"
    android:textColor="@color/black"
    android:textSize="15sp" />
<TextView
    android:id="@+id/right_vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignRight="@id/parent1_right"
    android:layout_centerVertical="true"
    android:background="@color/yellow"
    android:text="右边垂直中间"
    android:textColor="@color/black"
    android:textSize="15sp" />


网格布局 GridLayout


  • 网格布局多行多列的表格布局
  • 默认从左往右、从上往下
  • columnCount 属性:网格列数,每行能放多少个视图
  • rowCount属性:网格行数,每列能放多少个视图

设置一个两行两列的

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:columnCount="2"
    android:rowCount="2">
    <TextView
        android:layout_width="0dp" 列的对齐权重
        android:layout_height="wrap_content"
        android:layout_columnWeight="1"  列的权重
        android:layout_margin="2dp"
        android:background="@color/red"
        android:gravity="center"
        android:text="红色"
        android:textColor="@color/black" />
    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_columnWeight="1"
        android:layout_margin="2dp"
        android:background="@color/green"
        android:gravity="center"
        android:text="绿色" />
    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_columnWeight="1"
        android:layout_margin="2dp"
        android:background="@color/blue"
        android:gravity="center"
        android:text="蓝色" />
    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_columnWeight="1"
        android:layout_margin="2dp"
        android:background="@color/purple_200"
        android:gravity="center"
        android:text="紫色" />
</GridLayout>


497c1547f48d60409090c37974bcbb6e.png


滚动布局 ScrollLayout

ScrollView :

垂直方向滚动视图

layout_width = match_content

android:layout_height=“wrap_content”

HorizontalScrollView:

水平方向滚动视图

layout_width = “wrap_content”

android:layout_height = match_content

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <!--水平方向滑动-->
    <HorizontalScrollView
        android:layout_width="wrap_content"
        android:layout_height="200dp">
        <!--水平线性布局,设置两个子视图-->
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent">
            <View
                android:layout_width="500dp"
                android:layout_height="match_parent"
                android:background="@color/green" />
            <View
                android:layout_width="50dp"
                android:layout_height="match_parent"
                android:background="@color/yellow"
                />
        </LinearLayout>
    </HorizontalScrollView>
    <!--垂直方向滑动-->
    <ScrollView
        android:layout_width="250dp"
        android:layout_height="wrap_content">
        <!--水平线性布局,设置两个子视图-->
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:orientation="vertical">
            <View
                android:layout_width="match_parent"
                android:layout_height="500dp"
                android:background="@color/blue"
                />
            <View
                android:layout_width="match_parent"
                android:layout_height="500dp"
                android:background="@color/purple_200"
                />
        </LinearLayout>
    </ScrollView>
</LinearLayout>
目录
相关文章
|
7月前
|
架构师 网络协议 算法
Android高级架构师整理面试经历发现?(大厂面经+学习笔记(1)
Android高级架构师整理面试经历发现?(大厂面经+学习笔记(1)
|
7月前
|
消息中间件 缓存 架构师
2024年阿里Android高级面试题分享,附学习笔记+面试整理+进阶书籍
2024年阿里Android高级面试题分享,附学习笔记+面试整理+进阶书籍
|
缓存 安全 数据库
Android学习笔记4
Android学习笔记4
62 0
|
XML 数据库 数据安全/隐私保护
Android学习笔记3
Android学习笔记3
165 0
|
XML Java Android开发
Android学习笔记2
Android学习笔记2
77 0
|
存储 Java API
Android逆向 | 基础篇 - Java 学习笔记03
Android逆向 | 基础篇 - Java 学习笔记03
|
Java 编译器 Android开发
Android逆向 | 基础篇 - Java 学习笔记02
Android逆向 | 基础篇 - Java 学习笔记02
|
Java 编译器 Android开发
Android逆向 | 基础篇 - Java 学习笔记01
Android逆向 | 基础篇 - Java 学习笔记01
|
Java 开发工具 Android开发
Android中的Binder学习笔记
Android中的Binder学习笔记
Android中的Binder学习笔记
|
JSON 前端开发 Java
Java WEB 与 android | 学习笔记
快速学习 Java WEB 与 android。
106 0
Java WEB 与 android | 学习笔记