![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android
文章平均质量分 50
WindFromFarEast
嗨呀好气呀QAQ
展开
-
图片/视频混合选择器的简单实现
仿抖音图片/视频混合选择器功能介绍搜索所有视频和图片并混合显示,视频在右下角显示时长,点击时右上角显示当前为第几个选中的图片/视频,取消时补位。 这个选择器是基于RecyclerView来实现的 下面介绍关键类QueryProcessorQueryProcessor是用于异步查询所有图片/视频的类public class QueryProcessor { ...原创 2018-07-22 21:25:12 · 683 阅读 · 0 评论 -
Android弹出Window提示框(基于Android6.0)
在项目中经常会需要应用弹出一些自定义的窗口,这时候Android自带的系统Dialog就无法满足我们的需求了,为了满足项目需求,我们可以使用Window来满足这一需求。首先我们新建一个项目,来到MainActivity的布局文件,在这里新建一个按钮用于弹出Window<LinearLayout xmlns:android="http://schemas.android.com/apk/res原创 2017-08-27 13:09:49 · 3529 阅读 · 0 评论 -
Android自定义Dialog
首先我们新建一个自定义Dialog类CustomDialog,并让这个类继承自Dialog类public class CustomDialog extends Dialog{ //构造方法 public CustomDialog(Context context,int width,int height,int layout,int style,int gravity,int ani原创 2017-08-23 11:18:27 · 304 阅读 · 0 评论 -
Android之在服务中的Window的关闭方法(利用事件分发)
在智能管家App项目的开发过程中有一个这样的功能,在服务中写一个窗口,之后这个窗口需要通过Back键关闭,但是由于窗口是在服务Service中的,显然我们无法像在Activity中通过回调onBackPressed()方法来关闭窗口,因此在网上查阅了事件分发的相关资料和刘某人程序员的博客后,总算学习到了如何解决该问题。http://blog.csdn.net/qq_26787115/article/原创 2017-08-02 14:28:52 · 1775 阅读 · 0 评论 -
Android继承AppCompatActivity实现全屏设置
Android studio创建新项目后Activity默认继承的是AppCompatActivity。 在使用自己创建的style的时候,如果没有设置parent=”xxx”,其中xxx是appcompat相关的属性,那么在运行的时候就会报错。所以要在使用的style里面继承相关属性:例如: <style name="xxx" parent="Theme.AppCompat.NoActionB转载 2017-07-12 14:11:55 · 614 阅读 · 0 评论 -
Android中通过Typeface设置自定义字体
Android系统默认支持三种字体,分别为:“sans”, “serif”, “monospace”,除此之外还可以使用其他字体文件(*.ttf)方法一:XML中使用android默认字体<!-- 使用默认的sans字体--> <TextView Android:id="@+id/sans" Android:text="Hello,Wor转载 2017-07-12 12:55:37 · 574 阅读 · 0 评论 -
关于LayoutInflater.inflate()的参数问题
今天在写Fragment的时候,又碰到了之前常用的代码 @Override public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) { View view=inflater.inflate(R.layout.fragment_b原创 2017-07-11 13:01:43 · 876 阅读 · 0 评论 -
Android之网络技术
一、WebView的用法 当我们需要在应用中浏览网页,但又不能打开系统浏览器的时候,我们可以利用Android自带的WebView控件来实现这一要求。 新建一个WebViewTest项目,修改activity_main.xml代码。<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"原创 2017-06-07 11:26:24 · 306 阅读 · 0 评论 -
跨程序共享数据——内容提供器
本文基于书籍《Android第一行代码》一、内容提供器简介内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,而这种数据共享的数据来源于不同App的SQLite。内容提供器的强大在于其能够选择只对哪一部分数据进行共享,保证了隐私。在学习内容提供器前,首先需要掌握Android6.0版本开始引入的新特性——运行时权限。二、运行原创 2017-04-11 22:05:54 · 926 阅读 · 0 评论 -
Android开源数据库框架——LitePal
LitePal是一款开源的Android数据库框架,它采用了对象关系映射(ORM)的模式,并且封装了我们常用的数据库功能,使得我们不用编写SQL语句就可以完成各种建表和增删改查的操作。但其中最强大的功能是ORM——对象关系映射,这个映射关系使得Java中的类和数据库中的表一一对应,让Java开发者能够更简单的操作数据库。以前如果要使用一个开源库,我们需要下载这个库的jar包然后再集成到我们的项目当中原创 2017-04-09 18:36:58 · 823 阅读 · 0 评论 -
Android之数据存储——持久化技术
数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证即时在手机或电脑关机的情况下,这些数据仍然不会丢失。 Android系统中主要提供了3种方式用于简单地实现数据持久化技术,即文件存储、SharedPreference以及数据库存储。另外,将数据保存在SD卡中也算是一种数据持久化技术,但是这种存储方式没有前三种方式安全。一、文件存储 文件存储是Android中最基本的一种数据存储方式,它原创 2017-04-06 16:09:33 · 836 阅读 · 0 评论 -
ViewPager+Fragment+ListView重新加载后数据源重复问题的解决方法
今天在项目中遇到了一个问题,我的主页Activity是以ViewPager+Fragment进行构建的,其中有两个Fragment又包含了ListView,正常情况下这两个Fragment的界面如下: 但是当我从主页Activity跳转到另一个Activity,之后再返回主页Activity时,发现第一个包含ListView的Fragment的界面变成了下面这样: 很明显这是ListVi原创 2017-09-23 15:26:14 · 3038 阅读 · 1 评论 -
修改Android自带Switch样式
由于Android自带的Switch样式不能应用于所有UI风格的App,因此修改Switch样式是项目中经常要用到的技术,Switch的样式一般来说需要修改以下部分:按钮(thumb)、轨迹(track)以及大小。首先我们经过尝试可以发现,如果我们直接在布局文件中修改Switch的属性layout_width和layout_height是无法修改Switch的真实大小的,相反只能改变这个Switch原创 2017-09-11 16:49:39 · 13587 阅读 · 1 评论 -
Android自定义View
如何自定义控件自定义属性的声明和获取测量onMeasure:测量自定义控件的尺寸绘制onDraw:绘制自定义控件状态的存储与恢复:在Activity进入后台时,我们需要保存自定义控件的重要状态;当Activity从后台恢复时,我们就可以恢复自定义控件的重要状态,例如文本内容等。自定义属性的声明和获取总共分成四步:分析需要的自定义属性在res/values/attrs.xm...原创 2018-03-08 22:28:40 · 207 阅读 · 0 评论 -
使用回调接口解决匿名实现Runnable导致的内存泄漏问题
使用回调接口解决匿名实现Runnable内存泄漏的问题在Android开发中经常会看到这样的代码:public class MyActivity extends Activity { ... new Thread(new Runnable() { @Override public void run() { //具体...原创 2018-07-24 21:45:25 · 4610 阅读 · 5 评论 -
Android 8.0 常见bug
java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation最近在做一个即时IM通讯的app,在Android8.0版本运行app的时候发现总是crash,logcat里面的问题也是一大串,没办法只好一行一行的看,而且logcat还在一直不停的刷新,真是头大,最后一个一个er...原创 2018-05-11 14:24:08 · 1164 阅读 · 0 评论 -
Android中的多线程
Android多线程机制由于讨论的主要是Android中特有的线程机制和类,因此在此不会再详谈Java中的线程类Thread和Runnable。 Android中可以扮演线程的角色有很多,AsyncTask、IntentService和HandlerThread,AsyncTask的底层实际上就是一个线程池,IntentService的底层实际上就是HandlerThread和Handler...原创 2018-05-10 18:10:21 · 211 阅读 · 0 评论 -
Android消息机制
Android消息机制参考书籍:《Android开发艺术探索——任玉刚》消息机制概述Android的消息机制主要指的是Handler的运行机制,Handler的运行又需要MessageQueue和Looper的支撑,因此本博客将分别谈到ThreadLocal、MessageQueue、Looper和Handler的底层运行机制。首先了解一下Android消息机制涉及到的几个类:...原创 2018-05-08 20:37:56 · 197 阅读 · 0 评论 -
浅谈Activity启动过程
浅谈Activity启动过程本篇博客参考资料: 探索7.x源码, 全面解析Activity启动框架 (1) 《Android开发艺术探索》——任玉刚在日常的开发中,我们通常使用startActivity(Intent intent)来启动一个新的Activity,我们能够如此简单的启动一个Activity要归功于Android开发团队完美的封装,屏蔽了Activity启动的底层细节,但...原创 2018-03-20 23:44:36 · 206 阅读 · 0 评论 -
Android Binder机制
本篇博客参考资料: 《Android开发艺术探索》——任玉刚 简单明了,彻底地理解BinderBinder是Android一个非常重要的类,它实现了IBinder接口。从IPC角度来说,Binder是Android中的一种跨进程通信方式;从Android Framework角度来说,Binder是ServiceManager连接各种Manager(ActivityManager、Windo...原创 2018-03-19 21:20:37 · 246 阅读 · 0 评论 -
Android多进程通信之AIDL
跨进程开启、停止、绑定、解绑Service在上一节(Android Service)的学习中我们知道在同一个进程中,不同组件(例如Activity和Service)之间通过IBinder接口进行通信,但是不同进程里的组件是不能通过IBinder进行通信的,为了让不同进程里的组件能够通信我们需要使用到AIDL。在学习AIDL之前,我们先了解一下如何跨进程开启、停止、绑定、解绑Service。...原创 2018-03-11 23:41:24 · 282 阅读 · 0 评论 -
Android动画详解
一、逐帧动画逐帧动画就是将一张一张的图片逐帧播放以达到动画效果,在Android里面实现帧动画非常简单。右键点击drawable文件,选择Drawable Resource File,输入名称loading,点击确定,完成如下代码:<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:androi...原创 2018-03-03 18:55:32 · 370 阅读 · 0 评论 -
Android Service
Service的生命周期Service是Android四大组件之一,它通常用来实现需要在后台进行耗时操作的需求,它的生命周期如下: 可以看到Service的生命周期分成了两条线,左边这条是使用startService()方法启动Service后走的生命周期,右边这条是使用onBind()方法绑定Service后走的生命周期,下面我们先来学习使用startService()的情况下Serv...原创 2018-03-11 00:23:54 · 210 阅读 · 0 评论 -
实现多Activity之间的跳转
1、MainActivity及其布局文件package com.example.ui_multiactivity;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClick原创 2017-02-18 21:24:23 · 1024 阅读 · 0 评论 -
利用广播实现强制下线功能
首先明确项目要求: 强制下线功能,即不论栈顶是哪个Activity都要求拥有能接收到一条强制下线的广播的广播接收器,接收到这个广播的广播接收器将执行onReceive方法弹出AlertDialog对话框,这个对话框是不可取消的,点了对话框的确定按钮后将从栈顶的Activity跳回登陆界面的Activity。 明确了如何实现项目要求后,下面直接上代码。 强制下线功能需要先关闭所有的活动,然后回到原创 2017-03-06 21:25:52 · 459 阅读 · 0 评论 -
Android之广播机制
广播分为两大类,标准广播和有序广播;接收广播则需要广播接收器(BroadcastReceiver),接收到广播的广播接收器就可以进行一系列逻辑操作了。一、接收系统广播 1、动态注册监听网络变化 先来用动态注册广播的方法让广播接收器接收一种由网络变化发出的系统广播。 (1)、创建广播接收器 新建一个类,令其继承BroadcastReceiver,并重写onReceive()方法即可,其中onR原创 2017-03-05 21:44:24 · 255 阅读 · 0 评论 -
Android控件之Time/DatePicker
xml布局文件<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="mat原创 2017-02-16 21:54:09 · 1041 阅读 · 0 评论 -
Android控件之RatingBar
xml布局文件<?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"原创 2017-02-16 21:48:43 · 251 阅读 · 0 评论 -
Android控件之ProgressBar
xml布局文件<?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"原创 2017-02-16 21:45:23 · 203 阅读 · 0 评论 -
Android控件之SeekBar
xml布局文件<?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"原创 2017-02-16 21:41:06 · 342 阅读 · 0 评论 -
Android控件之ToggleButton
ToggleButton开关按钮 xml文件如下<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_heigh原创 2017-02-16 21:37:25 · 238 阅读 · 0 评论 -
Android控件之RadioButton和RadioGroup
RadioButton也是一种带选择框的控件,它常与RadioGroup搭配使用以实现单选的功能。xml文件如下<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_p原创 2017-02-16 21:33:32 · 331 阅读 · 0 评论 -
Android控件之CheckBox
xml布局文件如下<?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"原创 2017-02-16 21:25:24 · 407 阅读 · 0 评论 -
Android控件之ImageView
<?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" andr原创 2017-02-16 21:18:03 · 356 阅读 · 0 评论 -
Android控件之EditText
EditText是TextView的子类,因此继承了TextView的属性。<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android原创 2017-02-16 21:13:02 · 221 阅读 · 0 评论 -
监听器的实现方法
监听器的接口又很多种,如OnClickListener,OnCheckedChangeListener……但由于以下是拿Button控件作为例子,因此代码中只用了OnClickListener接口举例,在实际开发中根据不同控件、不同的用户需求要使用不同的监听器接口。 默认已经写好了所有Activity对应的XML布局文件,因此在以下学习中不再放XML布局文件的代码,直接贴上Java代码一、成员内部原创 2017-02-16 21:11:04 · 1729 阅读 · 0 评论 -
LinearLayout中组件右对齐
在LinearLayout中,如果将其定位方向设为横向排列:Android:orientation=”horizontal”,那么这个布局中的控件将自左向右排列。 但有时会有这样的情况:行的左边有两个控制的同时,行的右边也有一个控制。 如图: 这怎么处理呢? 我们可以将右边的控件放在另一个LinearLayout中,同时将其对齐方式设为右对齐:android:gravity=”right”,转载 2017-02-17 20:02:28 · 930 阅读 · 0 评论 -
Android控件之ListView
现在我们的项目要求是制作一个图片和文本共存的ListView,效果图如下 首先我们创建一个新的工程,在MainActivty的布局文件中添加ListView控件<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"原创 2017-02-27 22:25:31 · 285 阅读 · 0 评论 -
相对布局知识小结
一、什么是相对布局 二、为什么要使用相对布局 三、相对布局属性之位置对齐 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_p原创 2017-02-18 20:41:50 · 619 阅读 · 0 评论 -
ScrollView
<!--滚动功能列表--> <ScrollView android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:layout_width="match_parent"原创 2017-02-25 14:45:32 · 282 阅读 · 0 评论