数组代表数字加一算法 给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 示例 1: 输入: [1,2,3] 输出: [1,2,4] 解释: 输入数组表示数字 123。 示例 2: 输入: [4,3,2,1] 输出: [4,3,2,2...
Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated 之前在旧版本Android Studio中用以下代码修改过release版本的apk名:applicationVariants.all { variant -> variant.outputs.each { output -> def SEP = "_" def flavor = variant.productFlavors[0].name
app-release-unsigned.apk is not signed 今天用 android studio3.0 来编译 release 配置的项目时报了以下错误: the apk for your currently selected variant(app-release-unsigned.apk)is not signed. Please specity a signing configuration for this variant(release)
WebView滚动到底部 实现原理第一步:自定义BottomWebView继承自WebView;第二步:调用WebView中的 computeVerticalScrollRange() 方法获得获取WebView可纵向滚动的最大距离;第三步:调用WebView的 scrollTo(x,y) 方法,设置 x为0,y为纵向滚动的最大距离,则可将WebView滚动到最底部。实现代码:public class BottomWebVi
Android中使用TextView实现微博@功能 前言在Android中使用TextView实现@功能主要需要用到以下两个知识点:正则表达式:http://blog.csdn.net/yaerfeng/article/details/28855587SpannableString:http://www.jianshu.com/p/84067ad289d2实现思路使用正则表达式找出字符串中所有 @用户名 部分在字符串中的起止位置;初始化一个
Android使用socket.io实现即时通讯 简介WebSocket是HTML5的一种新通信协议,它实现了浏览器与服务器之间的双向通讯。而Socket.IO是一个完全由JavaScript实现、基于Node.js、支持WebSocket的协议用于实时通信、跨平台的开源框架。本文将根据 socket.io 官方提供的 socket.io-android-chat Demo 来讲解 socket.io 在android客户端实现即时通讯的一些基本
Android 7.0新特性 Android 7.0 开发者版本Android 7.0 Nougat 为用户和开发者引入多种新功能。本文重点介绍面向开发者的新功能。请务必查阅 <href="/about/versions/nougat/android-7.0-changes.html"> Android 7.0 行为变更以了解平台变更可能影响您的应用的领域。如需了解有关 Android 7.0 消费者功能的更多信息,请访问
android5.0L提取颜色(Palette) 简介Palette 是android5.0后提供的一个提取图片中显著颜色的工具类。Palette能提取以下色调:Vibrant(鲜明的)Vibrant dark(鲜明的暗)Vibrant light(鲜明的亮)Muted(柔和的)Muted dark(柔和的暗)Muted lighr(柔和的亮)使用方法导入依赖增加下面的Gradle依赖到你的程序的模块(module)中:depende
去除自定义Toolbar中左边距 问题自定义Toolbar之后,发现左侧不能完全填充,总是留一点空白,如下图:原因查看Wiget.AppCompat.Toolbar的parent(Toolbar默认的style),如下:<style name="Base.Widget.AppCompat.Toolbar" parent="android:Widget"> <item name="titleTextAppearance">
Expected resource of type animator [ResourceType] 错误提示 Error: Expected resource of type animator [ResourceType]这个错误在编译运行时候并不会出现,但是当需要签名打包的时候,就会报这个异常。这个错误出现的位置位于自定义View中使用动画的这一行,代码如下:AnimatorInflater.loadAnimator(context, R.anim.scale_with_alpha)其中
Android判断用户名只能为字母、数字和汉字 原理利用正则表达式判断用户名是否为字母、数字和汉字。参考自:匹配中文字符的正则表达式: [/u4e00-/u9fa5]使用Pattern类来进行比对代码 /** * 验证用户名只包含字母,数字,中文 * @param account * @return */ public static boolean checkAccountMark(Strin
URL传值带加号“+”的问题的解决方法 使用encodeURIComponent如str="a+b";url="sql_str.jsp?sql="+str;要改成:url="sql_str.jsp?sql="+encodeURIComponent(str);URL传值带加号“+”的问题的解决方法今天在调试客户端向服务器传递参数时,参数中的“+”全部变成了空格,原因是URL中默认的将“+”号转义了。解决方法如下:方法一、 修改客户端,将客
Jd-Gui报错INTERNAL ERROR 问题用dex2jar工具反编译了apk文件,但当我用jd-gui反编译前面操作获得的jar文件的时,有一部分类不能显示出来,仅仅显示了错误: // INTERNAL ERROR //原因Jd-Gui解析不了该class文件解决方式使用Java反编译器luyten(卢伊藤)来替代Jd-GuiJava反编译器luytenluyten是github上的一个开源项目,目前支持.exe、.jar、.dm
SimpleArrayMap源码解析 本文SimpleArrayMap源码分析是基于support v4 23.3.0版本的。 另外,因ArrayMap涉及的多是算法知识,而主要的思想比较简单,所以本文会主要以代码为主,细讲其每个实现。为什么要引入ArrayMap?在Android设备上,因为App的内存限制,出现OOM的错误,导致开发者不得不关注一些底层数据结构以及去分析App的内存使用情况。提及数据结构,HashMap是我们
Android Service的生命周期 转载自:http://www.cnblogs.com/mengdd/archive/2013/03/24/2979944.htmlManaging the Lifecycle of a Service service的生命周期,从它被创建开始,到它被销毁为止,可以有两条不同的路径:A started service 被开启的service通过其他组件调用
Android service 转载自:http://www.cnblogs.com/lwbqqyumidi/p/4181185.html Service通常总是称之为“后台服务”,其中“后台”一词是相对于前台而言的,具体是指其本身的运行并不依赖于用户可视的UI界面,因此,从实际业务需求上来理解,Service的适用场景应该具备以下条件:1.并不依赖于用户可视的UI界面(当然,这一条其实也不是绝对的,如前台Service就是与No
Android中处理崩溃闪退错误 Android中处理崩溃闪退异常大家都知道,现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不定就出现崩溃的现象,开发者个人不可能购买所有设备逐个调试,所以在程序发布出去之后,如果出现了崩溃现象,开发者应该及时获取在该设备上导致崩溃的信息,这对于下一个版本的bug修复帮助极大,所以今天就来介绍一下如何在程序崩溃的情况下收集相关的设备参数信息和具体的异常信
Cannot merge new index 65553 into a non-jumbo instruction 今天用Android Stuidio打包的时候报了以下错误:Error:Error converting bytecode to dex:Cause: com.android.dex.DexIndexOverflowException: Cannot merge new index 65553 into a non-jumbo instruction!Error:Execution failed
Android内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,就是该被释放的对象没有释放,一直被某个或某些实例所持有却不再被使用导致 GC 不能回收。最近自己阅读了大量相关的文档资料,打算做个 总结 沉淀下来跟大家一起分享和学习,也给自己一个警示,以后 coding 时怎么避免这些情况,提高应用的体验和质量。我会从 java 内存泄漏的基础知识开始
Java反射机制详解 转载自:http://blog.csdn.net/yongjian1092/article/details/7364451首先,我们在开始前提出一个问题:1.在运行时,对于一个Java类,能否知道属性和方法;能否去调用它的任意方法? 答案是肯定的。本节所有目录如下:什么是JAVA的反射机制JDK中提供的Reflection APIJAVA反射机制
Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag 在Dialog中使用startActivity()时候,出现了这个错误:android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you w
Android事件传递机制-View篇 Android事件传递机制绝对不是三言两语就能说得清的,在网上查了相关资料,觉得大部分都没有讲的很清楚透彻,写本文的目的就是让更多的开发者进从FrameWork层到Application层一步步深入Android事件传递机制的原理,今天先小小试牛刀,主要是讲View的事件传递机制原理,下一篇会将更复杂的控件ViewGroup事件的传递机制。比如一个Activity页面有一个Button 按钮,要想为
Json实体类快速生成插件 GsonFormat 写在前头:本插件只适用 android studio和 Intellij IDEA 工具,eclipse 的少年无视我吧!!!这是一个根据JSONObject格式的字符串,自动生成实体类参数.githubjetbrainsAndroid Arsenalswift 版Json 新视觉版本说明v1.2.2 (English) Support field type changes.
Mac环境下对android app抓包 环境Mac电脑Android手机抓包工具 Charles步骤一、安装 Charles官网链接:http://www.charlesproxy.com/破解版:http://www.waitsun.com/charles-3-11-4.html(如果链接失效了,可以在 www.waitsun.com 上面直接搜最新破解版)破解步骤:1.安装好Charles后,在应用程序中找到,右键选择“显示包
Android EditText 银行卡四位空一格 /** * 设置银行卡输入时每隔4位多一位空格 * @param cardEt */ public static void bankCardInput(final EditText cardEt) { //设置输入长度不超过24位(包含空格) cardEt.setFilters(new InputFilter[]{new Inpu
Android Template(模板) 编写 转载自:http://blog.csdn.net/zhaodai11?viewmode=contents当我们在使用AndroidStudio新建工程,模块或者类时,其实AndroidStudio是已经给我们提供好了一些模板。例如:一些AIDL模板、 Activity模板、Service模板等等。下面这张图里面有一些是我自己定义的 AndroidStudio的文件模板放在安装目录下/plugins/
Android中通过typeface设置字体 Android系统默认字体支持四种字体,分别为:noraml (普通字体,系统默认使用的字体)sans(非衬线字体)serif (衬线字体)monospace(等宽字体)除此之外还可以使用其他字体文件(*.ttf)关于后三种字体的区别可以看: http://kb.cnblogs.com/page/192018/一、使用系统自带的字体1.在xml中修改字体 <!-- 使用默认
Android 6.0 运行时权限处理 运行时权限介绍Android 6.0在我们原有的AndroidManifest.xml声明权限的基础上, 又新增了运行时权限动态检测,以下权限都需要在运行时判断:身体传感器 日历 摄像头 通讯录 地理位置 麦克风 电话 短信 存储空间运行时权限处理Android6.0系统默认为targetSdkVersion小于23的应用默认授予了所申请的所有权限, 所以如果你以前的APP设置的
Android调用微信扫一扫 在自己的应用中打开微信扫一扫代码: private void toWeChatScan() { try { //利用Intent打开微信 Uri uri = Uri.parse("weixin://dl/scan"); Intent intent = new Intent(Intent.ACTION_VIE
Android 6.0 的getColor()方法过时 解决方式将 getColor()方法替换为:ContextCompat.getColor(context, R.color.my_color)过时的getColor()方法源码 @ColorInt @Deprecated public int getColor(@ColorRes int id) throws NotFoundException { return
IllegalStateException: Can not perform this action after onSaveInstanceState 今天使用Fragment的时候,出现了这个错误 IllegalStateException: Can not perform this action after onSaveInstanceState: E/AndroidRuntime(12747): Caused by: java.lang.IllegalStateException: Can not perform t
Android开发--CardView使用 Android5.0中向我们介绍了一个全新的控件–CardView,从本质上看,可以将CardView看做是FrameLayout在自身之上添加了圆角和阴影效果。请注意:CardView被包装为一种布局,并且经常在ListView和RecyclerView的Item布局中,作为一种容器使用。CardView应该被使用在显示层次性的内容时;在显示列表或网格时更应该被选择,因为这些边缘可以使得用户更容易
android:inputType常用取值 android:inputType="none"//输入普通字符 android:inputType="text"//输入普通字符 android:inputType="textCapCharacters"//输入普通字符 android:inputType="textCapWords"//单词首字母大小 android:inputType="textCapSente
Unknown facet type:'android', Unknown facet type:'android-gradle' Android studio 报异常:"2 facets cannot be loaded. You can mark them them as ignored to suppress this error notification. Unknown facet type:'android', Unknown facet type:'android-gradle'解决方式:第一步:进入设置(Sett
Android 自定义Toolbar/ActionBar视图左边有空白 最近自定义Toolbar之后,发现左侧不能完全填充,总是留一点空白,经过查看新发布的V7的支持包中的style发现了解决方法。 查看Wiget.AppCompat.Toolbar的parent,如下:<style name="Base.Widget.AppCompat.Toolbar" parent="android:Widget"> <item name="titleTextA
Execution failed for task ':dexDebug' 错误在 Android Studio 中用 compile 导入开源库时报了以下错误:Error:Execution failed for task ':dexDebug'.> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/
Android 日志打印工具类 Android 中的日志工具类 Log(android.util.Log) 方法 含义 Log.v() Verbose Log.d() Debug Log.i() Info Log.w() Warn Log.e() Error Log.wtf() 在输出日志的同时,会把此处代码此时的执行路径(调用栈)打印出来。使用方法:Log.v(tag,ms
Android五种数据传递方法汇总 Android开发中,在不同模块(如Activity)间经常会有各种各样的数据需要相互传递,我把常用的几种 方法都收集到了一起。它们各有利弊,有各自的应用场景。 我现在把它们集中到一个例子中展示,在例子中每一个按纽代表了一种实现方法。1. 利用Intent对象携带简单数据利用Intent的Extra部分来存储我们想要传递的数据,可以传送int, long, char等一些基础类型,对复杂的对象就
Gridview auto_fit 属性无效 之前在项目中用到GridView,想根据GridView的宽度和item的大小来自动排版显示每排的item数量。于是乎将GridView下的 android:numColumns 属性设置为 auto_fit ,如下: <GridView android:id="@+id/gv_bet_info" android:layout_width="match_parent"
Android 打开外部应用(微博/微信/QQ等) 跳转微信首页Intent intent = new Intent();ComponentName cmp = new ComponentName("com.tencent.mm","com.tencent.mm.ui.LauncherUI");intent.setAction(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_LAUN
Android 绘制波浪线(使用 bitmap ) 概述Android 中绘制波浪线大致有三个方案:直接使用一个完整的波浪线切图自定义控件来绘制用xml的bitmap标签实现波浪线效果第一种方法实现的波浪线实现起来十分简单,但劣势也很明显,波浪线会随着View的长宽进行拉伸变形,若项目中只需使用到固定宽高的波浪线,使用该方法也可。自定义控件可以达到比较好的效果,但是实现起来比较繁琐。用xml的bitmap标签实现波浪线,效果良好,而且实现起来
在 Intent 中传 SparseArray 类型的数据 Intent 传递对象Android中Intent传递类对象提供了两种方式一种是 通过实现Serializable接口传递对象,一种是通过实现Parcelable接口传递对象。要求被传递的对象必须实现上述2种接口中的一种才能通过Intent直接传递。Intent中传递这2种对象的方法:Bundle.putSerializable(Key,Object); //实现Serializable接口的对象
ScrollView 嵌套 ListView 后显示位置异常 项目中遇到了一个需求,需要在ScrollView里面嵌套 ListView,但如果直接在ScrollView里面嵌套 ListView,则ListView会出现显示不全的问题。第一个坑(内容显示不全)为了解决scrollview和listview冲突,最常见的解决方案就是自定义一个ListView,复写 ListView 中的 onMeasure 方法。@Override/** 只重写该方法,达
Android Studio 显示行号 临时显示行号1.右键图示区域2.在弹出框中勾选上 show line numbers永久显示行号1.点击导航栏中的设置的图标2.在设置框中依次选择Editor --> General --> Appearance --> Show line numbers3.在勾上 Show line numbers 后点击ok保存设置即可
通过Html网页调用本地安卓app 我们在做一些分享等功能的时候常常需要用到网页跳转app的功能,那么要如何实现这一功能呢?首先我们先来看下网页跳转回应用的实现原理。URI详解就Android平台而言,URI主要分三个部分:scheme, authority and path。其中authority又分为host和port。格式如下: scheme://host:port/path 举个实际的例子: 现在大家应该知道data flag
工厂方法模式( Factory Method 模式 ) 转载自:http://blog.csdn.net/jason0539/article/details/23020989在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生
设计模式六大原则 转载自:http://www.uml.org.cn/sjms/201211023.asp设计模式六大原则(1):单一职责原则定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。 问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。解决方案:遵循单一职责原则。分别建立两个类T1、T2,使
Android 中 Bitmap 和 Drawable 相互转换的方法 Drawable —> Bitmap获取资源文件(Drawable)中的 BitmapResources res = getResources();Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.ic_logo);或者Resource res = gerResource();Drawable drawable
Android Studio debug 时使用 release 签名 当我们在项目中集成一些第三方登录或分享(例如QQ快捷登录)的SDK时候,常常需要用发布版的签名对应用进行打包才能正常使用SDK的功能。在debug的时候势必十分麻烦。那么我们如何在debug的时候使用release的签名来打包应用呢?在 build.gradle 中的 android 节点下引入如下代码,并将 signingConfigs 中配置好 keystore签名信息 就好了: //配置
Activity 启动模式 概述Activity 一共有四种设计模式,分别是:standard(标准模式)singleTop(Task顶单例模式)singleTask(Task内单例模式)singleInstance(全局单单例模式)使用设置Activity的启动模式,只需要在 AndroidManifest.xml 里对应的 activity 标签设置 android:launchMode 属性,例如:<activ
Could not load definitions from resource net/sf/antcontrib/antcontrib.properties. 在Ant使用过程中,在build.xml 添加<taskdef resource="net/sf/antcontrib/antlib.xml"/>时候执行 for task时候总是提示错误[taskdef] Could not load definitions from resource net/sf/antcontrib/antlib.xml. It could not be found.改用以下
实现可点击展开的 TextView 概述Android开发过程中,经常遇到 Textview 展示不完全的情况。遇到此情况,通常的处理是:方案一 Textview 添加 android:ellipsize 属性,让展示不完的部分使用省略号代替。方案二 Textview 采用走马灯效果,使其滚动展示全部文本内容。对于方案一,如果想查看被省略后的内容,如何实现?通常情况下是在 TextView 文本后面或下边添加一个可点击的图标
Android link工具的使用 概述Android Lint是SDK Tools 16 (ADT 16)之后才引入的工具,通过它对Android工程源代码进行扫描和检查,可发现潜在的问题,以便程序员及早修正这个问题。Android Lint提供了命令行方式执行,还可与IDE(如Eclipse)集成,并提供了html形式的输出报告。由于Android Lint在最初设计时就考虑到了independent于IDE,所以它可以很方便的与
Android命名规范 转载自:http://blog.csdn.net/vipzjyno1/article/details/23542617刚接触android的时候,命名都是按照拼音来,所以有的时候想看懂命名的那个控件什么是什么用的,就要读一遍甚至好几遍才知道,这样的话,在代码的审查和修改过程中就会浪费不少不必要的时间。如果就是我一个人开发,一个人维护的话还好,可是如果一个项目是团队分
ListView性能优化 概述在Android开发过程中ListView是一个很常用的组件,但当使用ListView加载大量数据时,可能会出现卡顿的现象,那么我们该如何优化ListView使之变得流畅易用呢?ListView优化主要有下面几个方面:convertView重用ViewHolder的子View复用分页加载缓存数据复用ConvertView重用(减少创建View的消耗)首先讲下ListView的原理:Li
Android RecyclerView 使用完全解析 转载自:http://blog.csdn.net/lmj623565791/article/details/45059587概述RecyclerView出现已经有一段时间了,相信大家肯定不陌生了,大家可以通过导入support-v7对其进行使用。 据官方的介绍,该控件用于在有限的窗口中展示大量数据集,其实这样功能的控件我们并不陌生,例如:ListView、GridView。那么有了ListVie
观察者模式(Observer 模式) 一、 概述 观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 二、结构
WebChromeClient常用方法详解 公共构造器(Public Constructors)public WebChromeClient ()添加自 API level 1公共方法(Public Methods)getDefaultVideoPosterpublic Bitmap getDefaultVideoPoster ()添加自 API level 7Html中,视频(video)控件在没有播放的时候将给用户展示一张“海报”图片(预
Android中Animation动画详解 动画类型Android的animation由四种类型组成Xml中 属性值 含义 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面转移旋转动画效果JavaCode中 类名 含义 AlphaAnimation 渐变透明度动画效果 ScaleAnimation 渐
策略模式(Strategy 模式) 一、概述策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。二、结构 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一
Android网络连接之HttpURLConnection和HttpClient 1.概念 HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能:HttpURLConnection。但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。 除此之
Java中 Comparator接口 与Comparable 的区别 一、概述定义Comparable是在集合内部定义的方法实现的排序的接口,位于java.util下。Comparator是在集合外部实现的排序的接口,位于java.lang下。 Comparable是一个对象本身就已经支持自比较所需要实现的接口,如String、Integer自己就实现了Comparable接口,可完成比较大小操作。自定义类要在加入list容器中后能够排序,也可以实现Comparab
Google推荐的图片加载库Glide介绍 在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫 Glide 的图片加载库,作者是bumptech。这个库被广泛的运用在google的开源项目中,包括2014年google I/O大会上发布的官方app。它的成功让我非常感兴趣。我花了一整晚的时间把玩,决定分享一些自己的经验。在开始之前我想说,Glide和Picasso有90%的相似度,准确的说,就是Picasso的克隆版本。但是在细节上还是有
Picasso-Android图片缓存库 Picasso官方网址:http://square.github.io/picasso/介绍在Android应用程序中使用Picasso添加图片必须要有上下文(context)和图片来源。仅仅只需要一行代码就能完全实现图片的异步加载!Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);Picasso
Android添加快捷方式 配置权限在Manifest.xml文件中配置添加快捷方式的权限<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />首次启动软件创建快捷方式的判断(使用SharedPreferences ) /** * 首次启动软件是否创建快捷方式
startActivityForResult详解 startActivityForResult与startActivity的不同之处在于:1. startActivity仅仅是跳转到目标页面,若是想跳回当前页面进行数据刷新或其他处理,则必须再使用一次startActivity( )A跳转到B: A-->BB执行finish操作: B-->finish(B)-->A2. startActivityForResult( ) 可以
shape在Android中的使用 shape用于设定形状,可以在selector,layout,layer-list等里面使用,如果有需求是实现一些简单的几何图形可以用shape来实现。根据交互设计的需要,可以考虑用shape绘制按钮,好处有:矢量绘制,易于缩放;字节数更少(一般而言);基于XML文本,属性值易于调整;Drawable组件间可嵌套,可重用;XML与项目其他源代码在一起,便于版本控制。当然也有缺点:没有可
Android图像适配 Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因、重要概念、解决方案及最佳实践,我相信如果你能认真的学习本文,对于Android的屏幕适配,你将有所收获!Android屏幕适配出现的原因
FragmentPagerAdapter与FragmentStatePagerAdapter区别 转载自:http://www.apkbus.com/android-90417-1-1.html在一个 Android 应用中,我使用 FragmentPagerAdapter 来处理多 Fragment 页面的横向滑动。不过我碰到了一个问题,即当Fragment对应的数据集发生改变时,我希望能够通过调用 mAdapter.notifyDataSetChanged() 来触发 Fragment 页面
Android Studio运行时出现多个项目 检查程序的 AndroidManifest.xml 文件中Activity的intent-filter配置,如果重复配置了以下intent-filter则会出现多个项目: android:name="android.intent.action.MAIN" /> android:name="android.intent.category.LAUNCHER" />
自定义checkbox 第一种方法(在布局文件中配置):1.首先在drawable文件夹中添加drawable文件checkbox_style.xml。<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawabl
避免ViewStub重复填充 ViewStub 是一个不可见的,大小为0的View,最佳用途就是实现View的延迟加载,避免资源浪费,在需要的时候才加载View。在Android性能优化中常常使用到ViewStub。但因为viewstub只能inflate一次(setVisibility也会间接调用inflate),重复inflate则会报异常:java.lang.IllegalStateException:ViewStub m
PullToRefresh刷新模式设置 在java代码中设置刷新模式 mPullRefreshListView.setMode(Mode.PULL_FROM_END);//向下拉刷新 mPullRefreshListView.setMode(Mode.PULL_FROM_START);//向上拉刷新 mPullRefreshListView.setMode(Mode.BOTH);//两端刷新在Xml文件中通过修改ptrMode来设置刷新模
Pull解析XML文件 PULL解析器的运行方式是基于事件的解析模式。在PULL解析过程中,我们需要自己获取产生的事件然后做相应的操作。PULL解析器小巧轻便,解析速度快,简单易用,非常适合在Android移动设备中使用,Android系统内部在解析各种XML时也是用PULL解析器。使用PULL解析器解析和生成XML文件:Step 1 : 在项目的assets目录中放置一个XML文档books.xml,内容如下:<?xml
Android 粘贴板(ClipboardManager) 注意:导包的时候 API 11之前: android.text.ClipboardManager API 11之后: android.content.ClipboardManager代码如下: /** * 实现文本复制功能 * add by wangqianzhou * @param content */ public static
ArrayList的操作 1.创建ArrayList<String> mList = new ArrayList<String>(); 2.加入元素String str = “一”;mList.add(str); 3.查询大小int theSize = mList.size(); 4.查询特定元素boolean isIn = mList.contains(...
替换ADT默认的debug.keystore 最近项目中使用到腾讯QQ的快捷登录,在debug的时候,直接调用腾讯的快捷登录则会报该应用不是正版应用的错误。造成这种错误的原因是:签名错误!eclipse会在debug时会使用其默认的debug.keystore将应用签名,此时应用的签名与应用发布时使用签名是不同的(许多其他的第三方SDK也会使用签名对应用进行判断)。由于Eclipse ADT对自定义调试证书(Custom debug keyst
可以控制禁止滑动的viewpage Android编程常常使用ViewPager结合Fragment实现可以左右滑动切换的页面,但有时会遇到这样的需求,让ViewPager根据特定条件来控制其是否滑动。实现思路:重写ViewPager,覆盖 onTouchEvent 和 onInterceptTouchEvent 方法,使其返回false,截取ViewPager的事件响应,这样就等于禁止了ViewPager上的滑动事件。public
查询数组中相同元素的个数 查询数组中相同元素的个数1.定义一个String数组 String[] txtStrs = ["L","H","C","L","L","L","H","H","C"];2.创建一个HashMap来存放数组的信息,HashMap的键为元素,值为该元素出现的次数HashMap<String, Integer> map = new HashMap<String, Integer>();