![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android入门学习
LJW874362735
Android小白
展开
-
Android自定义控件
引入布局*<include layout="@layout/布局文件"/>*的技巧可以解决重复编写代码的问题,==但是当有些控件需实现响应事件时==,还需每个Activity中为这些控件单独实现事件注册代码。其实引入的布局中的按钮的功能是相同的,每个活动都要实现注册代码会增加重复代码。所以,这种情况(==即引入布局文件中有些控件需实现事件响应==)应使用**自定义控件**方式解决:...原创 2019-05-15 19:06:35 · 119 阅读 · 0 评论 -
Android异步消息处理之Handler机制
Android不允许在子线程进行UI操作。但有时必须在子线程里去执行一些耗时任务,然后根据结果更新相应的UI控件。对于这种情况,可以使用异步消息处理机制。异步消息处理机制:Android异步消息处理主要有4个部分:Message、Handler、MessageQueue、Looper●Message:线程中传递的消息,它可以在内部携带少量的信息。例如Message.what/arg...原创 2019-09-10 21:48:23 · 191 阅读 · 0 评论 -
Android异步消息(二)之AsyncTask
在Android异步消息笔记中,简单介绍了异步消息处理机制。不过Android还提供了另外一些好用工具,如AsyncTask。借助AsyncTask,即使对异步消息处理机制不熟悉,也可以容易的从子线程切换到主线程。AsyncTask也是基于异步消息处理机制,只是封装好了而已。基本用法:AsyncTask是一个抽象类,需要创建一个子类去继承它,并重写相应的一些方法。● 一个简单的定义如...原创 2019-09-10 23:55:40 · 111 阅读 · 0 评论 -
Android四大组件之服务Service(一)之基本使用
服务(Service)是Android中实现程序后台运行的解决方案,适合去执行一些不需要和用户交互而且还要长期运行的任务。服务不是运行在一个独立的进程当中,而是依赖于创建服务时所在的应用程序进程。当应用程序进程被杀,依赖它的服务也会停止。服务并不会自动开启线程,所有代码默认在主线程中运行,也就是说,需要在服务内部手动创建子线程,去执行耗时任务,否则主线程会被堵塞。定义一个服务:new ...原创 2019-09-11 15:19:55 · 255 阅读 · 0 评论 -
Android四大组件之服务Service(二)前台服务
前台服务和普通服务区别在于,他会一直运行在系统的状态栏,类似通知的效果。比如天气软件通知栏一样。创建前台服务很简单,只需在新建的服务类的onCreate()方法中添加如下代码即可://重写onCreate(),服务创建时被运行@Overridepublic void onCreate() { super.onCreate(); Log.d("MyService","o...原创 2019-09-11 15:54:33 · 405 阅读 · 0 评论 -
Android四大组件之服务Service(三)之IntentService
之前写过服务的基本使用https://blog.csdn.net/LJW874362735/article/details/100727663,不过服务(Service)的代码都是默认运行在主线程中的,如果要处理一些耗时任务,就会容易出现ANR(Application Not Responsing 没有响应)的情况,解决的方法就是使用Android的多线程技术,我们应该在服务的每个耗时任务开启子线...原创 2019-09-15 21:34:51 · 277 阅读 · 0 评论 -
【Bug】android.app.RemoteServiceException: Bad notification for startForeground: ja
版权声明:本文转至CSDN博主「dandelionela」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/dandelionela/article/details/86092293(本文转至dandelionela主页的https://blog.csdn.net/dandelionela/articl...转载 2019-09-15 20:49:08 · 6192 阅读 · 0 评论 -
基于位置的服务(LBS)--百度地图
基于位置的服务叫LBS,其核心是确定用户的位置,有两种实现:GPS和网络定位。GPS:手机内置的GPS硬件和卫星交互获取经纬度,精度非常高网络定位:手机当前网络附近的3个基站进行测速,计算手机和3个基站的距离,通过三角定位确定一个大概的位置。Android提供有这两种定位的API,GPS室内不能用,网络的话,国内你懂得。所以还是使用百度,高德地图的第三方SDK方便Caption...原创 2019-09-16 19:59:36 · 1300 阅读 · 0 评论 -
Android Material Design 之ToolBar控件
Material Design简单介绍:Material Design是Google推出的一套界面设计语言,用于解决Android平台界面风格统一的问题。Toolbar使用:每个活动顶部默认的标题栏都是ActionBar,但ActionBar只限于活动的顶部。而Toolbar不仅继承了所有的ActionBar功能,而且灵活,可以配合其他控件来完成一些Material Design的效果...原创 2019-09-17 16:26:15 · 286 阅读 · 0 评论 -
Android Material Design 之滑动菜单(之DrawerLayout控件及其导航按钮HomeAsUp)
!!!!注意,此文章是基于这篇文章的代码,继续修改的:(Android Material Design 之ToolBar控件)Material Design简单介绍:Material Design是Google推出的一套界面设计语言,用于解决Android平台界面风格统一的问题。滑动菜单:就是将一些菜单选项影藏起来,而不是放在主屏幕,然后通过滑动的方式将菜单显示出来。就是QQ侧...原创 2019-09-17 20:44:09 · 475 阅读 · 0 评论 -
Android Material Design 之滑动菜单(之NavigationView)
在这篇Android Material Design 之滑动菜单(之DrawerLayout控件及其导航按钮HomeAsUp)文章中,DrawerLayout实现的滑动菜单中,DrawerLayout第二直接子控件(即滑动菜单内容区域)仅仅使用TextView太过单调,所以要想滑动菜单漂亮,可以把DrawerLayout第二直接子控件(即滑动菜单内容区域)用NavigationView实现。N...原创 2019-09-17 23:44:30 · 346 阅读 · 2 评论 -
Android Material Design 之悬浮按钮FloatingActionButton、提示工具SnackBar、CoordinatorLayout布局
悬浮按钮FloatingActionButton和提示工具SnackBar是Design Support提供的控件。悬浮按钮FloatingActionButton及其点击事件:悬浮按钮FloatingActionButton是不属于主界面平面上的控件,而是位于另一个维度,好像三维坐标上的Z轴。设置它的app:elevation=""可以设置悬浮高度,值越大,悬浮高,投影大。同时也有...原创 2019-09-18 14:14:09 · 579 阅读 · 0 评论 -
Android Material Design之AppBarLayout:可以解决RecyclerView遮挡Toolbar
假如,当RecyclerView遮挡屏幕顶部的Toolbar时,解决方法:①一般解决就是使用偏移,将RecyclerView向下偏移一个Toolbar高度即可。②不过,Design support 提供的一个控件:AppBarLayout 也可以解决此问题。而且还可以实现ToolBar需要时就出现,不需要时就隐藏(因为AppBarLayout 内部做了很多滚动事件的封装)。AppBar...原创 2019-09-18 15:06:20 · 807 阅读 · 0 评论 -
Android Material Design之下拉刷新(SwipeRefreshLayout)
SwipeRefreshLayout是实现下拉刷新功能的核心类(布局),①只要将 需要下拉刷新功能的控件,嵌入到SwipeRefreshLayout作为子控件即可(如RecyclerView需要下拉刷新功能,只需将RecyclerView添加到SwipeRefreshLayout布局里面即可),②最后具体的下拉刷新功能,要刷新什么,就在对应的Activity中实现了。①将 需要下拉刷新功...原创 2019-09-18 15:33:38 · 316 阅读 · 0 评论 -
任意地方获取Context的技巧
有时候,并不是所有逻辑操作都在Activity(活动也是Context对象),所以当刚好要使用Context时(如,请求网络失败后用Toast提示,就需要Context对象),又不在Activity中,这么办了?任意地方获取Context的技巧:Android提供了一个Application类,每当应用程序启动时,系统都会自动的将这个类进行初始化。所以方法就是自己写一个新类继承Applic...原创 2019-09-18 17:23:47 · 302 阅读 · 0 评论 -
使得Intent可以传递对象(方法:Serializable序列化 和 Parcelable)
Intent可以用于启动活动、发送广播、启动服务等等,还可以在Intent添加一些数据,以达到传值的效果传递常见数据类型的数据(如int,String):(这里仅仅假设在Activity1,传递到Activity2)① Intent. putExtra( "Key" ,value),添加要传递的数据 (Activity1中)Intent intent = new Intent(A...原创 2019-09-18 23:56:02 · 346 阅读 · 0 评论 -
定制日志工具:自由地控制日志的打印
写一个项目,为了方便测试,很多地方都会打印大量的日志。但是,开发期间打印出来当然方便,但是项目上线后还是会打印就会影响运行和泄露数据,删除日志打印语句嘛有麻烦而且回头维护时还是需要这些日志。所以为了能自由控制,开发时打印,上线后不打印 做法就是定制自己的日志工具。① 新建一个类LogUtil:public class LogUtil { public static final...原创 2019-09-19 15:19:49 · 181 阅读 · 0 评论 -
创建定时后台(服务Service)任务(Android Alarm机制)和Doze模式
Android中的定时任务一般两种实现方式,一种是Java的Timer类,一种是Android的Alarm机制。不过Timer类不适合长期在后台运行的定时任务。因为手机都有休眠机制,长期不使用手机CPU会进入睡眠状态,而Timer类没有唤醒CPU的功能,而Alarm有。Android Alarm机制:Alarm机制用法,借助的是AlarmManager类。和NotificationMana...原创 2019-09-19 19:18:33 · 749 阅读 · 0 评论 -
HTTP请求常用代码片段(OKHttp)
应用中,许多地方会用到网络请求,所以这里写好在一个类的静态方法中,方便日后使用注意:发送网络请求,一般开启子线程操作,但在子线程中,所有逻辑很快执行,所以服务器没来得及响应就结束了,也就没有响应的数据了,所以要用回调机制;还有,子线程也不能使用return返回数据,所以在回调机制中,成功访问,就将数据放在回调方法中OKHttp:类HttpUtil:public class Http...原创 2019-09-09 11:14:05 · 306 阅读 · 0 评论 -
解析JSON数据之GSON
GSON可以将一段JSON格式的数据 ==自动映射 ==》成一个对象(或对象数组)(Json:{}表示一个JSONObject对象,[]表示JSONArray数组(其元素就是一个JSONObject对象))使用GSON:1. 在app/build.gradle文件中,的dependencies闭包添加:implementation 'com.google.code.gson:gso...原创 2019-09-08 23:53:23 · 184 阅读 · 0 评论 -
ListView界面定制(即自定义ListView子项的布局)及优化和点击事件
ListView简单用法就是:数据通过适配器Adapter对象(构造函数第3个参数)(即数据放进Adapter对象)然后使用ListView.setAdapter(apdapter)将适配器对象传给ListView对象/*xxxAdapter构造函数,一般用ArrayAdapter多Adapter(Context上下文,listView子项的布局文件id,数据(数组之类))*/...原创 2019-05-15 14:28:49 · 4369 阅读 · 0 评论 -
RecyclerView的基本用法、横向/纵向/网格/瀑布流布局显示及点击事件
ListView只能纵向显示而且还要优化(即手动写代码实现缓存好子项布局文件及其里面控件),而Recycler除了优化好这些,还可以实现横向/纵向/网格/瀑布流布局显示(关键:只需改RecyclerVIew.setLayoutManager(布局类对象实例)中的布局类对象,这个参数的布局不同,就可以实现不同子项显示方式:横向/纵向/网格/瀑布流布局纵向LinearLayoutManager.V...原创 2019-05-20 19:54:46 · 3991 阅读 · 1 评论 -
Fragment碎片的基本使用和动态添加使用
#什么是碎片碎片Fragment是原创 2019-05-21 22:46:19 · 641 阅读 · 0 评论 -
BroadcastReceiver广播接收器动态注册、静态注册
发送广播:借助Intent接受广播:借助BroadcastReceiver1. 广播类型:标准广播、有序广播标准广播:异步执行,同一时刻,所有的广播接收器,都会接收到,所以无法被截断 有序广播:同步执行,同一时刻,仅一个广播接收器,能够接收到,且可被前一个接收器截断2. 广播接收器注册广播接收器可以过滤出自己感兴趣的广播进行注册,当有相应的广播发出时,接收器就能够收到该广播...原创 2019-05-25 15:24:49 · 1244 阅读 · 0 评论 -
自定义广播
发送标准广播 发送有序广播 有序广播的先后顺序(在注册广播接收器时,通过过滤器的priority属性设置优先级) 截断有序广播(在自定义的广播接收器类中的onReceive()方法中,调用abortBroadcast();即可截断广播) 注意,要保证截断广播,需保证自己优先级高,先接收了此有序广播 本地广播(只有动态注册) 发送广播,利用Intent...原创 2019-07-11 13:25:59 · 141 阅读 · 0 评论 -
Android持久化之文件存储
实现数据持久化主要有3种:文件存储、sharedpreferences、sqlite数据库。这里要讲的是文件存储。文件存储不对内容进行任何的格式化处理,所有的数据都是原封不动地保存到文件中的,所以它适合存储一些简单的文本数据或二进制数据。·将数据存储到文件Context类提供了一个FileOutputStream openFileOutput(string FileName, int ...原创 2019-07-11 13:24:07 · 114 阅读 · 0 评论 -
Android持久化之SharedPreferences
实现数据持久化主要有3种:文件存储、sharedpreferences、sqlite数据库。这里要讲的是sharedpreferences。sharedpreferences是采用 键-值对的方式来存储数据(文件后缀名是xml),就是说保存数据时要提供键-值,读取数据只需指定键。而且sharedpreferences支持存储多种不同数据类型的数据,如存的是整型/字符串/布尔等,读取出来的也是整...原创 2019-07-11 23:08:12 · 210 阅读 · 0 评论 -
内容提供器ContentProvider--现有的内容提供器
内容提供器ContentProvider 可以用来实现跨程序共享数据。ContentProvider一般有两种:系统自带的(如电话簿、短信、媒体库等等)、自定义的这里要讲的是现有(系统自带)的简单用法:首先获取ContentResolver对象:Context类中的ContentResolver getContentResolver()方法(ContentResolver提供了一系...原创 2019-07-17 00:33:17 · 132 阅读 · 0 评论 -
LitePal框架(SQLite)
LitePal是一个开源的Android库,允许开发人员非常容易地使用SQLite数据库。您无需编写SQL语句即可完成大部分数据库操作,包括创建或升级表,crud操作,聚合函数等.特征使用对象关系映射(ORM)模式。 几乎为零配置(只有一个属性很少的配置文件)。 自动维护所有表(例如,创建,更改或删除表)。 支持多数据库。 封装的API,用于避免编写SQL语句。 令人敬畏的流畅查...翻译 2019-07-17 12:54:06 · 334 阅读 · 0 评论 -
git基础(版本控制)
基本的命令:1. 打开GitBash,进入需要操作的项目project的主目录2. 创建代码仓库:git init(创建好代码仓库后,此项目的根目录下,会生成一个隐藏的.git文件夹:记录本地所有的git操作 如果要删除本地仓库,删除此隐藏的.git文件夹即可)3. 提交代码到代码仓库: ● git add 目录或文件 //把待提交的目录或文...原创 2019-07-18 00:44:59 · 122 阅读 · 0 评论 -
Android的通知功能Notification
通知(Notification)是Android系统比较有特色的功能。当某个应用需向用户提示某些信息,而该应用又不在前台运行,就可以借助通知(Notification)实现。发出一条通知后,手机的状态栏会显示一条通知,下拉可以看到通知的详情,当然可以实现点击通知后跳转到某个页面。通知Notification的基本用法:通知可以在活动、广播接收器、服务中创建。在活动中创建通知比较少,因为一般...原创 2019-09-03 14:16:36 · 345 阅读 · 0 评论 -
运行时权限(申请)处理(涉及危险权限)
说明:Android 6.0 开始,涉及危险权限,都需动态申请(即运行时权限处理) 所需权限无论是否是危险权限 均需要在清单文件声明 在旧的权限管理系统中,权限仅仅在App安装时询问用户一次,用户同意了这些权限 App才能被安装,App一旦安装后后授权不可取消。查看权限目录:通过 adb shell 命令查看危险权限 adb shell pm list permissio...原创 2019-09-04 14:16:33 · 399 阅读 · 0 评论 -
WebView简单使用及遇见问题:net::ERR_CLEARTEXT_NOT_PERMITTED
WebView简单使用:在应用程序打开一个网页,总不能跳转浏览器去做。Android提供的WebView,可以使得我们可以在本程序中打开网页而不需跳转到其他的浏览器去做在清单文件声明网络权限:<uses-permission android:name="android.permission.INTERNET" />在布局文件中添加WebView控件:<andr...原创 2019-09-05 10:21:04 · 1113 阅读 · 0 评论 -
OkHttp简单使用
发送http请求,原生的是使用HttpURLConnection,但一般开发首选的是开源的网络通信库,如OKHttp。OKHttp的开源地址:https://github.com/square/okhttp.下面是OKHttp简单使用,更过详细请移步OKHttp官方网站.① 首先,在app/build.gradle文件的dependencies{}中添加,如下依赖:im...原创 2019-09-06 11:01:57 · 311 阅读 · 0 评论 -
网络数据(XML)解析方法之Pull解析
在网络上传输数据最常用的格式有Json、XML。这里介绍是XML数据的解析之Pull解析,还有一个SAX解析也常用SAX解析和Pull解析区别:sax解析:自动获取下一个节点,直到xml数据结束位置pull解析:需要手动设置循环,借助next()直到文件结束准备工作:搭建一个Apache服务器(安装自行百度),在安装/解压Apache的目录:Apache/htdocs下,新建一...原创 2019-09-07 10:34:15 · 379 阅读 · 0 评论 -
网络数据(XML)解析方法之SAX解析
在网络上传输数据最常用的格式有Json、XML。这里介绍是XML数据的解析之SAX解析,还有一个Pull解析也常用。SAX解析和Pull解析区别:sax解析:自动获取下一个节点,直到xml数据结束位置pull解析:需要手动设置循环,借助next()直到文件结束private void sendRequestWithOKHTTP() { new Thread(new...原创 2019-09-07 20:04:04 · 227 阅读 · 0 评论 -
解析JSON数据之JSONObject
JSON 数组是在JSON对象中延伸出来的,多个JSONObject对象就是一个JSONArray,数据之间由逗号分隔,花括号{}保存对象,方括号[]保存数组。[]一个数组JSONArray,里面可有多个{}元素JSONObject对象,每个元素JSONObject又有若干字段属性("Key":"Value")JSON数组语法规则JSONArray 最外层是“[”和“]”包裹起来的:如...原创 2019-09-08 11:37:52 · 869 阅读 · 0 评论 -
Gilde框架的使用(未完待续)和glide-transformations(图形变换)
Glide是一款由Bump Technologies开发的图片加载框架,使得我们可以在Android平台上以极度简单的方式加载和展示图片。基本使用:● 添加依赖:dependencies { compile 'com.github.bumptech.glide:glide:3.7.0'}● Glide中需要用到网络功能,因此你还得在AndroidManifest.xml...原创 2019-10-09 23:16:04 · 703 阅读 · 0 评论