自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 【KOS学习】HTML 引入CSS

目录一、CSS 简介二、CSS 语法三、如何添加 CSS1、外部 CSS2、内部 CSS3、行内 CSS四、CSS 选择器1、CSS id 选择器2、CSS 类选择器3、CSS 元素选择器4、CSS 分组选择器五、CSS 属性1、背景属性2、CSS 边框3、CSS 布局 - display 属性一、CSS 简介CSS 是一种描述 HTML 文档样式的语言。CSS 指的是层叠样式表 (Cascading Style Sheets)CSS 描述了如何在屏幕、纸张或其他媒体上显示 HTML 元素CSS

2021-04-20 10:45:41 179

原创 【KOS学习】HTML

<!---->

2021-04-19 11:21:53 403 1

原创 【Android基础】EventBus

目录一、EventBus的三要素1、Event2、Subscriber3、Publisher二、EventBus的四种ThreadMode1、POSTING(默认)2、MAIN3、BACKGROUND4、ASYNC三、EventBus的基本用法1、引入依赖2、自定义一个事件类3、在需要订阅事件的地方注册事件4、在需要发布的地方发布事件5、订阅者处理事件6、取消事件订阅一、EventBus的三要素1、Event事件,可以是任意类型2、Subscriber事件订阅者,接收特定的事件。在EventBu

2021-03-12 14:09:22 166

原创 【Android基础】ViewPager

目录一、简介二、ViewPager监听三、PagerAdapter1、介绍2、基本使用1)xml引用2)page布局3)创建适配器4)设置适配器四、FragmentPagerAdapter1、介绍2、基本使用1)xml引用2)page布局3)创建Fragment4)创建适配器5)设置适配器一、简介ViewPage是一个ViewGroup,可以包含很多的View,当手指在屏幕上左右滑动的时候,可以切换页面。ViewPager一般与Fragment结合使用比较方便。二、ViewPager监听viewPa

2021-03-10 09:44:59 138

原创 Android三大动画整理

