Android开发
Android入门
冰之沁泠
技术没有巅峰,只有不断追求更新的技术。
展开
-
ListView加载多布局
效果图如下:ListView适配器代码如下:public class MyAdapter extends BaseAdapter { private Context mContext; private LayoutInflater inflater; /** * 三种布局所对应的标识,type的值必须从0开始 */ private stat...原创 2019-11-13 22:04:54 · 208 阅读 · 0 评论 -
Volley的简单使用
Volley简介Volley是2013年Google I/O大会上推出的一个新的网络通信框架,非常适合数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,Volley就不太合适了。简单使用不管是StringRequest、JsonRequest还是ImageRequest,都是以下三步曲:创建一个RequestQueue对象创建一个Request对象(StringRequest...原创 2019-11-13 19:04:45 · 215 阅读 · 0 评论 -
使用zxing开源库生成二维码和识别二维码
效果图:首先添加依赖: implementation 'com.google.zxing:core:3.3.3'MainActivity代码如下:public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button btn_create_qr;...原创 2019-10-31 16:27:22 · 747 阅读 · 0 评论 -
自定义ListView下拉刷新效果
实现思路就是自己写一个刷新效果的布局,然后把这个布局定义为ListView的头,监听手势的滑动效果,分别更新不同的UI。效果图如下:直接上代码,代码是完整的,除了那个箭头的图片需要你自己提供,其它的都可以用我的代码,然后你看懂之后,自己在改一下就好了,我写了很多注释。view_header.xml(自定义刷新的显示内容)此处一定要在顶层布局加上 android:gravity="bo...原创 2019-10-21 20:16:10 · 252 阅读 · 0 评论 -
封装HttpURLConnection和OkHttp
通常情况下,我们都将一些通用的网络操作提取到一个公共类里,并提供一个静态方法,当想要发起网络请求的时候,只需要简单的调用一下这个方法即可。将HttpURLConnection发送网络请求的操作封装在一个公共类中,代码如下:public class HttpUtil { public static void sendHttpRequest(final String address, f...原创 2019-07-19 15:41:02 · 536 阅读 · 0 评论 -
使用内容提供器读取手机联系人信息
因为读取联系人信息属于危险权限,所以此程序我用到了Android的动态申请权限,如果你对动态申请权限还不了解,请看我的另一篇博客,链接地址如下:Android动态申请权限现在我们来分析一下怎么使用Android的内容提供器读取手机联系人信息,首先你要知道联系人信息在哪?怎么读取?其实我们的联系人信息都保存在Android内置数据库的一张表上,我们只要读取对应的那张数据表上的信息就可以了,读取...原创 2019-07-06 11:39:22 · 1093 阅读 · 0 评论 -
使用HttpURLConnection发送HTTP请求并显示请求到的数据
这里的例子是点击按钮,发送请求并显示,效果如下:MainActivity的布局代码如下:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_...原创 2019-07-15 12:34:23 · 1726 阅读 · 0 评论 -
在Android中播放视频
这里我是用VideoView来进行播放视频注意:请事先在手机的SD卡的根目录下放一个名为movie.mp4的视频文件,因为等下我就是读取这个文件的路径并进行播放,暂停和重新播放的操作。首先我们在AndroidManifest.xml文件中添加以下内容:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STO...原创 2019-07-10 17:43:50 · 543 阅读 · 0 评论 -
在Android中调用摄像头拍照并显示出来
Demo如下:原创 2019-07-10 14:41:37 · 6413 阅读 · 14 评论 -
Android动态申请权限
在程序运行时申请权限自Android 6.0以后,就提供了动态申请权限功能,在Android系统中,权限分为两种,分别为普通权限和危险权限,普通权限不需要动态申请,系统会自动帮我们进行授权,而危险权限则需要动态申请。如果你要使用某个权限,你可以去帮助文档查询一下,看你要使用的这个权限是不是危险权限,如果是,就要动态申请。此处给出一个例子,点击按钮开始执行打电话操作,打电话是属于危险权限,所以...原创 2019-06-28 14:40:58 · 1149 阅读 · 0 评论 -
Android中通知的简单使用
从Android 8.0系统开始,Google引入了通知渠道这个概念。原创 2019-07-09 12:34:11 · 360 阅读 · 0 评论 -
Android中SQLite数据库的简单操作
创建和升级数据库创建数据库写一个类MyDatabase继承SQLiteOpenHelper类在MyDatabase类中重写方法和写一个构造方法写一个SQL的建表语句并设置为静态字符串常量在MyDatabase类中的onCreate()方法中执行建表语句在MainActivity中创建一个MyDatabase类的实例通过MyDatabase类的实例调用getWritableDatab...原创 2019-06-23 21:03:29 · 606 阅读 · 0 评论 -
使用JSONObject解析JSON数据
JSONObject是官方提供用来解析JSON数据的。要解析JSON数据,首先我们得要有一个放有JSON数据的服务器地址,这里我自己配置了一个Web服务器,并且将JSON数据放在了上面。在浏览器输入JSON数据的服务器地址,出现的内容如下所示:从上图,我们可以看到,http://192.168.43.8/get_data.json 这个地址是JSON数据的服务器地址,当然这个是我自己配...原创 2019-07-18 11:29:51 · 3980 阅读 · 0 评论 -
使用OkHttp发送HTTP请求并显示返回的数据
准备工作:编辑 app/build.gradle文件,在dependencies闭包中添加以下内容: implementation 'com.squareup.okhttp3:okhttp:4.0.1'添加上述依赖会自动下载两个库,一个是OkHttp库,一个是Okio库,后者是前者的通信基础。其中4.0.1是我写这篇博客时的最新版本,你可以访问OkHttp的项目主页来查看当前的最新版本是多...原创 2019-07-16 11:00:01 · 13991 阅读 · 8 评论 -
使用GSON解析JSON数据
GSON是谷歌提供的一个开源库,可以用来解析JSON数据不过GSON并没有被添加到Android官方的API中,所以如果要使用这个开源库,我们就要先添加依赖,编辑app/build.gradle文件,在dependencies闭包中添加如下内容: implementation 'com.squareup.okhttp3:okhttp:4.0.1' implementation 'co...原创 2019-07-18 15:51:30 · 13974 阅读 · 4 评论 -
解析XML格式数据:Pull解析方式
因为要解析XML数据,首先要有一个XML数据的地址,为了演示效果,我这里自己配置了一个Web服务器,并在服务器的根目录下放了一个get_data.xml的文件,文件内容如下:<apps> <app> <id>1</id> <name>Baidu Maps</name> <version>...原创 2019-07-18 20:51:24 · 640 阅读 · 2 评论 -
Handler+Message异步消息处理机制
这里给出一个实例,效果图如下:点击按钮然后下方的文本开始进行颜色变换因为 比较简单,我就直接上代码了。MainActivity的布局代码如下:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ...原创 2019-07-19 19:47:28 · 711 阅读 · 0 评论 -
AsyncTask的简单使用
这里给出一个简单应用的实例,效果图如下:点击按钮然后下方的文本开始进行颜色变换我先来介绍一下AsyncTask这个类AsyncTask这是一个抽象类,所以如果我们要使用,就必须要创建一个子类去继承它。在继承时我们可以为AsyncTask类指定3个泛型参数,这三个参数的用途如下:params : 执行AsyncTask时需要传入的参数,可用于在后台任务中使用,也就是doInBackgrou...原创 2019-07-19 21:06:11 · 287 阅读 · 0 评论 -
服务的基本使用:定义、启动和停止服务
定义一个服务我们来看下怎么在项目中定义一个服务,新建一个项目,右击包名,我这里的包名是com.example.lenovo.servicetest,然后选择New—>Service—>Service,会弹出如下所示的窗口:可以看到,我将服务命名为MyService,Exported属性表示是否允许除了当前程序之外的其他程序访问这个服务,Enabled属性表示是否启用这个服务。将两...原创 2019-07-20 11:28:09 · 804 阅读 · 0 评论 -
服务的基本使用:活动和服务进行通信
怎么在活动中调用服务中的方法呢?有什么方法能让活动和服务关系更紧密一些呢?这是我们这篇文章需要考虑的问题,下面我们来看看代码:public class MyService extends Service { private DownloadBinder mBinder = new DownloadBinder(); class DownloadBinder extends Bi...原创 2019-07-20 15:53:49 · 457 阅读 · 0 评论 -
使用前台服务
前台服务和后台服务的最大区别就在于,它会一直有一个正在运行的图标在系统的状态栏显示,下拉状态栏后可以看到更加详细的信息,非常类似于通知的效果。先来看下程序的效果图:现在来看下代码:服务类的代码如下:public class MyService extends Service { @Override public IBinder onBind(Intent intent)...原创 2019-07-20 19:47:41 · 547 阅读 · 0 评论 -
使用IntentService
其实IntentService和Service这两个类的用法都差不多,这两个类都可以定义服务,那么这两个类的区别是什么?我的理解是:使用IntentService定义的服务,要开启线程,只要重写一个onHandleIntent()方法就可以了,而且在运行完之后会自动停止,如果使用Service定义服务,则需要手动开线程和手动添加stopSelf()方法才能运行完之后自动停止。下面我们来使用In...原创 2019-07-20 20:49:38 · 331 阅读 · 0 评论 -
Activity管理器
有些时候我们想要更好的管理Activity,比如随时随地的退出程序,不受返回栈的影响,但系统并没有一个命令就可以关闭所有的Activity。这个时候我们就要手动的去写一个Activity管理器,代码如下:public class ActivityCollector { // 创建一个Activity的列表 public static List<Activity> a...原创 2019-06-18 18:15:56 · 1203 阅读 · 0 评论 -
使用本地广播
本地广播只能在应用程序内部进行传递,很好的保障了安全性。用法基本和动态注册广播接收器类似,代码如下:public class MainActivity extends AppCompatActivity { private Button btn_send; private LocalBroadcastManager localBroadcastManager; priv...原创 2019-06-18 16:48:44 · 426 阅读 · 0 评论 -
隐藏Android的状态栏(电池信息等图标)
在Activity的onCreate方法中添加如下代码 //去除title requestWindowFeature(Window.FEATURE_NO_TITLE); //去掉Activity上面的状态栏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, ...原创 2019-04-19 10:50:14 · 4565 阅读 · 1 评论 -
使用Bundle将用户名和密码传入另一个Activity中并接收
Bundle作用:绑定一些复杂的数据类型,并通过Intent的putExtras()方法在Activity与Activity之间传值。使用:在Activity与Activity之间传两个字符串,这里我是在MainActivity和RegActivity中传值,在RegActivity中传两个字符串给MainActivity,并在MainActivity中接收,可先将用户名和密码保存在这两个字符...原创 2019-04-19 10:23:05 · 825 阅读 · 0 评论 -
Toast的使用和简单封装
Toast的使用效果图:这里我用了4个按钮分别实现了Toast的4种不同的效果。第一个按钮实现的是系统默认的Toast。第二个按钮是改变Toast的位置为居中。第三个按钮是自定义的Toast,自己画的布局来实现自定义的Toast,我这里只是为了实现这个效果,画的比较丑,就一个ImageView和一个TextView第四个按钮是封装的Toast,实现点击多下按钮只显示最后一次的Toa...原创 2019-04-23 22:20:21 · 1089 阅读 · 0 评论 -
RecyclerView实现简单的瀑布流
RecyclerView实现简单的瀑布流注意: 我这里只是实现一个简单的瀑布流效果,你可以在我的程序上加一些复杂的操作。先看一下效果图:如图所示,我这里只用了两张图片,并且苹果图片的宽250高250,草莓图片宽250高222,因为我在程序中没什么限制,所以如果你要用我的程序,实现上图所示的效果,请自己改一下图片的宽和高。因为比较简单,我直接上代码了,注释都写上了,请看代码:Stagge...原创 2019-04-23 20:03:26 · 772 阅读 · 0 评论 -
WebView的简单使用
WebView的简单使用目录WebView加载本地html文件WebView加载网页并加一个进度条实现进度的显示WebView加载本地html文件在main文件夹下建一个assets文件夹,这个文件夹中的内容是不被系统编译的,把要加载的本地的网页文件放到这个文件夹中就可以了。目录结构如下图所示:这里的test.html是一个简单的html网页,你可以自己写一个,或者去网上下...原创 2019-04-22 19:20:14 · 720 阅读 · 0 评论 -
SharedPreferences保存用户名和密码
SharedPreferences作用:用来保存应用的一些常用配置,如Activity状态,Activity暂停时,将此activity状态保存到SharedPreferences中;当Activity重载,系统回调方法onSaveInstanceState时,再从SharedPreferences中将值取出。使用:保存用户输入的帐户和密码,并在下一次进入界面时显示出来。下面通过一个例子来看...原创 2019-04-17 18:30:38 · 2321 阅读 · 0 评论 -
AlertDialog的简单使用,五个实例
我分别用了5个按钮来演示这五个例子的效果,我先来讲解一下这五个效果分别是什么吧:一个警告对话框上面有两个按钮一个警告对话框上面有两个选项一个警告对话框上面有两个单选按钮一个警告对话框上面有三个多选框和两个按钮一个自定义的警告对话框在注释中我把警告对话框简写为警告框了,下面来看下完整的代码:AlertDialogActivity中的代码:import android.conten...原创 2019-04-25 22:12:27 · 975 阅读 · 0 评论 -
RecyclerView增删item
RecyclerView添加和删除item先看一下效果图吧:如果对这个RecyclerView的网格视图的实现有疑问的话,请参考我的另一篇文章:https://blog.csdn.net/weixin_43344890/article/details/89429821如果对标题栏按钮的实现有什么疑问的话,请参考我的另一篇文章:我这里重点讲怎么增删item。...原创 2019-04-21 19:41:04 · 783 阅读 · 0 评论 -
Android标题栏菜单的实现
在标题栏上添加菜单原创 2019-04-21 14:41:43 · 6233 阅读 · 0 评论 -
ImageView加载网络图片
使用第三方的库Glide加载网络图片首先去下载一个glide的包下载地址:https://github.com/bumptech/glide/releases/download/v4.7.0/glide-full-4.7.0.jar我这里用的是glide-full-4.7.0下载好之后直接复制到app\lib下面,然后点同步,可能有些小白还是不知道放那个目录,那好,我目录位置的结构图如下:...原创 2019-04-19 22:13:45 · 9716 阅读 · 5 评论 -
Fragment(一) Fragment的一个简单例子(创建Fragment并把Fragment添加到一个Activity中)
Fragment的一个简单例子整体步骤如下:新建一个CFragment的布局文件layout_cfragment.xml新建一个DFragment的布局文件layout_dfragment.xml新建一个CFragment类继承Fragment新建一个DFragment类继承Fragment将布局分别加载到这两个类中在Activity中添加Fragment并显示如何实现以上的操...原创 2019-05-08 22:38:44 · 2663 阅读 · 0 评论 -
Fragment(二)Fragment的动态添加和替换
Fragment的动态添加和替换给出一个简单的例子来说明动态添加和替换Fragment思路:创建两个Fragment的类和一个Activity,在Activity中添加一个按钮,和一个的布局,通过点击按钮来实现切换Fragment,的布局,这是一个容器,用来动态添加和替换Fragment,一定要设置id值。这里我只给出Activity中的java代码部分和一个替换Fragment的函数,代...原创 2019-05-08 23:29:17 · 2602 阅读 · 0 评论 -
发送并接收自定义广播在截断让其它程序无法接收到(有序广播)
发送并接收有序广播:有序广播和标准广播的发送和接收有点类似不同于标准广播的是,有序广播有接收的顺序,可以截断此处为了演示效果,我用了两个项目来实现,这两个项目为Test1和Test2在这两个项目中我分别静态注册了广播接收器,并在其onReceive()方法中弹一个Toast,接收的广播的action我设置为com.my.broadcast,也就是说这两个项目中的广播接收器只能接收到com...原创 2019-06-18 15:49:48 · 842 阅读 · 0 评论 -
发送并接收自定义广播(标准广播)
首先我们先静态注册一个广播接收器:右击包名,在打开的快捷菜单中选择New–Other–Broadcast Receiver然后输入名字,我这里输入的是MyReceiver,并勾选enable和exportedenable表示是否启用exported表示是否接收本程序以外的广播接着就会得到一个类并继承BroadcastReceiver类,代码如下:public class MyRecei...原创 2019-06-18 14:55:25 · 2830 阅读 · 2 评论 -
静态注册广播接收器(实现开机启动)
首先很遗憾的告诉你:自Android3.1开始,系统本身则增加了对所有app当前是否处于运行状态的跟踪。在发送广播时,不管是什么广播类型,系统默认直接增加了值为FLAG_EXCLUDE_STOPPED_PACKAGES的flag,导致即使是静态注册的广播接收器,对于其所在进程已经退出的app,同样无法接收到广播。也就是说无法通过静态注册实现接收系统的广播,但可以通过静态注册实现接收自定义的广播。...原创 2019-06-18 11:46:47 · 3131 阅读 · 2 评论 -
使用LitePal操作数据库
配置LitePal首先编辑app/build.gradle文件,在dependencies闭包中添加如下内容: implementation 'org.litepal.android:core:1.5.0'配置litepal.xml文件:右击app/src/main目录—>New—>Directory,创建一个assets目录,然后assets目录下再新建一个litepal....原创 2019-06-21 16:06:44 · 1794 阅读 · 0 评论