Android日常总结
ffengz
恰如猛虎卧荒丘,潜伏爪牙忍受。他日若遂凌云志,敢笑黄巢不丈夫。
展开
-
自定义View(2)——测量方法onMeasure()简单使用
自定义控件免不了图形绘制,每一个视图的绘制过程都必须经历三个最主要的阶段,即onMeasure()测量、onLayout()布局、onDraw()绘制 三个阶段,今天主要将第一个阶段测量。关于三个阶段的协作请看:Android视图绘制流程——郭霖 常见对于 文字 以及 图片 两种的测量,图片的测量一般情况比较简单不多说,主要现说一下文字的测量。原创 2016-09-09 13:47:05 · 468 阅读 · 0 评论 -
Button英文字母大写问题
如下定义一个Button: <Button android:layout_width="match_parent" android:layout_height="match_parent" android:background="@null" android:text="fragment1"原创 2017-06-07 20:21:44 · 595 阅读 · 0 评论 -
官方推荐的Dialog——DialogFragment
简介官方推荐使用的Dialog类型,继承自Fragment,通过FragmentManager管理对话弹框。由于继承自Fragment,使用dialog时完全可以将其看作Fragment。 使用DialogFragment需要实现onCreateView()、onCreateDialog()其中之一。 onCreateView即将完全自定义一个dialog。 onCreateDialog原创 2017-07-04 16:35:32 · 1679 阅读 · 0 评论 -
ActivityLifecycleCallbacks——追踪Activity生命周期
目标之前使用全局广播 + BaseActivity + Activity栈中位置判断 实现全局数据接收、全局弹框。实在是有点儿low,后面请教高人,发现一个十分简单的方式对所有的Activity的生命周期进行监听,既节约了性能,也提升了B格。ActivityLifecycleCallbacks简介每个Activity生命周期的执行都会被此接口监听,可以通过注册此接口实现Activity生命周期的监原创 2017-07-13 10:48:15 · 746 阅读 · 0 评论 -
WindowManager——悬浮在所有app之上
目标WindowManager效果实现目标类似于某鱼、某猫直播平台的悬浮窗功能,能够在APP切换到后台后进行播放直播。 是不是很酷炫? WindowManager很简单就能实现将一个View悬浮在系统上。WindowManagerWindowManaget是Android最重要的服务之一,WindowManager是全局唯一的。 其将View和屏幕联系起来,用户的交互操作也传递给它,作为桥原创 2017-07-14 19:11:09 · 5810 阅读 · 1 评论 -
Android逐帧动画、属性动画的简单实现
需求这里我们实现一个简单的逐帧动画,即一组图片快速轮换的动画效果。实现动画的布局文件:将每一个图片放入(这个xml文件在AS2.2只能放在drawable目录下,低版本或许可以放在anim目录)<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="http://schemas.android.com/apk/re原创 2017-05-18 18:37:59 · 455 阅读 · 0 评论 -
ListView的单项刷新
情形不使用RecycleView,实现ListView的单项的刷新,而不去刷新整个列表。实现通过ListView.getChildAt()方法,获取到item的View,然后进行数据刷新。这里注意getChildAt()中的position是展示界面的位置,不是整个ListView的位置。 /** * 更新单个Item UI * * @param itemInde原创 2017-07-29 14:15:43 · 328 阅读 · 0 评论 -
更换APP启动图标和名称
情景效果展示实现在manifest文件为MainActivity创建别名获取ComponentName和PackageManager动态的配置启动图标简单的布局文件情景类似于双11等节日,实现app图标的动态更换效果展示手机比较慢,见谅-_-!!!实现1.在manifest文件为MainActivity创建别名这里将别名设置为不可用,到时候再使用。 <activity and原创 2017-08-01 17:16:02 · 2116 阅读 · 2 评论 -
Webview上传文件
情景实现重写WebChromeClient 方法处理选择返回值Webview上传文件没有反应情景需要在Webview中打开系统文件选择目录。即网页元素为: < input tyoe=”file” />,点击按钮应该打开系统的文件选择。实现1.重写WebChromeClient 方法在 Webview.setWebChromeClient() 方法传入的参数 WebChromeClient 重原创 2017-08-21 14:16:42 · 557 阅读 · 0 评论 -
软键盘弹出/缩回事件监听
情景特殊情况需要获得软键盘的弹出状态,进行特定的UI展示与隐藏。实现重写外层布局通过log打印,会发现每一次的弹出与缩回,外层布局会有多次的测量、布局的操作。这里在onMeasure()方法获取每次的测量状态。/** * 监听界面因为软键盘弹出/收起事件引起界面改变,增加界面改变监听事件。 * 换言之:监听软键盘的弹出/收起事件 * * @author fengzhen * @versio原创 2017-10-09 18:06:15 · 890 阅读 · 0 评论 -
ListView嵌套EditText处理
情景问题焦点丢失问题处理内容保存滑动冲突问题处理情景在ListView的一个或者多个Item中用到了EditText输入框控件,出现的一些常见问题优化处理。问题焦点丢失点击EditText,弹出软键盘,你会发现EditText的焦点丢失了,根本不能立刻进行输入。 问题出现的原因是弹出软键盘会导致重新进行ListView的绘制,此EditText非彼EditText。问题处理思路:将之原创 2017-10-09 17:50:14 · 843 阅读 · 0 评论 -
SpannableString花式文本混排
情景效果SpanableStringsetSpanwhat 风格flags 延续范围效果所有代码情景使用一个TextView混排多种不同颜色、大小等风格。效果SpanableString这是文本的类,其内容是不可变的,但标记对象可以附加和分离。This is the class for text whose content is immutable but to which mark原创 2017-10-12 18:17:54 · 573 阅读 · 0 评论 -
View或Layout快照保存、截屏功能
初始情形需要将图片、文字等信息进行组合拼接,生成一张新的图片保存。即,保存View或Layout的快照。特殊情况Webview特殊处理,见文末。具体实现主界面模版一:gone状态 模版二:正常状态 模版三:WebView 第一种 Draw方式测量出布局的的宽高根据宽高使用Bitmap.createBitmap()方法创建通过指定的bitmap创建画布对象手动渲染整个布局(包含自布原创 2017-02-25 17:16:16 · 936 阅读 · 0 评论 -
RecycleView简单使用
简介基本使用流程1.导包2.设置布局管理器3.设置Adapter4. 添加分割线5. 设置动画6.点击事件7.HeadView + FootView7.去掉滑动收尾的下拉动画复杂布局层数简化1. 布局要求2. 布局解析3. 布局实现4. 最终效果展示简介 A flexible view for providing a limited ...原创 2017-08-24 15:57:58 · 667 阅读 · 0 评论 -
SlidingTabLayout:完全自定义Tab导航栏UI风格
情景效果使用导入使用Demo地址SlidingTabLayout源码SlidingTabStrip源码情景系统自带的Tablayout拓展性实在太差,但很多时候又需要对Tab进行类iOS风格的自定义,使用反射TabLayout无果之后选择了更简单的SlidingTabLayout。SlidingTabLayout,看到有说是官方的Component,但是在Api27找了半天没找到,不知原创 2018-05-03 18:11:43 · 11484 阅读 · 0 评论 -
启动页、沉浸式状态栏
情景效果使用启动页沉浸式状态栏情景启动页:简而言之,微信看地球的图片。用图片代替app初始化过程没有用户可见界面的白屏,使app更加“友好”。 沉浸式状态栏:或者称透明状态栏。将状态栏颜色与app颜色一致,使用户界面更加整体。效果使用启动页一、 为Activity设置Theme <activity android:name=".MainActivity" android:theme原创 2018-05-07 22:24:00 · 2069 阅读 · 0 评论 -
获取Activity栈,判断当前Activity位置
需求需要在整个app全局能够弹出弹框,接收到广播即进行处理。但是,BaseActivity派生出N个Activity,BaseActivity中的广播就会执行N次,导致弹框重复添加,所有在广播中判定,只有在栈顶的Activity才能处理广播消息。实现获取任务栈必须添加权限:<!--获取Activity任务栈 权限--><uses-permission android:name="android原创 2017-07-10 22:17:33 · 15315 阅读 · 0 评论 -
ListView展示不同类别
需求同一个ListView展示多种不同UI风格类型的Item代码实现 关键是重写 getViewTypeCount() 和 getItemViewType(int position) 两个方法。 private static final int TYPE1 = 0; public static final int TYPE2 = 1; @Override pub原创 2017-06-06 11:30:11 · 562 阅读 · 0 评论 -
TextView测量文字长度、加粗、删除线、下划线
测量文字的长度一定要记着post()与主线程直接获取的区别,View的dispatchAttachedToWindow()方法调用才会执行runnable中的action,而这个方法设计Android底层UI逻辑处理。反正记住,post方法会在View的performMeaure()之后掉用。textView.post(new Runnable() { @Override ...原创 2017-04-24 15:07:04 · 767 阅读 · 0 评论 -
自定义View(3)——onLayout()、onDraw()方法的简单使用
之前对构造方法、测量方法的简单使用的了解,下面对onMeasure()之后的onLayout()、onDraw()方法进行简单说明。 onLayout()布局方法一般是在自定义布局控件继承自ViewGroup类时比较常用,用于对子控件进行布局摆放,确定位置之后子控件自己绘制。 只是简单的布局,效果图: xml 文件如下: <com.example原创 2016-09-13 17:33:45 · 698 阅读 · 0 评论 -
自定义View(1)——构造方法与参数传递
在自定义View的过程中,最先需要了解View的四种构造方法的使用条件以及参数。四种构造方法如下: /** * 使用代码 new 创建时使用 */ public StatusBar(Context context) { this(context, null); } /** * 使用布局文件加载时使用 * @原创 2016-09-07 00:08:59 · 1569 阅读 · 0 评论 -
性能优化 ViewStub动态控件 与 tools命名空间简单使用
ViewStub动态控件 ViewStub 是一个隐藏的,不占用内存空间的视图对象,它可以在运行时延迟加载布局资源文件。换言之,在不加载布局资源的时候,ViewStub的试图对象不占用系统资源,只有在加载该布局的时候才加载。所以,我们可以将以前单次使用View的显示与隐藏来实现展示不同界面的地方使用ViewStub,对app进行性能优化。 ViewStub的特点:ViewS原创 2016-09-24 16:29:49 · 620 阅读 · 0 评论 -
Android 开关控件Switch的简单使用
在很多app的设置页面,或者是一些功能的开关界面,我们常常用到 Switch(开关) 来展示状态,今天说说新学到的Switch控件。 最基本情况的按钮: <Switch android:id="@+id/switch_普通开关" android:layout_width="match_parent" android:layout_h原创 2016-09-26 09:58:32 · 66189 阅读 · 3 评论 -
自定义View(4)——用户交互、点击事件监听
通过之前的了解我们已经能够简单的自定义我们想要的控件,但是不能实现与控件的交互,今天就简单的说说自定义控件关于用户交互与点击事件监听。 如图,今天主要实现状态更新的监听,以及点击上图中的图片和文字将对应的状态显示到点击的进度两个功能。 类似于Button的点击事件,通过setOnClickListener()方法设置监听,将监听类传入控件。而在Button类中,有一原创 2016-09-18 14:50:33 · 1557 阅读 · 0 评论 -
倒计时计时器 + 一个TextView不同颜色混排
类似于验证码倒计时的计时器:CountDownTimer类 private CountDownTimer authCountDownTimer; authCountDownTimer = new CountDownTimer(61 * 1000, 1000) { @Override public void onTick(lon原创 2016-12-01 16:39:03 · 596 阅读 · 0 评论 -
关于ListView的setEmptyView()设置空白页方法
在ListView和GridView中,当出现展示列表为空或者网络出现异常等特殊情况,一个空白的界面显然是不够友好的,但是使用一个其他布局再使用visibility进行显示/隐藏也不够高大上,这里简单的说说setEmpty()方法,对为空数据列表进行提示页面的展示。 空白提示页面的布局文件:(两个提示页面只有图片不同)<FrameLayout xmlns:android="ht原创 2016-10-12 15:05:22 · 921 阅读 · 0 评论 -
EditText TextWatch监听简单使用
new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { //This method原创 2016-12-09 11:22:51 · 2608 阅读 · 0 评论 -
Activity启动模式、Intent重复传递
初始情形1. 三个Activity循环调用,默认启动模式失效,详细学习启动模式。2. 页面跳转需要传递数据,使用SingleTask模式,后面传递的Intent需要刷新,否则是第一个intent数据。四种模式1. standardactivity默认的启动模式,即每次调用都创建一个新的实例压入栈顶。因此,可以重复调用,在栈中叠加。如图:反复调用自身,每次都创建实例,进行压栈。A 为 stand原创 2017-02-07 20:19:45 · 1240 阅读 · 0 评论 -
ListView嵌套ScrollView,MeasureSpec相关
初始情景需要在ScrollView中嵌套ListView中,并且ListView高度有最大值,超出部分滑动展示,不足部分自适应大小。需要解决:ListView在ScrollView中使用只展示一项的问题;ListView和ScrollView的滑动冲突问题。问题解决只展示一项重写一个继承自ListView的控件,重写onMeasure()测量方法,重新获取测量大小,并设置代码如下:public原创 2017-03-03 11:14:58 · 314 阅读 · 0 评论 -
java 与 JS 交互
初始情景Android与js互相调用,实现对应的业务需求具体实现Android调用JS /** * 通知网页图片发生改变 */ private void notifyPhotoChange(String url) { // 调用changeImg方法,传入参数 url mWebViewTemplate.loadUrl(String.原创 2017-02-25 17:51:04 · 584 阅读 · 0 评论 -
不使用第三方分享到微信(安装微信)
不多说直接上代码,同时感谢网上大牛些!!! // 分享到朋友圈 private void shareWeixin() { try { Intent intent = new Intent(); ComponentName comp = new ComponentName("com.tencent.mm",转载 2017-02-25 18:02:46 · 1615 阅读 · 0 评论 -
Android 绘制虚线
需求绘制一条虚线具体实现创建drawable文件,作为background使用。<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line" > <stroke android:原创 2017-05-16 18:11:35 · 351 阅读 · 0 评论 -
Android 验证码计时器 简单实现
需求实现发送验证码功能,发送之后倒计时60s之后可以重新发送。实现xml布局文件<!--验证码--> <LinearLayout android:id="@+id/linear_verify_code" android:layout_width="match_parent" android:layout_height="60dp"原创 2017-05-16 19:01:37 · 662 阅读 · 0 评论 -
BigDecimal精度运算、精度保存
初识情形从服务器获取double类型的数值,并转换为百分比展示, 再将String通过Double.valueOf(s)转换成double类型时出现经度丢失。简单介绍Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算。在商业计原创 2017-01-11 17:57:33 · 1374 阅读 · 0 评论 -
共享元素
情景效果使用情景推出“材料设计”同时5.0附带的“廉价”Android动画,让页面的跳转对用户更加指引性,也让页面的跳转通过“Shared Element”联系起来。效果使用一、跳转前的RecyclerView的item布局如下。 重点在:transitionName,后面的String全局唯一<?xml version="1.0" encoding="utf-8"?><LinearLayo原创 2018-05-07 22:51:31 · 1066 阅读 · 0 评论