目录一、帧动画(Frame Animation)1、简介2、实现1)xml实现(在res/drawable下创建)2)java实现二、补间动画(Tween Animation)1、简介2、分类3、属性4、透明度动画(AlphaAnimation)1)xml实现(在res/anim下创建)2)java实现5、缩放动画(ScaleAnimation)6、旋转动画(RotateAnimation)7、平移动画(TranslateAnimation)8、动画合集(AnimationSet)9、监听动画三、属性动画(

2021-02-01 13:57:27 150

原创 自定义View案例之类似于Viewpager的可左右滑动的布局

二、继承ViewGroup自定义ViewGroup的过程相对复杂一些,因为除了要对自身的大小和位置进行测量之外,还需要对子View的测量参数负责。案例实现一个类似于Viewpager的可左右滑动的布局。package com.example.customview.view;import android.content.Context;import android.util.AttributeSet;import android.view.MotionEvent;import android

2021-01-08 16:01:24 394

原创 自定义View案例之自定义组合控件

一、概念自定义组合控件就是多个控件组合起来成为一个新的控件二、实现方式

2021-01-05 10:02:54 110

原创 自定义View案例之无效的Text、自定义时钟

一、继承系统控件的自定义View1、概念继承控件的意思就是,我们并不需要自己重头去实现一个控件,只需要去继承一个现有的控件,然后在这个控件上增加一些新的功能,就可以形成一个自定义的控件了。这种自定义控件的特点就是不仅能够按照我们的需求加入相应的功能,还可以保留原生控件的所有功能。2、案例继承TextView实现一个无效的TextViewpublic class InvalidTextView extends TextView { private Paint paint; publ

2020-12-10 11:10:16 158

原创 自定义View介绍及自定义属性

一、构造函数共有4个,自定义View必须重写至少一个构造函数public class MyView extends View { /** * 在java代码里new的时候会用到 * @param context */ public MyView(Context context) { super(context); } /** * 在xml布局文件中使用时自动调用 * @param context

2020-11-26 14:12:15 314

原创 View的事件分发机制

一、分发的核心方法方法作用调用时刻dispatchTouchEvent()传递点击事件点击事件传递给当前VIew时,该方法被调用onInterceptTouchEvent()判断是否拦截某个事件(只存在于ViewGroup)ViewGroup的dispatchTouchEvent()的内部调用onTouchEvent()处理点击事件dispatchTouchEvent()的内部调用二、Activity的事件分发当一个点击事件发生时,事件最先传到Acti

2020-11-24 14:22:56 101

原创 View坐标系及滑动

看《Android进阶之光》所做笔记一、坐标系Android系统中有两种坐标系,分别为Android坐标系和View坐标系。1、Android坐标系左上角为(0,0),右为x轴正方向,下为y轴正方向2、View坐标系1)View自身的坐标通过如下方法获得View到其父控件(ViewGroup)的距离。getTop():View自身顶边到其父布局顶边的距离。getLeft():View自身左边到其父布局左边的距离。getRight():View自身右边到其父布局左边的距离。getB

2020-11-20 15:08:23 152

原创 【Android基础】Service

Service是Android四大组件之一。它主要用于在后台处理一些耗时的逻辑,或者去执行某些需要长期运行的任务。一、回调方法描述onCreate():在服务第一次被创建的时候调用。onStartCommand():每次服务启动的时候调用。onBind():当其他组件通过bindService()来绑定服务时,系统调用该方法。onUnbind():解除绑定的时候调用。onDestroy() :在服务被销毁的时候调用。二、startService创建服务类public class

2020-11-13 09:58:33 121

原创 【Android基础】JSON数据解析

一、常用的Json解析类1、JSONObjectJson对象有两个不同的取值方法:get×××(String name)在确定数值存在的条件下使用,否则当无法检索到相关Key时,将会抛出一个Exception信息。opt×××(String name)这个方法相对比较灵活,当无法获取所指定数值时,将会返回一个默认数值,并不会抛出异常。2、JSONArrayJson数组二、案例下载Json资源public class MyAsync extends AsyncTask<Str

2020-11-11 14:01:56 147

原创 【Android基础】XML数据解析

一、Xml格式数据简单理解<?xml version="1.0" encoding="utf-8"?><persons> <person id="1"> <name>zhangshan</name> <age>20</age> </person> <person id="2"> <name>lisi</nam

2020-11-10 15:12:34 147

原创 【Android基础】OkHttp

OkHttp是一个优秀的网络请求框架一、OkHttp进行Get请求1、使用步骤1)添加依赖dependencies { ...... implementation 'com.squareup.okhttp3:okhttp:4.9.0'}2)新建一个OkHttpClient实例OkHttpClient client = new OkHttpClient();3)构造Request对象 Request request = new Request.Builder

2020-11-06 11:08:48 114

原创 【Android基础】HttpURLConnection

一、HttpURLConnection1、使用步骤1)得到connection对象URL url = new URL("https://www.baidu.com");HttpURLConnection connection = (HttpURLConnection) url.openConnection();2)设置请求方式connection.setRequestMethod("GET");3)自由定制//设置连接超时毫秒数connection.setConnectTimeout(

2020-11-04 15:45:37 144

原创 【Android基础】多线程

一、为什么使用多线程Android中主线程不能执行耗时操作、不能访问网络等。这些动作会导致主线程被阻塞,容易引起ANR(Application no response)异常。所以必须把访问网络、耗时操作等放入到子线程中执行。Android的主线程(UI线程)是线程不安全的,所以当各个子线程获得数据之后不能直接修改UI,必须把修改UI的权利交给主线程。二、异步消息处理机制——HandlerAndroid中的异步消息处理主要由4个部分组成:Message、Handler、MessageQueue和Loo

2020-11-04 10:29:12 193

原创 【Android基础】I/O流

流类结构图一、分类1、按流向分输入流:从文件中读到程序中输出流:从程序中输出到文件中2、按数据传输单位分字节流:以字节为单位传输数据的流字符流:以字符为单位传输数据的流字节流字符流输入流InputStreamReader输出流OutputStreamWriter3、按功能分节点流:直接与数据源打交道的流。直接使用节点流读写不方便,为了更快的读写文件,才有了处理流。处理流:不直接与数据源打交道,与其他的"流"打交道。处理流的构造方法

2020-10-29 15:20:14 152

原创 Google CellBroadcast

一、背景Android R及以上版本,必须集成Google Cellbroadcast。CellBroadcast模块由两部分组成:CellBroadcastService此服务支持CellBroadcast SMS解码,无线紧急警报(WEA)3.0的地理围栏,消息重复检查以及向应用程序广播消息。CellBroadcastReceiver:默认系统应用程序,用于处理紧急/非紧急警报,并根据运营商和区域法规向最终用户显示信息。CellBroadcastService和CellBroadcas

2020-10-28 13:38:55 4416 3

原创 【Android基础】Notification

NotificationChannel是android8.0新增的特性,如果App的targetSDKVersion>=26,没有设置channel通知渠道的话,就会导致通知无法展示。一、使用步骤1、得到NotificationManager//需要一个NotificationManager来对通知进行管理NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVI

2020-10-20 13:34:38 88

原创 【Android基础】数据存储之ContentProvider

ContentProvider是Android的四大组件之一主要用于在不同的应用程序之间实现数据共享的功能一、相关介绍1、URI(通用资源标识符 Universal Resource Identifer)作用:代表数据操作的地址,每一个ContentProvider发布数据时都会有唯一的地址。它主要由两部分组成:authority和path。authority是用于对不同的应用程序做区分的,一般为了避免冲突,都会采用程序包名的方式来进行命名。path则是用于对同一应用程序中不同的表做区分的,通常都

2020-10-19 15:44:47 162

原创 【Android基础】数据存储之SQLite数据库

一、sql语句1、CREATE TABLE - 创建表CREATE TABLE 表名称(列名称1 数据类型,列名称2 数据类型,列名称3 数据类型,)数据类型描述NULL空值INTEGER整数BIGINT大整数REAL浮点数TEXT字符串BLOB大数据BOOLEAN布尔值2、DROP TABLE - 删除表//如果表books存在,则删除DROP TABLE IF EXISTS books3、ALTER T

2020-10-16 09:58:59 168

原创 【Android基础】数据存储之SharedPreferences

SharedPreferences是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。一、使用步骤1、得到SharedPreferences对象方法一:getSharedPreferences(String name, int mode)参数一:文件名称参数二:操作模式操作模式有两种:MODE_PRIVATE:默认操作模式。这种模式表示只有当前的应用程序才可以对当前这个SharedPreferences文件进行读写。MODE_

2020-10-15 13:15:04 120

原创 【Android基础】数据存储之File存储

一、I/O流1、分类1)按流向分:输入流:从数据源到程序中的流输出流:从程序到数据源的流2)按数据传输单位分:字节流:以字节为单位传输数据的流字符流:以字符为单位传输数据的流字节流字符流输入流InputStreamReader输出流OutputStreamWriter3)按功能分:节点流:直接与数据源打交道的流处理流:不直接与数据源打交道,与其他的"流"打交道常用节点流:InputStreamOutputStreamReade

2020-10-15 09:52:57 285

原创 【Android基础】BroadcastReceiver

一、定义BroadcastReceiver:直译是“广播接收者”,所以它的作用是用来接收发送过来的广播的。二、静态注册实例1、定义接收器继承BroadcastReceiver,onReceive()中只打印一个logpublic class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.d("M

2020-10-13 14:13:42 101

原创 【Android基础】Fragment

一、什么是FragmentFragment是一种可以嵌入在Activity中的 UI 片段,它能让程序更加合理和充分。地利用大屏幕的空间,因而在平板和目前的大屏手机上应用的非常广泛(只要屏幕大,都会用到Fragment)。一个碎片在一个活动中代表一个行为或用户界面的一部分。 你可以在一个单一的活动中组合使用多个碎片以建立一个多窗格的UI,并且可以在多个活动中重用一个碎片。你可以认为是一个拥有独立生命周期、能够独立接受输入事件、并且可以在活动运行时添加或移除的碎片作为一个活动的模块化部分(有点像一个你可

2020-10-12 15:09:57 131 1

原创 【Android基础】RecyclerView

ListView只能实现数据纵向滚动的效果,如果想实现横向滚动的话,ListView是做不到的。为此,Android提供了一个更强大的滚动控件——RecyclerView。它可以说是一个增强版的ListView。RecyclerView提供了三种布局方式:LinearLayoutManager(线性布局)、GridLayoutManager(网格布局)和StaggeredGridLayoutManager(瀑布流布局)。一、RecyclerView的基本用法(LinearLayoutManager)1

2020-09-30 14:10:25 307

原创 【Android基础】ListView

adapter.notifyDataSetChanged():该方法来通知ListView来实时更新显示。一、ListView常用属性android:divider=””列表之间绘制的颜色或者图片。一般开发中用于分隔表项。在实际开发过程中,如果你不想要列表之间的分割线,可以设置属性为@nullandroid:dividerHeight=""divider的高度。android:stackFromBottom=””在ListView和GridView中使用,使它们的内容从底部开始显示。默认是f

2020-09-30 09:22:32 204

原创 【Android基础】UI

一、UI布局1、线性布局(LinearLayout)属性描述android:orientation安排指定的方向。“horizontal”表示为一排,“vertical”表示一列。默认为horizontalandroid:gravity内部对齐(容器内全部子控件均遵循该对齐方式)android:layout_gravity外部对齐(针对某一个单独的子控件进行对齐,其他兄弟控件不受影响)android:layout_weight权重(比喻成体重,代表子控件在同

2020-09-29 15:03:04 113

原创 【Android基础】探究Activity

一、Activity的生命周期1、Activity的状态每个Activity在其生命周期中最多可能会有4种状态。1)运行状态当一个活动位于栈顶时,这时活动就处于运行状态。2)暂停状态当一个活动不再处于栈顶位置,但仍然可见时,这时活动就进入了暂停状态。3)停止状态当一个活动不再处于栈顶位置,并且完全不可见的时候,就进入了停止状态。4) 销毁状态当一个活动从返回栈中移除后就变成了销毁状态。2、Activity的生命周期示意图onCreate():在Activity第一次被创建的时候调

2020-09-29 14:19:21 229

原创 Android系统的特许权限白名单

一、什么是特权应用特权应用(Privileged Application 简称 priv-app)直观的讲就是位于系统priv-app目录下的应用。不同Android版本对priv-app定义的分区有所不同<=Android 8.1的版本,特权分区为/system。>=Android 9的版本,特权分区为/system, /product和/vendor。二、Android系统的特许权限Android系统的特许权限是指在frameworks/base/core/res/Andro

2020-09-25 13:48:15 4742

原创 Android框架模式——MVP

一、MVP介绍MVP(Model-View-Presenter)是MVC的演化版本。Model:主要提供数据的存取功能。Presenter需要通过Model层来存储、获取数据。View:负责处理用户事件和视图部分的展示。在Android中,它可能是Activity、Fragment类或者是某个View控件。Presenter:作为View和Model之间沟通的桥梁,它从Model层检索数据后返回给View层,使得View和Model之间没有耦合。二、简例简例参考鸿洋博客下面举个简单的例子

2020-09-15 14:37:36 80

原创 Android框架模式——MVC

一、MVC介绍MVC全名是Model-View-Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种框架模式。Model:模型层。负责处理数据。View:视图层。负责界面数据的展示,与用户进行交互。一般采用 XML 文件或者 Java 代码进行界面的描述。Controller:控制器层。负责逻辑业务的处理。Android 的控制层通常在 Activity、Fragment或者由它们控制的其他业务类中。二、流程View接受用户的请求,然后

2020-09-10 11:02:07 172

原创 【设计模式】设计模式六大原则

一、单一职责原则(Single Responsibility Principle)定义:就一个类而言,应该仅有一个引起它变化的原因。问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。解决方案:遵循单一职责原则。分别建立两个类T1、T2,使T1完成职责P1功能,T2完成职责P2功能。这样,当修改类T1时,不会使职责P2发生故障风险;同理,当修改T2时,也不会使职责P1发生故障风险。二、开闭原则(Ope

2020-08-21 11:01:46 74

原创 mk文件解析

LOCAL_PATH := $(call my-dir)每个Android.mk文件必须以定义LOCAL_PATH为开始。它用于在开发tree中查找源文件。宏my-dir 则由Build System提供。返回包含Android.mk的目录路径。include $(CLEAR_VARS)CLEAR_VARS 变量由Build System提供。并指向一个指定的GNU Makefile,由它负责清理很多LOCAL_xxx.例如:LOCAL_MODULE, LOCAL_SRC_FILES.

2020-08-04 10:48:14 1142

原创 常用adb命令

1、adbadb devices获取设备列表及设备状态如:***:~$ adb devicesList of devices attachedKVIRJZPNOFF6DAK7 deviceadb kill-server,adb start-server关闭、启动adb服务adb root,adb remount获取root权限adb reboot重启Android设备adb install -r apk路径名安装应用adb unstal

2020-07-09 17:16:44 262

原创 CTS/GTS test Fail

一、CtsPermission2TestCases1、android.permission2.cts.PrivappPermissionsTest#testPrivappPermissionsEnforcement一般在提供的log test_result.xml中寻找以下log <TestCase name="android.permission2.cts.PrivappPermissionsTest"> <Test result="fail" name="tes

2020-06-18 16:17:25 3514 1

原创 Android 6.0后 apk权限默认开启

Android6.0之后推出动态申请权限,所有敏感权限默认都是没有开启的状态,需要动态添加权限的。但是项目中有些三方预置的apk需要默认将权限开启。权限组权限PHONEREAD_PHONE_STATEPHONECALL_PHONEPHONEREAD_CALL_LOGPHONEWRITE_CALL_LOGPHONEADD_VOICEMAILPHONEUSE_SIPPHONEPROCESS_OUTGOING_CALLS––CO

2020-06-17 17:49:24 829

原创 SELinux之解决avc denied

安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是 Linux 的一个安全子系统。SELinux 主要作用是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。对资源的访问控制分为两类: DAC和MACSELinux工作模式SELinux 有三种工作模式,分别为:enforcing: 强制模式, 执行SELinux规则, 违反的行为会被阻...

2020-03-28 11:06:37 4577

原创 Google Play Store过滤规则

Google 文档连接:https://developer.android.google.cn/google/play/filters?hl=en一、Google Play上的过滤器工作方式Google Play 使用下述过滤限制来确定是否向正在 Google Play 应用中浏览或搜索应用的用户显示您的应用。在确定是否显示您的应用时,Google Play 会检查设备的硬件和软件要求及其运...

2020-01-20 15:38:43 1964

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除