
Android知识碎碎片
文章平均质量分 82
本栏集中记录在实际Android开发过程中所遇到的问题以及解决方法。
uweii
悟已往之不谏
知来者之可追
展开
-
CollapsingToolbarLayout里面添加textview,一直重绘布局报错
布局如下<com.google.android.material.appbar.AppBarLayout android:id="@+id/appBarLayout" android:layout_width="match_parent" android:layout_height="wrap_content" app:expanded="false"&...原创 2020-03-27 10:30:53 · 849 阅读 · 0 评论 -
Android监听输入法的状态:弹起,关闭
Android监听输入法的状态:弹起,关闭在根视图添加一个id,@+id=root_view,如监听布局的状态@BindView(R.id.rl_rootview)FrameLayout frameLayout;frameLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.On...原创 2020-03-23 13:28:54 · 1768 阅读 · 1 评论 -
RecylerView下拉刷新与上拉加载(二)
效果图:此篇博客是在上一篇:Recylerview上拉加载与下拉刷新(一)的升级版,如果有不清楚先看Recylerview上拉加载与下拉刷新(一)(p.s. 这是我正在写的一个毕业设计,前端App使用Rxjava + Retrofit + EventBus; Java后台是 SSMgithub地址:https://github.com/uweii/SHShop 每天都会更新...原创 2019-05-19 21:35:53 · 373 阅读 · 0 评论 -
Activity全屏
效果图:实现起来很简单:在theme里面新建一个继承AppTeme, 比如我命名为AppTheme.NoActionBar.FullScreen: <style name="AppTheme.NoActionBar_Goods_Detail"> <item name="windowActionBar">false</item> ...原创 2019-05-12 17:29:37 · 198 阅读 · 0 评论 -
自定义EditText控制DrawableRight的显示或隐藏
目的:有时候在做搜索功能时,如果EditText有内容,则在右侧显示一个删除图标,点击删除图标删除内容;当EditText内容为空时,则隐藏删除图标。效果图:p.s. 这是我正在做的一个毕业设计,Android + JavaWeb。前端app,后台都会有。我每天会往Github上提交代码,这个上面会有完整的项目。欢迎star,fork。GitHub:https://github...原创 2019-05-12 11:36:08 · 1898 阅读 · 0 评论 -
动态设置状态栏背景颜色和状态栏字体颜色
先看效果图:(上图为我的毕业设计,我会每天提交代码到Github,欢迎star,fork。GitHub链接:https://github.com/uweii/SHShop)1.设置状态栏背景颜色//拿到window Window window = activity.getWindow(); //取消设置透明状态栏,使 ContentView 内容不再覆盖状态栏 windo...原创 2019-05-11 13:57:57 · 2775 阅读 · 0 评论 -
ButterKnife在Activity和Fragment中的使用小结
以前在布局中找id时,需要根据findViewById()来找;现在有了ButterKnife则可以省去一大部分时间,他是利用了依赖注入的原理,以便达到低耦合。要使用ButterKnife,我们先要添加依赖。在build.gradle(Module:app)中添加implementation 'com.jakewharton:butterknife:8.8.1'annotationPr...原创 2019-04-30 01:20:18 · 2206 阅读 · 0 评论 -
禁止ViewPager左右滑动
最近在做一个二手校园交易平台的毕设,想达到仿咸鱼的tab效果。目前效果:但是咸鱼的是不可以左右滑动的,怎么禁止ViewPager左右滑动呢?建一个ViewPager的子类,重写它的 onInterceptTouchEvent 和onTouchEvent方法:package com.up.uwei.shshop.view;import android.content.Cont...原创 2019-04-26 22:38:35 · 6574 阅读 · 7 评论 -
clipChildren仿咸鱼底栏
咸鱼的底栏:最开始下面的tab我想的是使用Tablayout,但是 最中间的凸出不好实现,所以改用了LinearLayout布局,使用clipClildren属性,该属性控制是否允许子布局超出父布局。默认为true。显然,我们应该在根布局设置为clipClildren = false。然后使用android:layout_gravity="bottom" 来使超出的部分的对齐...原创 2019-04-20 12:31:14 · 320 阅读 · 0 评论 -
dialog设置背景透明
默认dialog是一个白底方形的,如果在xml设置中设置了一种边角是弧形的背景图片,那么显现的dialog角落就会留白,解决办法:dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);效果:只会显示你设置的圆弧形的背景图,dialog四角不会留白。...原创 2018-09-04 15:37:50 · 8931 阅读 · 0 评论 -
Recylerview的adapter.setHasStableIds(true)
Recylerview的item是 ImageView和 TextView构成,当数据改变时,我们会调用 notifyDataSetChanged,这个时候列表会刷新,为了使 url 没变的 ImageView 不重新加载(图片会一闪),我们可以用setHasStableIds(true);使用这个,相当于给ImageView加了一个tag,tag不变的话,不用重新加载图片。但是加...原创 2018-09-04 09:55:03 · 15544 阅读 · 0 评论 -
Recylerview添加分割线与自定义分割线
效果图:默认分割线: 自定义分割线: 看代码:1. 添加默认分割线:mRecylerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));2. 自定义分割线(分两步,①创建drawa...原创 2018-07-22 21:01:41 · 519 阅读 · 2 评论 -
Android连接蓝牙打开SCO,实现蓝牙耳机输入
在很多应用中,都存在使用蓝牙进行录音。首先我们写一个BroadcastReceiver,进行监听蓝牙状态改变。public class BluetoothStatusRec extends BroadcastReceiver{ private String TAG = "BluetoothStatusRec"; public static AudioManager mAu...原创 2018-07-17 13:46:38 · 14158 阅读 · 1 评论 -
Android隐藏自带标题栏,显示自定义标题栏。
有些时候,我们想要自定义标题栏,比如在标题栏上放个 搜索 的SearchView。当然就是隐藏原本自带的标题栏咯,先在style.xml定义一下样式:然后在要自定义标题栏的activity里来使用这个主题,在manifest.xml中找到这个activity来设置theme:接着,在这个activity对应的layout布局文件中 放一个ToolBar组件,以此来替代自带的 主...原创 2018-05-28 12:12:40 · 18371 阅读 · 3 评论 -
初识JNI---Android
JNI(java native interface)java本地接口,可以在java中调用本地方法(包含但不仅限于C/C++).使用jni的优点,本地方法执行速度快,重要内容放在.so中不易被反编译。在Android Studio中配置NDK(native development kit)Android中的jni。打开setting,按照下图找到并勾选CMAKE, LLDB, NDK.点击appl...原创 2018-05-06 20:18:30 · 188 阅读 · 0 评论 -
Android中的垃圾回收
*内存泄露在Android中,内存泄露是指不再使用的对象依然占用内存,或者它们占用的内存没有得到及时释放,从而造成内存空间的不断减少现象。由于Android应用可使用的内存较少,发生内存泄露会使得内存使用更加紧张,甚至最终由于内存耗尽而发生OOM(OutOfMemory)错误,导致应用崩溃。*软引用使用SoftReference关联的对象,用来表示一些有用但不是必须的对象,被SoftReferen...原创 2018-04-25 11:02:50 · 378 阅读 · 0 评论 -
Handler造成的内存泄漏
来看下面代码,会引起内存泄漏public class HandlerActivity extends Activity { //可能引起内存泄漏 private final Handler mHandler = new Handler(){ @Override public void handleMessage(Message msg){ //... } }}Handle...原创 2018-04-24 18:58:55 · 254 阅读 · 0 评论 -
Serializable和Parcelable
Serializable 是java语言的特性,它是最简单也是最广泛的序列化方案之一,直接让类实现Serializable接口就可以实现序列化。很简单直接继承就好。它的缺点是:使用反射机制,在序列化的过程中会创建很多临时对象,容易触发垃圾回收,序列化的过程比较慢。Serializable 是 JDK 提供的接口,这种序列化方式是基于 磁盘 或者 网络的,而Parcelable 是 Android ...原创 2018-04-22 19:33:29 · 128 阅读 · 0 评论 -
Android内存泄漏
1,静态变量导致的内存泄漏在dalvik虚拟机中,static变量所指向的内存引用,如果不把它设置为null,GC【garbage collection】是永远不会回收这个对象的,所以会导致这个activity无法正常销毁:public class MainActivity extends Activity{ private static Context mContext; @o...原创 2018-03-25 20:56:28 · 206 阅读 · 0 评论 -
Android线程池
Android中的线程池提到线程池就必须说一下线程池的好处,线程池的优点可以概括为以下三点:(1)重用线程池中的线程,避免因为线程的创建和销毁所带来的性能开销。(2)能有效控制线程池的最大并发数,避免大量的线程之间因互相抢占系统资源而导致的阻塞现象。(3)能够对线程进行简单的管理,并提供定时执行以及指定间隔循环执行等功能。Android中的线程池的概念来源于java中的Executor,Execu...原创 2018-03-23 11:13:08 · 186 阅读 · 0 评论 -
Fragment的生命周期图
原创 2018-03-22 21:25:58 · 316 阅读 · 0 评论 -
Looper的工作原理
Looper 在 Android 的消息机制中扮演着重要的角色,具体来说就是它会不停地从 MessageQueue 中查看是否有新消息,如果有新消息就会立刻处理并删除消息,否则就一直阻塞在那里。我们知道,Handler 的工作需要 Looper,没有 Looper 的线程就会报错。在一个 Activity 主线程中,我们可以直接使用 Handler,因为 在activity 主线程中,系统会通过 ...原创 2018-03-22 19:46:24 · 1597 阅读 · 0 评论 -
Android获取缓存大小与删除缓存
先上效果图:1> 获取缓存大小: private static long getFolderSize(File file) { long size = 0; File[] files = file.listFiles(); //获取file目录的所有file for(int i=0; i< files.length;i++)...原创 2018-03-14 14:30:45 · 442 阅读 · 0 评论 -
Android缓存List到本地Cache
很多时候 我们的应用都要从网络获取数据,不可能每次打开它的时候,都去请求网络获取数据,这样很耗费流量。一个解决的办法是将获取的数据缓存起来,缓存到本地,下次打开应用时,先从缓存里读取数据,如果为空再网络上请求。效果图:很明显可以看到: 当我第一次进入应用时【没有缓存】,应用会去从网络加载。当我第二次进入时,因为第一次已经将获取的到数据缓存到了本地,所以就没有从网络获取而是直...原创 2018-03-14 14:15:18 · 4905 阅读 · 0 评论 -
Android简单更护主题(换肤)
这篇博客记录的是自己实现一个简单的换肤功能,效果图:嗯,分三个步骤。1) 自定义属性,然后在style里面写出两种style的属性值attrs.xml里自定义属性<?xml version="1.0" encoding="utf-8"?><resources> <attr name="main_bg" format="reference|color"原创 2018-03-13 15:58:13 · 251 阅读 · 0 评论 -
Android实现双击back键退出程序
在很多app中,都是点击一次back键,然后 弹出一个弹窗 "再点一次退出应用",然后在 一段时间内再次点击就能退出应用,这样还能防止用户误点back键退出应用。效果图如下:emm,很简单。就是重写了onKayDown的方法。用三个变量来实现 . long firstClick, secondClick;boolean isFirstClick = true;如果点击的是back键,首先判断是...原创 2018-03-13 09:39:36 · 425 阅读 · 0 评论 -
Android个性化Toast
这篇博客写的是 个性化Toast,效果图:实现很简单,还用的是Toast, 只不过是给它setView了。看代码1. 写toast弹出的布局toast_layout.xml:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res...原创 2018-03-13 08:49:17 · 347 阅读 · 0 评论 -
RecylerView实现长按拖拉更改item位置
效果图:实现步骤:1.新建一个类继承 ItemTouchHelper.Callback:class ItemDrag extends ItemTouchHelper.Callback{ //设置可移动的标志,我用的GridLayout,所有可移动标志为up,down,left,right. 如果是LinerLayout,就是up,down. @Override...原创 2018-03-11 20:57:57 · 1740 阅读 · 0 评论 -
Fragment嵌套Fragment要用getChildFragmentManager
前提:这次项目中采用了在fragment中添加了一个viewpager的形式,viewpager中切换的是fragment。BUG:退出了那个包含viewpager的fragment并重新进入,切换viewpager时,不调用fragmentpageradapter适配器的getItem()方法,在显示上,出现viewpager的显示数量增多、显示数据不正确(这个情况只在初始化fragment时,...原创 2018-03-08 19:05:13 · 1154 阅读 · 0 评论 -
Android: 为button添加红色边框和透明底色
效果图:首先我们写button的样式:在 drawable目录 下新建 button_bg_style.xml 文件:<?xml version="1.0" encoding="utf-8"?><shape android:shape="rectangle" xmlns:android="http://schemas.android.com/apk/res/an...原创 2018-03-08 10:04:03 · 4755 阅读 · 0 评论 -
解决Picasso加载图片到非ImageView里,第一次不会调用onBitmapLoaded
我想用Picasso将图片加载显示到LinerLayout里,用 into(target), 发现第一次并没有调用onBitmapLoaded,第二次才会调用 onBitmapLoaded, 但是每次都会调用onPrepareLoad。我遇到的bug 上述代码,第一次执行的时候,不会回调onBitmapLoaded, 第二次执行才会调用。。emmm,然后在stackoverflow上找到了...原创 2018-03-06 22:30:06 · 1582 阅读 · 0 评论 -
获取NavigationView里面headerLayout布局的部件
我想直接通过findViewById(R.id.nav_head_root), findViewById(R.id.every_day_title)来取到nav_header_main布局里面 id 为 nav_head_root 的 LinerLayout和 id 为 every_day_title 的 TextView ,却返回nullnav_header_...原创 2018-03-06 21:09:51 · 4898 阅读 · 15 评论 -
刷新RecylerView,item数据错位
刷新RecylerView,item数据错位先看这个小bug,注意看星星后面的 数字,刷新后,第1个 数字会变成 第2个数字,第2个 会变成 第3个。。。。emmm,查了资料发现adapter有个setHasStableIds(boolean )方法,看看点进去看看:可以看到注释说 “给每个item一个唯一的标志id”,这样当adapter调用notifyDatasetChanced的时...原创 2018-03-06 16:34:56 · 601 阅读 · 0 评论 -
桌面部件--恋爱小插件
先写桌面部件的布局 widget_love.xml :<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layou...原创 2018-02-18 10:45:13 · 1095 阅读 · 0 评论 -
计算两个日期相隔的时间
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); java.util.Date now = new Date(); //获取当前日期 java.util.Date date=df.parse("2004-01-02 11:09:24"); long l=now.getTime()-date.getT...原创 2018-02-18 10:19:44 · 2152 阅读 · 0 评论 -
FloatingActionButton的隐藏与显示
在用RecylerView展示数据的时候,在右下方显示一个悬浮的button,它的功能是:在上拉时隐藏button,下拉时显示button,点击这个button回到顶部。如图:布局如下: <!--不加上CoordinatorLayout,FloatActionButton不会显示--><android.support.design.widget.Co...原创 2018-02-03 20:38:51 · 6544 阅读 · 0 评论 -
ViewPager的使用
用ViewPager结合TabLayout显示切换fragment很常见。看看viewpager的使用吧这个mFragmentList 里面都是Fragment,用来切换的Fragment然后构建Adapter接着为它设置adapter就可以实现滑动切换不同的Fragment啦。不仅如此,还可以将TabLayout与ViewPager联合原创 2018-02-03 15:01:44 · 234 阅读 · 0 评论 -
Recylerview上拉加载与下拉刷新(一)
这篇博客记载了,recylerview上拉加载,下拉刷新,当recylerview是GridLayout时设置显示footView[提示正在加载中的布局]占满一行,和监听recylerview滑到最后一项就加载数据。在用Recylerview展示数据时,不可能一次性获取全部数据,而是用户需要多少就从网络获取多少,因此在RecylerView里经常时滑到最后一条数据时就去加载更多的数据。如下...原创 2018-02-02 22:38:41 · 624 阅读 · 0 评论 -
TabLayout与ViewPager关联,不显示Tab问题
使用TabLayout和ViewPager联动时,出现一个问题:为TabLayout设置viewpager后,不显示tab栏<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"原创 2018-01-31 16:02:39 · 1670 阅读 · 1 评论 -
Activity的启动模式
首先说一下Activity为什么需要启动模式。我们知道,在默认情况下,当我们多次启动同一个Activity的时候,系统会创建多个实例并把它们一一放入任务栈中,当我们单击back键,会发现这些Activity会一一回退。任务栈是一种“后进先出”的栈结构,这个比较好理解,每按一下back键就会有一个Activit出栈,直到栈空为止,当栈中无任何Activity的时候,系统就会回收这个任务栈。知原创 2018-01-30 14:51:14 · 305 阅读 · 0 评论