开始使用 Navigation

开始使用 Navigation

[TOC]

由于官网暂时没有中文版本,所以在这里根据内容抽空做了一些中文的版本.

开始使用

依赖引入

1
2
3
4
5
6
dependencies {
def nav_version = "2.1.0-alpha05"
implementation "androidx.navigation:navigation-fragment:$nav_version" // For Kotlin use navigation-fragment-ktx
implementation "androidx.navigation:navigation-ui:$nav_version" // For Kotlin use navigation-ui-ktx
}

最新版本清关注官方版本 https://developer.android.google.cn/jetpack/androidx/releases/navigation#declaring_dependencies

创建一个导航图

Navigation 发生在 app 内目的地之间的跳转.这些目的地通过action 进行连接.

Read More

Navigation 指南

Navigation 指南

[TOC]

由于官网暂时没有中文版本,所以在这里根据内容抽空做了一些中文的版本.

Navigation 是用来管理你的app中内容的跳转,返回等操作.它主要包含了以下三个部分:

  • Navigation graph : 一个 xml 资源包含了所有的导航相关的信息. 这些信息包含了你app里所有独立的内容区域,也就是 destinations .
Read More

使用 Lint 来获取性能贴士

使用 Lint 来获取性能贴士

[TOC]

背景

当我们在编写 Android 代码的时候如何能够快速优化我们的代码呢?

Android 为我们提供了一个 Lint 的工具,它可以静态检验出我们代码里的很多问题.风格,内存泄露,过度绘制等等…

使用方法

在 Android studio 的菜单中选择 Analyse -> Inspect Code 就可以进入检查页面了.

他还可以在设置里的 Editor -> Inspections 中设置提示的等级,以及自定义检查项,可以说是非常好用的功能了.

Read More

自动版本号发布

自动版本号发布

[TOC]

背景

由于手动升级版本号等操作容易被遗忘和操作错误,,所以要找到一个可以自动管理版本号的方式.

内容

版本控制主要有这么两个属性:

  • android:versionCode : 整数,是内部版本号,用于判断一个版本是否比另一个版本新,用户并不需要看到。通常是跟随着发布版本增加该code。如果安装的app 的 versionCode 比当前该 app 的 versionCode 小的话会导致安装失败,提示无法降级安装.

Read More

LRU 缓存的魔力

LRU 缓存的魔力

场景

假设这么一个情况,当你需要多次展示同一个图片的时候,如果你重复从硬盘中加载图片的话,那么会造成资源的浪费,甚至可能会OOM.

这个时候我们可以使用 cache 来避免这种情况,我们只从硬盘中加载一次到内存中,然后在需要的时候反复使用这个照片.

但是,当这个 cache 里的资源已经装满的时候,那么我们就必须移除cache里面的某些数据,来给要加入的数据腾出空间.

解决方案

在这种情况下,我们应该选择移除哪些资源才是最有优的呢?显而易见的,我们应该移除之后不会用到的资源,还有就是间隔最久才会用到的资源.这里有一个详细的最优算法如下:
$$
T = m * T_m + T_h + E
$$
其中:

T = 平均内存引用时间

Read More

APP 版本控制

版本管理是app的一个重要部分,他主要的用途有:

  • 让用户了解当前的版本信息,了解升级或者降级信息等
  • 不同的版本可能提供的服务和功能有所差别,版本信息可以给我们一个标志来识别当前版本可提供的服务和功能。

Read More

Android 相关错误及解决办法

目录

问题 : Unable to instantiate activity ComponentInfo{com.xxxx.xxxx/com.xxxx.xxxx.LoginActivity}

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.xxxx.xxxx/com.xxxx.xxxx.LoginActivity}:

Read More

Android 6.0的变化 (上)

随着一系列新的特性以及功能, Android 6.0 (API level 23)包含了很多的系统变化以及API行为的变化。本文着重介绍了一些你应该理解的和占用APP中重要部分的变化。

如果你之前已经在Android平台发布过APP,要知道这些平台上的变化将会影响你的APP。

目录

Read More

Android declare-styleable自定义属性

我们自己定义view,通常继承View,重写构造方法和onDraw等函数,然后具体实现自己定义的复杂view。但是继承这个自定义view的有的属性又各有不同,有的属性在原生属性中没有,这时候就可以使用自定义的属性来便捷的设置相应的属性。

1、在res/values/下新建一个attrs.xml文件。写入这三级标签。并填入相应属性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="myStyle">
<attr name="textSize" format="dimension" />
<attr name="backgroud" format="reference" />
<attr name="text" format="string|reference" />
<attr name="textColor" format="color" />
<attr name="yesOrNot" format="boolean" />
<attr name="number">
<enum name="one" value="0" />
<enum name="two" value="1" />
<enum name="leftToRight" value="2" />
<enum name="topToBottom" value="3" />
</attr>
</declare-styleable>
</resources>

2、建立一个自定义视图类,本次偷懒直接继承自textview。然后使用typedarray类来获取控件相应的属性并使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.TextView;
public class MyView extends TextView
{
public MyView(Context context, AttributeSet attrs)
{
super(context, attrs);
TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.myStyle);
float textSize = typedArray.getDimension(R.styleable.myStyle_textSize, 15);
Drawable back = typedArray.getDrawable(R.styleable.myStyle_backgroud);
String textString = typedArray.getString(R.styleable.myStyle_text);
int textColor = typedArray.getInt(R.styleable.myStyle_textColor, Color.BLACK);
boolean yesOrNot = typedArray.getBoolean(R.styleable.myStyle_yesOrNot, true);
int number = typedArray.getInt(R.styleable.myStyle_number, 0);
setTextSize(textSize);
setText(textString);
setBackgroundDrawable(back);
setTextColor(textColor);
}
}

Read More
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×