
android
文章平均质量分 64
时代我西
笨鸟先飞,勤能补拙!
展开
-
Android环境搭建
发现每次进新公司都要搭建环境,经常要去百度,想着自己可以简单记下来,这样就不需要每次去 搜索了。PS:我的电脑环境是 WIN 64位的,其他平台资源还是需要去网上下载过1.先安装JDK,自己存了个1.8的在网盘https://pan.baidu.com/s/11lMOwGJA09NjkQWvDnIeag下载默认安装地址,配置环境变量,我的电脑>>属性>>高级...原创 2019-09-19 14:59:55 · 123 阅读 · 0 评论 -
Android获取mp3音频文件播放总时长
Android获取mp3音频文件播放总时长一般是需要文件的绝对路径,需要读取文件,转成媒体类解析,最好获取播放时长,然后关闭资源。/*** 获取音频文件的总时长大小** @param filePath 音频文件路径* @return 返回时长大小*/public long getAudioFileVoiceTime(String filePath) {long mediaPlayerDuration = 0L;if (filePat...原创 2022-03-12 17:42:04 · 5298 阅读 · 0 评论 -
Android Studio jni/c++代码提示和跳转
Android Studio jni/c++代码提示和跳转有2中情况:1,项目初始创建的时候,就选择支持native;2,项目开发过程中,添加native。出现无法跳转的大部分在第二种情况,因为一般第一种都会对于好版本。出现C++代码无法跳转,多半原因是版本没有对齐1.SDK 里面的NDK和CMAKE版本对不上,记得高版本和高版本对应,低版本和低版本不清楚对于的可以都选最低,或者最高也可以直接在配置文件里面指定版本...原创 2022-03-11 18:01:59 · 5103 阅读 · 1 评论 -
Android简单的布局优化
简单的布局优化Android系统每隔16ms发出VSYNC信号,触发对UI进行渲染,那么整个过程如果保证在16ms以内就能达到一个流畅的画面。检测:1. 设置 -> 开发者选项 -> 调试GPU过度绘制 -> 显示GPU过度绘制2. ADB指令打开调试GPU过度绘制 adb shell setprop debug.hwui.overdraw show 关闭调式GPU过度绘制 adb shell setprop debug.hwui.overdra...原创 2022-03-11 11:42:17 · 1935 阅读 · 0 评论 -
Android ImageView 的scaleType 属性
Android ImageView 的scaleType 属性 枚举值 ImageView.ScaleType CENTER 使图像在视图中居中,但不执行缩放。 ImageView.ScaleType CENTER_CROP 均匀缩放图像(保持图像的纵横比),使图像的两个尺寸(宽度和高度)等于或大于视图的相应尺寸(减去填充)。 ImageView.ScaleType原创 2022-03-11 11:40:57 · 1460 阅读 · 0 评论 -
Android EditText保留小数点后两位
Android EditText保留小数点后两位设置Edittext输入在Android xml文件里配置如下属性值:android:numeric="decimal"代码里面addTextChangedListener(new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}...原创 2022-03-11 11:40:12 · 629 阅读 · 0 评论 -
CountDownTimer 倒计时器
CountDownTimer倒计时器计划一个倒计时,直到未来的某个时间,并定期通知//30000–从调用start()到倒计时结束并调用onFinish()的未来毫秒数。1000–接收onTick(长)回调的时间间隔。new CountDownTimer(30000, 1000) {public void onTick(long millisUntilFinished) {mTextField.setText("seconds remaining...原创 2022-03-11 11:28:52 · 695 阅读 · 0 评论 -
Android 隐藏虚拟按键和沉浸式状态栏
private void hideNavigationBar() { Window window = this.getWindow(); window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION//布局位..原创 2022-03-11 11:15:21 · 2208 阅读 · 0 评论 -
Android之 看“马达”如何贯通Android系统 (从硬件设计 --> 驱动 --> HAL --> JNI --> Framework --> Application)
在Android 2.3(Gingerbread) 系统的时候,我写过一篇关于“Android 震动马达系统“的文章,当时的Linux内核还是2.6版本的。写那篇文章的目的,是想彻底的了解从硬件到驱动,再到应用的运作流程。完成了之后,文章一直仍在草稿箱里面没发表;今天看到,决定整理一下,重新发表。目的是想和大家分享自己对Android系统的一点认识:以马达为代表,来考究“Android是如何一步步工作的。它从硬件设计,到Linux驱动,再到HAL,再到JNI,再到Framework,最后到被应用...转载 2022-03-08 20:51:49 · 746 阅读 · 0 评论 -
LeakCanary 使用
LeakCanary github地址:LeakCanary要使用 LeakCanary,请将leakcanary-android依赖项添加到应用程序的build.gradle文件中:dependencies { // debugImplementation because LeakCanary should only run in debug builds. debugImplementation 'com.squareup.leakcanary:leakcanary-android:原创 2022-03-07 21:42:49 · 2716 阅读 · 0 评论 -
Android软键盘弹不出的问题
在布局加载的过程中是无法弹出软键盘的,所以需要适当的延迟一下软键盘的弹出//获取焦点editText.setFocusable(true);editText.setFocusableInTouchMode(true);editText.requestFocus();//延迟弹出软键盘Timer timer = new Timer();timer.schedule(new TimerTask(){@Overridepublic void run() {InputMethodManage原创 2022-03-03 17:33:56 · 4022 阅读 · 0 评论 -
Android延迟执行
1.直接休眠,只能用于次线程中//sleep设置的是时长Thread.sleep(1000);2.定时器,适用范围比较广TimerTask task = new TimerTask() {@Overridepublic void run() {//todo}};Timer timer = new Timer();timer.schedule(task, 1000);3.Handler,次线程使用的时候注意要记得先实现handler loopnew Handler()原创 2022-03-03 17:05:25 · 663 阅读 · 0 评论 -
Android 设置Edittext获取焦点并弹出软键盘
Android 设置Edittext获取焦点并弹出软键盘/*** EditText获取焦点并显示软键盘*/public static void showSoftInputFromWindow(Activity activity, EditText editText) {editText.setFocusable(true);editText.setFocusableInTouchMode(true);editText.requestFocus();//显示软键盘activity.get原创 2022-03-03 16:58:35 · 3808 阅读 · 0 评论 -
Android控件默认点击效果
Android控件默认点击效果Android最简单的默认点击效果:android:background="?android:attr/selectableItemBackground"设置前景色,前景色:foreground属性只能给控件和帧布局设置,其它的布局设置无效果,具体看Android源码;android:foreground="?android:attr/selectableItemBackground"默认有两种点击效果?android:attr/selectable原创 2022-03-03 16:29:57 · 1484 阅读 · 0 评论 -
Android 测试知识点总结
这里总结了一些Android测试知识点一. 安装启动卸载启动的方式分为:首次启动,热启动,冷启动, 在各个操作系统上(Android>=4.3,ios>=7.0,根据各个应用要求的最低系统)能安装成功,分别安装在手机内存或者sd卡上都能成功。app安装完成后的运行,可正常打开软件。app打开后,是否有加载状态进度提示,引导页是否正常。 应用管理器强行停止后启动, 应用管理器中清缓存启动。 正常卸载 安装分为全安装,升级覆盖安装..原创 2022-03-03 16:05:41 · 1377 阅读 · 0 评论 -
ViewGroup中bringToFront
ViewGroup中bringToFrontbringToFront就是把当前View提到画面图层的最上面来显示 public void bringToFront() { if (mParent != null) { mParent.bringChildToFront(this); } }Android中的ViewGroup是通过一个Array来保存其Children,当调用某个childView的bringToFront时,是将原创 2022-03-02 09:23:41 · 775 阅读 · 0 评论 -
Android里面的架构
Android里面的架构为什么需要架构? 一个Activity走天下,包含各种模块和功能 臃肿类太多 不同功能,不同层次拎不清楚,混合在一起 重复代码太多,复用性为差 无法协作开发, 耦合严重,bug太多 等等 MVC最经典的是MVC架构。 XML的View层 Activity/Fragment的Controller层 数据Model层。 正在上传…重新上传取消优点:由于原创 2022-03-01 21:59:34 · 155 阅读 · 0 评论 -
View的弹性滑动
弹性滑动弹性滑动的共同思想:将一次打的滑动分为若干次小的滑动并在一个时间段内完成。使用Scroller前面讲过用法了,Scroller本身不能实现view滑动,关键在于startScroll后的重新绘制,会在draw里面去调用computeScroll,再次执行获取x\y去执行滑动重绘。设计很巧妙,没有对view的依赖,也没有定时器的使用。private final Scroller mScroller;public ViewDemo(Context context) {..原创 2021-10-28 19:42:45 · 145 阅读 · 0 评论 -
View 的滑动
View的滑动主要有三种方式:View本身的srollTo/srollBy,通过动画,通过改变View的LayoutParams重新布局。1.使用srollTo/srollBy/*** Set the scrolled position of your view. This will cause a call to* {@link #onScrollChanged(int, int, int, int)} and the view will be* invalidated..原创 2021-10-28 19:41:17 · 78 阅读 · 0 评论 -
View的基础知识
View的基础知识View是界面层的控件的一种抽象,可以使一组或者多组控件构成的一组控件。View的位置由四个顶点决定,top、left、right、buttom,这个坐标都是相对View的父容器来说的。需要留意的是新的参数,x、y、translationX、translationY,x和y对应view左上角的坐标,translationX和translationY是View的左上角相对父容器的偏移量。当View在平移过程中,top和left不会改变,改变的是x、y、translatio原创 2021-10-28 19:36:49 · 197 阅读 · 0 评论 -
View 的滑动冲突
View的滑动冲突1.冲突场景2.处理规则场景1处理规则:左右滑动时候需要让外部的View拦截事件,上下滑动时需要让内部View拦截。具体可以根据水平滑动和垂直滑动来判断,速度、距离、夹角都可以做判断。场景2处理规则:无法通过速度、距离、夹角都做判断,因此只能从业务上找突破点。没有规定就是内部滑动完滑外部顺序好了。场景3处理规则:具体方法和2一样,只能从业务上找突破点。3.解决方式 1.外部拦截法 外部拦截指的是事件都经过父容器...原创 2021-10-25 11:59:21 · 181 阅读 · 0 评论 -
View的事件分发机制
View的事件分发机制首先分析的对象是MotionEvent,点击事件。最关键的三个方法:dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent翻译成中文就是,分发事件、拦截事件、处理事件,先看三者的关系,然后我们在细分讲解public boolean dispatchTouchEvent(MotionEvent ev) {boolean consume=false;if (onInterceptTouchEvent(...原创 2021-10-22 14:18:23 · 457 阅读 · 0 评论 -
ContentProvider
ContentProvider 管理对结构化数据集的访问。它们封装数据,并提供用于定义数据安全性的机制。 内容提供程序是连接一个进程中的数据与另一个进程中运行的代码的标准界面。ContentProvider 无法被用户感知,对于一个 ContentProvider 组件来说,它的内部需要实现增删该查这四种操作,它的内部维持着一份数据集合,这个数据集合既可以是数据库实现,也可以是其他任何类型,如 List 和 Map,内部的 insert、delete、update、query 方法需要处理好线程同步,因原创 2021-10-13 11:06:36 · 299 阅读 · 0 评论 -
Scroller滑动对象
Scroller弹性滑动对象,用于实现View的弹性滑动。public class ViewDemo extends View {private final Context mContext;private final Scroller mScroller;public ViewDemo(Context context) {super(context);mContext = context;...原创 2021-09-28 17:02:14 · 113 阅读 · 0 评论 -
ZipUtils
ZipUtilsimport android.util.Log;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.原创 2021-09-27 11:59:34 · 322 阅读 · 0 评论 -
Android EditText 保持焦点
AndroidEditText保持焦点最近项目有个需求,在输入框输入超出值域后锁定当前输入框,不容许切换输入框mLatEdit.setOnFocusChangeListener((v, hasFocus) -> { //失去焦点,重现申请if (mLatExceeded && !hasFocus) {//等待焦点移交另外的控件后,在申请,不然无效...原创 2021-09-23 09:21:58 · 525 阅读 · 0 评论 -
常用的正则表达式工具类
RegExpUtil/*** 常用的正则表达式工具类*/public class RegExpUtil {private static final String REGEX_SPECIAL_CHARACTERS = "[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";privatestaticfinal String REGEX_ANON...原创 2021-09-11 11:23:30 · 259 阅读 · 0 评论 -
SoftInputEditText
SoftInputEditTextimport android.content.Context;import android.util.AttributeSet;import android.view.View;import android.view.inputmethod.InputMethodManager;import androidx.annotation.NonNull;import androidx.annotation.Nullable;import a原创 2021-09-11 11:21:43 · 113 阅读 · 0 评论 -
BaseDialogView
BaseDialogViewimport android.animation.ValueAnimator;import android.content.Context;import android.graphics.PixelFormat;import android.util.DisplayMetrics;import android.view.Gravity;import android.view.LayoutInflater;import android.view.Mo原创 2021-09-11 11:20:00 · 80 阅读 · 0 评论 -
AppClickUtil
public class AppClickUtil {// 500ms内只允许点击一次private static final long TIME_DURING = 500;private static long lastClickTime = 0;/*** 是否允许点击,单位时间内只允许点击一次** @return boolean*/public static boolean canCl...原创 2021-09-11 11:17:52 · 77 阅读 · 0 评论 -
Android AIDL
Android AIDL下面是三个类Post.class(用上面Parcelable的Post作为实例,主要是得实现Parcelable序列化),Post.aidl和IPostManager.aidl//Post.aidlpackage com.gss.aidlprarcelablePost;//IPostManager.aidlpackage com.gss.aidlimport com.gss.aidl.Postinterface IPostMana.原创 2021-09-11 11:15:45 · 136 阅读 · 0 评论 -
不同高度ITEM的ViewPage
BottomViewPage项目遇到一个需求,需要不同高度ITEM的ViewPage,import android.content.Context;import android.util.AttributeSet;import android.view.ViewGroup;import androidx.annotation.NonNull;import androidx.annotation.Nullable;import androidx.viewpager.wi原创 2021-09-02 10:07:04 · 195 阅读 · 0 评论 -
自定义时间选择器
自定义时间选择器布局<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:id="@...原创 2021-09-01 09:07:20 · 461 阅读 · 0 评论 -
Picker、 PinPicker、DatePicker、 TimePicker
Picker、 PinPicker、DatePicker、 TimePicker关于选择器的一些知识,基本都是官方抄过来的Picker子类 DatePicker DatePickeris a directly subclass ofPicker. PinPicker Pickersubclass for allowing the user to enter a numerical PIN. ...原创 2021-08-18 09:51:25 · 456 阅读 · 2 评论 -
VelocityTracker 速度追踪
VelocityTracker速度追踪,包括水平和竖直方向的速度,在onTounchEvent方法中调用VelocityTrackervelocityTracker =VelocityTracker.obtain();velocityTracker.addMovement(event)获取速度:速度=(终点位置-起点位置)/时间段velocityTracker.computeCurrentVelocity(1000);float x=velocityTracker.getX...原创 2021-08-18 09:49:17 · 411 阅读 · 0 评论 -
GestureDetector手势检测
GestureDetector手势检测,用于辅助检测用户的单击、滑动、长按、双击等行为。参考如下。GestureDetector gestureDetector=new GestureDetector(this, new GestureDetector.SimpleOnGestureListener(){@Overridepublic boolean onDown(MotionEvent e) {//点了一下屏幕,ACTI...原创 2021-08-18 09:48:00 · 354 阅读 · 0 评论 -
账户更新功能
账户更新一.SyncService账号更新功能需要一个服务来提供,让SyncService继承自Service来实现账号更新功能,和AuthenticatorService一样需要在onBind方法中返回一个IBinder,这里需要借助于SyncAdapter,关于SyncAdapter稍后在做描述,通过syncAdapter.getSyncAdapterBinder()方法就可以获取到IBinder对象。@Overridepublic IBinder onBind(Inte...原创 2021-08-18 09:27:19 · 332 阅读 · 0 评论 -
DatePickerDialog和TimePickerDialog
DatePickerDialog和TimePickerDialog//示例代码,下面会看官网的具体信息final Calendar calendar = Calendar.getInstance();//从日历读取当前日期和时间int year = calendar.get(Calendar.YEAR);int month = calendar.get(Calendar.MONTH);int day = calendar.get(Calendar.DAY_OF_MONTH);in原创 2021-08-11 20:36:41 · 263 阅读 · 0 评论 -
accounts账号管理分析
accounts账号管理分析源码路径frameworks\base\core\java\android\accounts原生代码主要提供有3个接口:AccountManagerCallback<V>AccountManagerFuture<V>OnAccountsUpdateListener6个类:AccountAccountManagerAbstractAccountAuthenticatorAccountAuthenticato原创 2021-08-10 14:09:17 · 945 阅读 · 0 评论 -
CompoundButton
CompoundButton具有两种状态的按钮,选中和未选中。当按钮被按下或点击时,状态会自动改变。这是一个抽象类,目前有的子类有 复选框,单选按钮,开关,切换按钮。 复选框 复选框是一种特定类型的双状态按钮,可以选中或取消选中。 单选按钮 单选按钮是两个状态的按钮,可以选中也可以取消选中。 转变 Switch 是一个双态切换开关小部件,可以在两个选项之间进行选择。 ...原创 2021-08-10 13:56:32 · 1359 阅读 · 0 评论