Android基础

Android学习博客

一、规范

(一)XML

Button长宽不得低于48dp,否则在高分辨率的设备中会很小。

48dp约为9mm

(二)使用统一标准字号

1
2
3
4
<TextView
          ...
          android:TextApperance="?android:textAppertanceLarge"
          />

(三)控件间距

marginpadding的大小建议以8dp为单位,以它的倍数来设置。

二、布局

(一)图片适配屏幕

scaleType属性:centercenterCrop

当图片大小大于屏幕时,center不会改变图片大小,直接居中显示;centerCrop会按比例缩小到屏幕尺寸,并居中显示。

当图片大小小于屏幕时,若ImageView的大小没有固定,两个参数均无效;当把ImageView的大小固定为超过屏幕尺寸时,center将居中显示,centerCrop将按比例放大图片,自适应到ImageView的大小居中显示。

固定ImageView的大小后:

(二)圆角布局

Drawable中创建xml文件,设置为控件的背景。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#FFFFFF"/>

    <!-- 边缘 -->
    <stroke android:width="3dp" android:color="#B1BCBE" />

    <!--  圆角半径  -->
    <corners android:radius="10dp"/>

    <!--  内边距  -->
    <padding android:left="0dp" android:top="0dp" android:right="0dp" android:bottom="0dp" />
</shape>

三、安卓四大组件

(一)Activity

一个Activity是一个单独的窗口/屏幕。

(二)Service

startService()可以由其他组件调用,该组件的生命周期结束后,Service依旧可以保持启动状态不受影响。用stopService()关闭。

BindService()Service与调用者的生命周期绑定在一起,即“不求同时生,必须同时死”。用unBindService()关闭。

(三)content provider

  • 需要在多个应用程序间共享数据时,才需要content provider。它将一个应用程序的指定数据集提供给其他应用程序。
  • Content Provider用于保存和获取数据,并使其对所有应用程序可见。这是不同应用程序间共享数据的唯一方式,因为android没有提供所有应用共同访问的公共存储区。

(四)broadcast receiver

  • 在AndroidManifest文件中进行配置的广播接收者(静态注册),会随系统的启动而一直处于活跃状态,只要接收到感兴趣的广播就会触发(即使程序未运行)。
  • 当发生电话呼入/数据网络可用等事件时,可通过广播接收器进行接收并做出响应。它没有用户界面。可以启动一个activityservice来响应它们收到的信息,或者用NotificationManager来通知用户。

(五)android中的任务(activity栈)

  • 栈顶是当前运行的Activity,新的在栈顶入栈,返回时出栈。
  • 栈中的Activity永远不会重排,只会压入或弹出。

(六)Activity携带数据跳转

Activity A跳转到Activity B

Activity A

1
2
3
4
5
// 从A中打开B
var intent = Intent() 
intent.putExtra("data","hello")
intent.setClass(this, B::class.java)  //(当前Activity,目标Activity)  
startActivityForResult(intent, 1)  // 1是请求的标识requestCode
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
/**
* Activity A中收取从B返回得到的数据
* requestCode A请求的标识
* resultCode 从B返回的标识
* data 从B返回的数据
*/
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    // ...
}

Activity B

1
2
3
4
5
// 返回数据
var data = Intent()
data.putExtra("data", "回传数据")
setResult(2, data);  // 2是返回的标识resultCode
finish()

四、常用设计模式

(一) 观察者模式

使用LiveData/MutableLiveData和Observer进行数据观测:

  1. 在LiveData中放入需要被观测的数据
1
val data = LiveData<Int>()
  1. 创建Observer,表明该数据变化后要进行的操作
1
2
3
4
5
val myObserver = Observer<Int>{
    if(it == 1){
        // 一些被触发的操作
    }
}
  1. 观察
1
data.observe(this,loginObserver)
  1. 数据改变
1
data.postValue(1)

这样,当data发生改变时就会触发myObserver进行一些操作。

五、常用组件

参考博客:https://blog.csdn.net/mq2553299/article/details/80445952

官方教程:https://developer.android.com/guide/navigation


最后更新: July 16, 2022 10:57:39