简-android
小Niu
互联网的存在,是为了让人类更美好。
SO,我们要努力。
展开
-
最简单的自定义ViewGroup
FlowLayout子View们的宽度加起来超过一行,会自动换行显示。核心就两步:在Layout中的onMeasure方法中调用子View的measure(),这儿虽然用的是measureChild方法,但最终还是去调用子View的measure()在Layout中的onLayout方法中调用子View的layout()再复杂的自定义View都是这样从最简单的形式,不断增加...原创 2020-01-08 23:25:00 · 527 阅读 · 0 评论 -
关于杀不死的进程QQ/微信?
想想就可以了,它的进程杀不死是因为,有些厂商如小米、华为等公司为了更好的用户体验,将其设置为了白名单,所以才杀不死的,如果不相信,可以将包名改成跟QQ一样试下。原创 2016-12-24 11:53:29 · 1967 阅读 · 0 评论 -
videoView实现全屏的方法
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int width = getDefaultSize(0, widthMeasureSpec); in原创 2016-12-24 11:50:08 · 535 阅读 · 0 评论 -
Drawable之getIntrinsicWidth()和getIntrinsicHeight()?
顾名思义他们是用来取得Drawable的固有的宽度和高度。那么问题就来了:我们有时候通过这两个方法取到的宽和高和实际的并不一样,这是怎么回事呢?Drawable这个类是对所有可以画的东西的抽象,他可以是一张图片,也可以是实体的颜色,线等等,我们不能简单的认为它是一张图片。笔者经过实验发现,我的测试设备dpi是320,而android为了让同一个view在不同dpi的设备上大小尽量保持一致,所以其图片原创 2016-12-24 11:49:01 · 437 阅读 · 0 评论 -
onAttachedToWindow和onDetachedFromWindow?
onAttachedToWindow 是view 本身的回调,用于初始化一些东西相当于onstart 。当view 被添加到window中,被绘制之前的回调。如addview(this view); onDetachedFromWindow 是view 本身的回调,用于销毁一些东西onstop,当view被从window中删除时的回调。如 removeview(this view);原创 2016-12-24 11:47:29 · 650 阅读 · 0 评论 -
ViewTreeObserver?
OnGlobalLayoutListener 是ViewTreeObserver的内部类,当一个视图树的布局发生改变时,可以被ViewTreeObserver监听到,这是一个注册监听视图树的观察者(observer),在视图树的全局事件改变时得到通知。ViewTreeObserver不能直接实例化,而是通过getViewTreeObserver()获得。除了OnGlobalLayoutListene原创 2016-12-24 11:46:23 · 255 阅读 · 0 评论 -
removeAllViews()和removeAllViewsInLayout()之间的区别?
removeAllViewsInLayout:只能移除在自身布局中已计算好的所包含的子view,若子view,还未计算测量,就移除不掉; removeAllViews:方法内也调用了removeAllViewsInLayout(), 但是后面还调用了requestLayout(),这个方法是当View的布局发生改变会调用它来更新当前视图, 移除子View会 更加彻底.所以除非必要, 还是原创 2016-12-23 21:37:02 · 591 阅读 · 0 评论 -
View.inflate()与LayoutInflater.inflate()的区别?
View.inflate()就是对LayoutInflater.inflate()的封装,用哪个都可以,这样的目的是为了简化代码。原创 2016-12-23 21:35:37 · 287 阅读 · 0 评论 -
getItemViewType()、getViewTypeCount()?
作用:可以很简单方面的在一个listview里添加多种布局,不用向以前那样隐藏、显示了。原创 2016-12-23 21:34:44 · 514 阅读 · 0 评论 -
ListView自动滚动到底部?
方法一.msgListView.setSelection(adapter.getCount()-1); 方法二.msgListView.setSelection(msgListView.getBottom());原创 2016-12-23 21:34:16 · 611 阅读 · 0 评论 -
RN(React Native)开发Android App的新技术?
React Native是facebook刚开源的框架,可以用javascript直接开发原生APP。 优点: 不用更新app,只需更新云端的代码,整个界面就全变了。原创 2016-12-23 21:33:02 · 480 阅读 · 0 评论 -
Merge、inflate()、include互相的练习?
Merge: a. 布局顶结点是FrameLayout且不需要设置background或padding等属性,可以用merge代替,因为Activity内容试图的parent view就是个FrameLayout,所以可以用merge消除只剩一个。 b. 某布局作为子布局被其他布局include时,使用merge当作该布局的顶节点,这样在被引入时顶结点会自动被忽略,而将其原创 2016-12-23 21:32:29 · 265 阅读 · 0 评论 -
SVN?
慕课网有相关教学视频 组成:TortoiseSVN(小乌龟)、VisualSVN Server(服务器) 如果就是在本地管理代码,一个小乌龟也足以。 安装过程:先安装VisualSVN Server,在安装TortoiseSVN(小乌龟)。 TortoiseSVN(小乌龟): 下载地址:http://tortoisesvn.net/downl原创 2016-12-23 21:30:34 · 228 阅读 · 0 评论 -
Android Studio关联源码?
找到文件:打开C:\Users\用户.AndroidStudio2.1\config\options 这个路径,找到jdk.table.xml这个文件 <sourcePath> <root type="composite"> <root type="simple" url="file://$USER_HOME$/AppData/Local/Android/原创 2016-12-23 21:27:29 · 235 阅读 · 0 评论 -
遍历过程怎么对List数组进行增、删、改、查?
原则上,java规定不能在List遍历的同时对其进行改变,会报异常,以前的方法是在建一个List集合,将想要改变的List中的值传入里面,遍历完成后,在对其改变。新方法是介绍一个API,CopyOnWriteArrayList,其原理也是对原数据进行一次复制,与老方法同理,最大的好处就是封装了代码,不用在写,有好处,也有缺点,缺点就是内存开销比较大,如无必要,慎用。原创 2016-12-23 21:26:25 · 303 阅读 · 0 评论 -
android 在一个应用中启动另一个应用?
需要:目标程序的包名、主类名。 代码:Intent intent = new Intent(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_LAUNCHER);ComponentName cn = new ComponentName("com.negier.bitmap", "com.negier.bitmap.MainActivi原创 2016-12-24 11:52:13 · 244 阅读 · 0 评论 -
invalidate,postInvalidate区别?
invalidate:用在UI线程; postInvalidate:用在非UI线程。原创 2016-12-24 11:53:04 · 369 阅读 · 0 评论 -
TabLayout您可能不知道的实用用法
一、修改点击的动画函数:setUnboundedRipple这是默认的点击的动画我们用代码修改一下:mGlueTabLayout.setUnboundedRipple(true);这是之后的效果:二、设置下划线指示器的宽度不要填充完(动态的根据TabView的宽度来设置自身的宽度)函数:setTabIndicatorFullWidth这是默认的效果我们用代码修改一下:m...原创 2018-12-03 17:01:38 · 287 阅读 · 0 评论 -
android_巧用SharedPrefrences储存ArrayList等Collection的实现类
public class SPUtils { public static final String SP_NAME="needYourName";//SharedPreferences的名字 public static void setSPCollection(Context context, Collection collection, String collectionName)原创 2017-01-28 18:50:34 · 371 阅读 · 0 评论 -
View的事件分发机制
【分享】 从某处看到的一个关于View的事件分发机制的伪代码,觉得很不错,故此分享,不是原创。public boolean dispatchTouchEvent(MotionEvent ev){ boolean consume=false; if(onInterceptTouchEvent(ev)){ consume=onTouchEvent(ev); }e翻译 2017-01-24 18:21:38 · 207 阅读 · 0 评论 -
getChildDrawingOrder()?
/** * 这里主要是改变ViewPager的绘制顺序,目的让positon指向的最后一个绘制,使其层级最高,不会被其它Page覆盖。 * @param childCount ViewPager的总页面 * @param i 0~ViewPager的总页面-1 每次移动ViewPager,i都会0,1,2,3,......全部走一遍 * @return */原创 2016-12-24 12:06:46 · 1701 阅读 · 1 评论 -
view.getX和view.getTranslationX区别?
1.view.getTranslationX计算的是该view的偏移量。初始值为0,向左偏移值为负,向右偏移值为正。 2.view.getX相当于该view距离父容器左边缘的距离,等于getLeft+getTranslationX。注意:getX是相对于父布局,就是包裹它的爹。原创 2016-12-24 12:05:26 · 503 阅读 · 0 评论 -
android获取标题栏、状态栏的高度?
状态栏:Rect rect = new Rect();getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);rect.top即为状态栏的高度。标题栏: getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();注意要在onWindowFocusChanged里用这原创 2016-12-24 12:03:57 · 336 阅读 · 0 评论 -
onWindowFocusChanged?
Activity生命周期中,onStart, onResume, onCreate都不是真正visible的时间点,真正的visible时间点是onWindowFocusChanged()函数被执行时。原创 2016-12-24 12:00:34 · 247 阅读 · 0 评论 -
LayoutParams、MarginLayoutParams、RelativeLayout.LayoutParams的区别?
LayoutParams的属性:int height、int width。 MarginLayoutParams的属性:int leftMargin、int topMargin、int rightMargin、int bottomMargin。 RelativeLayout.LayoutParams的属性:自己特有的一些属性,RelativeLayout有boolean alig原创 2016-12-24 11:59:14 · 695 阅读 · 0 评论 -
getX和getRawX、getY和getRawY?
getX、getY:x,y是相对于控件本身左上点的相对位置; getRawX、getRawY:rawx,rawy是相对于屏幕的位置。原创 2016-12-24 11:58:25 · 634 阅读 · 0 评论 -
NDK和JNI的区别?
JNI(Java Native Interface)java调用本地接口 的技术名词 NDK(Native Developer Kit)谷歌给开发人员的工具包 NDK 是纯 C 哦,JNI就像戴套子一样,Java 要搞 C ,中间必须隔着个 JNI。原创 2016-12-24 11:57:29 · 446 阅读 · 0 评论 -
android2.2.2初使用NDK?
倒腾了一下午,但其实没必要,android2.2.2对NDK开发已经非常便捷了。 只要预先在Android SDK里下载CMake、LLDB、NDK,然后在创建项目的时候勾上Include C++ Support。原创 2016-12-24 11:56:44 · 204 阅读 · 0 评论 -
Sax和Pull解析Xml的异同点?
Sax和Pull都是基于流的解析器。但是SAX在解析的过程中是不可控的,而PULL在解析的过程中是可控的,随便找个sax和pull的例子比较一下就可以发现,pull是一个while循环,随时可以跳出,而sax不是,sax是只要解析了,就必须解析完成。原创 2016-12-24 11:55:49 · 255 阅读 · 0 评论 -
点击应用程序图标,直接回到之前的Activity界面,这种效果是怎么实现的呢?
当有且只有一个activity时,通过重写按下Back键的回调函数,转成Home键的效果即可。@Override public void onBackPressed() { Intent home = new Intent(Intent.ACTION_MAIN); home.addCategory(Intent.CATEGORY_HOME); startActivit原创 2016-12-24 11:55:01 · 590 阅读 · 0 评论 -
神奇的launchMode?
singleTask:无论start多少个activity,一但回到设有这个LaunchMode的activity,其余start的activity都会消灭。(我常用在activity的finish上)原创 2016-12-23 21:24:59 · 175 阅读 · 0 评论 -
android R文件消失?
99%的原因都是资源文件夹里面有错的地方,也就是res文件夹。 解决方案:clean一下项目,查看console提示。原创 2016-12-23 21:23:52 · 288 阅读 · 0 评论 -
获取当前运行的进程名?
public static String getMyProcessName() { try { File file = new File("/proc/" + android.os.Process.myPid() + "/" + "cmdline"); BufferedReader mBufferedReader = new Buffe原创 2016-12-23 21:22:37 · 578 阅读 · 0 评论 -
BaseAdapter getItem(int position)的作用?
返回当前item显示的数据,方便在Activity中的onItemClick方法中调用。 也可以将BaseAdapter理解成一个List集合,而getItem就是根据索引获取集合中的一个对象。就和List的get方法一样。原创 2016-12-23 20:45:53 · 1152 阅读 · 0 评论 -
setImageDrawable、setBackgroundDrawable的区别?
setImageDrawable:代表以这个drawable的实际大小放到imageview中,不会拉伸或失真等情况,因为其是等比例缩放。 setBackgroundDrawable:代表以这个drawable的作为背景放到imageview中填充imageview的宽高,即ImageView多高多宽,drawable就相应放大至多宽多高。原创 2016-12-23 20:45:15 · 1525 阅读 · 0 评论 -
判断应用是系统程序还是用户程序?
if((context.getPackageManager().getPackageInfo(包名,0).applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) !=0)如果值为true,说明是系统程序。 如果值为false,说明是用户程序。原理解析ApplicationInfo.FLAG_SYSTEM=public static fina原创 2016-12-23 20:44:34 · 587 阅读 · 0 评论 -
Formatter.formatFileSize()原理?
原理就是除以1024.formatFileSize()叫你传入一个long类型的值,首先它怎么知道这是B、KB、MB、G呢?它会以为这是B(1KB=1024B),然后除以1024,单位就是KB,看是否大于900,若大于,就在除以1024,单位就是MB,然后 继续判断,… 这就是它的原理,它最先会把所有传入的值认为是B,然后判断其是否大于900,大于在除以1024。原创 2016-12-23 20:40:24 · 1184 阅读 · 0 评论 -
StringBuffer、StringBuilder的区别?
StringBuffer:线程安全的,速度较慢 StringBuidler:线程不安全的,速度较快(单线程推荐)原创 2016-12-23 20:37:50 · 209 阅读 · 0 评论 -
获取总内存?
ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();activityManager.getMemoryInfo(memoryInf原创 2016-12-23 20:36:30 · 192 阅读 · 0 评论 -
ActivityManager、PackageManager、ComponentName(一句话总结)?
ActivityManager:获取系统中正在运行的Activities,包括进程(Process)等、应用程序/包、服务(Service)、任务(Task)、内存信息。 PackageManager:获取系统中应用程序的信息。 ComponentName:是用来打开其他应用程序的Activity或服务的。(也可以用setClass代替) new ComponentName(原创 2016-12-23 20:33:50 · 263 阅读 · 0 评论