android
崔世勋
这个作者很懒,什么都没留下…
展开
-
使用小米手机进行真机测试
1. 进入开发者模式设置>我的设备 >全部参数>MIUI(连续点击7次)设置>系统和设备-更多设置>开发者选项->usb 调试转载 2019-04-19 13:41:21 · 1375 阅读 · 0 评论 -
Android LayoutInflater
它的作用类似于findViewById, 不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化,而findViewById()是找xml布局文件下的具体Widget控件(如Button, TextView等)。具体作用1、对于一个没有被载入或者想动态载入的界面,都需要使用LayoutInflater.inflate()来载入。2、对于一个已经...转载 2018-12-19 11:00:22 · 329 阅读 · 0 评论 -
Glide
简介Glide是Google推荐的一套快速高效的图片加载框架。使用链式调用。//设置默认和出错时的图片 Glide.with(this).load(url).placeholder(resId).error(resId).into(mImageView)//普通的图片加载Glide.with(this).load(url).into(mImageView);//可理解为...转载 2018-12-19 10:52:45 · 227 阅读 · 0 评论 -
TabLayout android
TableLayout继承自HorizontalScrollView。常用属性app:tabIndicatorColor :指示线的颜色app:tabIndicatorHeight :指示线的高度app:tabSelectedTextColor : tab选中时的字体颜色app:tabMode="scrollable" : 默认是fixed,固定的;scrollable:可滚动的...转载 2018-12-19 09:27:54 · 197 阅读 · 0 评论 -
ViewPager PagerAdapter
ViewPager是负责翻页的一个View,准确的说是一个ViewGroup,包含多个View页,在手指横向滑动屏蔽时,其负责对View进行切换。为了生成这些View页,需要提供一个PagerAdapter来进行数据绑定以及生成最终的View页。1、setAdapterViewPager通过setAdapter()来建立与PagerAdapter的联系。这个联系是双向的,一方面,Vie...转载 2018-12-19 08:52:35 · 718 阅读 · 1 评论 -
Only the original thread that created a view hierarchy can touch its views
原因:view控件不是线程安全的,所以更新UI操作都必须在UI线程中完成,而不能在非UI线程中。解决方法:使用Handler,其实每个线程都有自已的handler,来处理自己的消息队列,当多线程间需要通信时,可以使用handler。1、在可以操作UI的代码处创建Handler对象。final Handler uiHandler = new Handler();2、把更新U...转载 2018-12-17 16:40:26 · 3851 阅读 · 0 评论 -
Android Gradle build: Execution failed for task ':app:lint'
方法1在build.gradle中添加android { lintOptions { abortOnError false }}方法2可以在你的project/module/build/outputs下找到lint-results文件,分析其中的问题,然后修改。...转载 2018-12-17 11:13:03 · 409 阅读 · 0 评论 -
Android Span
在Android中,使用Span定义文本的样式,通过Span改变几个文字的颜色,Span能够改变TextPaint属性,在Canvas上绘制,甚至是改变文本的布局和影响行高这样的元素。Span是可以附加到文本或者从文本分离的标记对象,它们可以被应用到部分或整段的文本中。Android上定义文本样式1、单一样式样式应用在TextView显示的整个文本,使用XML属性或者样式和主题引入了T...转载 2018-12-21 14:24:48 · 209 阅读 · 0 评论 -
Android: Tools
作用xmlns:tools="http://schemas.android.com/tools"大致有三种主要功能:(1)xml中的错误处理,减少或者避免黄线提示,让代码更清爽,让编译少报错。(2)xml预览,可以随心所欲的定制预览视图。(3)资源压缩,压缩资源文件,降低APK体积。错误处理属性1、tools:ignore让Lint工具(Lint是Android的...转载 2018-12-21 10:29:06 · 267 阅读 · 0 评论 -
Android tools:replace的使用
当我们的项目的某些属性和第三方库中属性有冲突或者我们想修改第三方库中某些资源时,我们就需要使用tools:replace来处理。1、有冲突的情况比如第三方库中也定义了application@icon application@label属性,则会与你的项目发生冲突。那么解决的方法就是在你的Application节点中加入tools:replace来表示替换三方库中的相关属性,如下:...转载 2019-01-05 14:13:44 · 11371 阅读 · 0 评论 -
Android TypeArray
在Anrdoid自定义View时候,需要使用TypedArray来获取XML layout中的属性值,使用完之后,需要调用recycle()方法将TypeArray回收。那么TypeArray是什么呢?首先,它的常规用法TypedArray array = context.getTheme().obtainStyledAttributes(attrs, ...转载 2019-01-05 15:00:53 · 870 阅读 · 0 评论 -
Android WebView设置图片自适应屏幕
从网上查找资料,发现有多种方式, 我用了其中最简单的方式:使用java.lang.String的replace方法,ontent = content.replace("<img", "<img style="max-width:100%;height:auto");webView.loadDataWithBaseURL(null, content, "text/html",...转载 2019-03-20 09:23:37 · 789 阅读 · 1 评论 -
ProGuard代码混淆
Proguard是一个Java类文件压缩器, 优化器, 混淆器, 预检验器. 压缩环节会检测以及移除没有用到的类, 字段, 方法以及属性. 优化环节会分析以及优化方法的字节码, 混淆环节会用无意义的短变量去重命名类, 变量, 方法. 这些步骤让代码更精简, 更高效, 也更难被逆向.如何编写一个ProGuard配置文件1. 基本混淆混淆文件的基本配置信息, 任何APP都要使用,可以作为模...转载 2019-04-19 10:06:11 · 702 阅读 · 0 评论 -
gradle进行apk签名打包
默认为debug mode, 使用的签名文件在: $HOME/.android/debug.keystoreAndroid系统在安装APK的过程中,会对APK进行签名检验, 校验通过后才能安装成功.数字摘要1. 唯一性在不考虑碰撞的情况下, 不同的数据的计算出的接要是不同的.2. 固定长度比较常用的Hash算法有MD5和SHA1, MD5的长度是128位, SHA1的长度是...转载 2019-04-21 15:34:44 · 1289 阅读 · 0 评论 -
android app常用图标尺寸规范
程序启动图标(Logo)\底部菜单图标小屏ldpi() 36x36 px中屏mdpi(160dpi) 48x48 px大屏hdpi(240dpi) 72x72 px特大屏xhdpi(320dpi) 96x96 px超大屏 xxhdpi(480dpi) 144x144px弹出对话框项部图标\列表项图标\底部或项部tab标签图标小屏 24x24 px中屏 32x3...转载 2019-03-26 09:54:59 · 1080 阅读 · 0 评论 -
Android Activity和Fragment之间的跳转方式
预备知识Fragment必须嵌入到Activity中, 当Activity暂停时, 其中的所有片段也会暂停, 当Activity被销毁时,所有片段也会被销毁. 不过, 当Activity正在运行时,可以独立操纵每个Fragment, 如添加或移除它们. 当执行此类Fragment事务时, 也可以将其添加到由Acitivy管理的返回栈中.通过扩展Fragment类或其子类来创建一个片段, ...转载 2019-03-22 13:45:42 · 3419 阅读 · 0 评论 -
android:descendantFocusability
该属性是当一个view获取焦点时, 定义ViewGroup和其子控件两者之间的关系, 属性的值有三种:(1) beforeDescendants: viewgroup会优先其子控件而获得焦点.(2) afterDescendants: viewgroup只有当其子类控件不需要获取焦点时才获取焦点.(3) blockDescendants: viewgroup会覆盖子类控件而直接获得焦点...转载 2019-03-22 10:42:53 · 536 阅读 · 0 评论 -
android:layout_weight
只有在LinearLayout时, 该属性才有效.android:layout_weight的真实宽度=android:layout_width+占比的剩余空间例如:设屏幕宽度为L, 在两个view的宽度都为match_parent的情况下,原有宽度为L, 两个view的宽度都为L. 那么剩余宽度为L-(L+L)=-L, 左边的view占比1/3, 所以实际宽度=L+(-L)*1/3=...转载 2019-03-21 07:52:53 · 190 阅读 · 0 评论 -
android:layout_gravity和android:gravity属性的区别
gravity的中文意思就是"重心", 就是表示view横向和纵向的依靠位置.android:gravity是对view控制本身来说的, 是用来设置view本身的内容应该显示在view的什么位置, 默认值是左侧. 也可以用来设置布局中的控件位置 .android:layout_gravity是相对于包含该元素的父元素来说的,设置该元素在父元素的什么位置....转载 2019-03-21 07:29:58 · 182 阅读 · 0 评论 -
android webview加载网页不显示图片问题
android webview从Lollipop(5.0)开始webview默认不允许混合模式, https当中不能加载http资源, 而开发的时候可能使用的是https的链接, 但是链接中的图片可能是http的, 所以需要设置开启.if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) { mWebView....转载 2019-03-20 09:27:13 · 2735 阅读 · 0 评论 -
CenOS7系统下配置安装Genymotion模拟器
配置步骤1、配置JDK2、配置Android SDK3、安装VirtualBox4、安装启动Genymotion配置JDK1、卸载自带的OpenJDKLinux上一般会安装Open JDK(1)rpm -qa|grep javarpm是管理套件,-qa 使用询问模式,查询所有套件(2) rpm -e --nodeps xx.openjdk.xxxx...转载 2018-12-14 10:32:39 · 1889 阅读 · 0 评论 -
Handler更新UI的三种方式
public class MainActivity extends Activity {private TextView text;private Handler handler = new Handler();@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedI...转载 2018-12-19 17:26:37 · 661 阅读 · 0 评论 -
Android SwipeRefreshLayout RecyclerView
SwiperRefreshLayout介绍1、在坚直滑动时想要刷新页面可以用SwipeRefreshLayout来实现。它通过设置OnRefreshListener来监听界面的滑动从而实现刷新。也可以通过一些方法来设置SwipeRefreshLayout是否可以刷新。如setRefreshing(true),展开刷新动画。setRefreshing(false)取消刷新动画。setEnab...转载 2018-12-19 15:30:43 · 340 阅读 · 0 评论 -
Android的六大布局
Linear Layout(线性布局)、Frame Layout(帧布局)、Relative Layout(相对布局)、Absolute Layout(绝对布局)、Table Layout(表格布局)、Absolute Layout(绝对布局)。一、Linear Layout这个布局会将它所包含的控件在线生方向上依次排列,我们可以通过android:orientation这个属性指定排列方...转载 2018-10-09 14:04:18 · 198 阅读 · 0 评论 -
genymotion-arm-translation.zip无法安装问题
查看是否是中文路径问题当genymotion-arm-translation.zip在中文目录下时,会出现拖拽无法安装的情况。 genymotion-arm-translation.zip下载路径转载 2018-10-18 16:31:15 · 1569 阅读 · 3 评论 -
android startActivityForResult与startActivity的不同之处
startActivity仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startActivitystartActivityForResult可以一次性完成这项任务,假若从T1Activity跳转到下一个T2Activity,而当这个T2Activity调用了finish方法以后,程序会自动跳转回T1Activity,并调用前一个T1Activity中的onActivity...转载 2018-10-18 10:21:35 · 273 阅读 · 0 评论 -
使用IntelliJ Idea开发android
之前我已经装好了jdk,sdk,idea,genymotion模拟器。1.将模拟器Genymotion和IntelliJ Idea相关联。https://www.genymotion.com/plugins/(1)从这里下载插件,然后打开Idea,选择File->Settings,出现如下界面,并选择Plugins.(2)选择“Install plugin from disk...转载 2018-10-08 14:43:14 · 1385 阅读 · 0 评论 -
Android-SharedPreferences
简称Sp,是一种轻量级的数据存储方式,采用key/value的方式进行映射,最终会在手机的/data/data/package_name/shared_prefs/目录下以xml的格式存在。Sp通常用于记录一些参数配置、行为标记等。但是不要使用Sp去存储大的数据和文件,否则会大大影响应用性能,甚至出现ANR(Application Not Response)。获取Sp的方式1、调用Cont...转载 2018-10-18 09:05:42 · 136 阅读 · 0 评论 -
Android View
View是Android中所有控件的基类,ViewGroup也继承了View,这就意味着View可以是单个控件,也可以是多个控件组成的一组控件。View的位置参数View的位置由它的四个顶点来决定,分别对应View的四个属性:top、bottom、left、right。top是左上角纵坐标,bottom是右下角纵坐标,left是左上角横坐标,right是右下角横坐标。根据上图我们可...转载 2018-10-11 17:31:06 · 185 阅读 · 0 评论 -
android intent
Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述。Android则根据Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。Intent属性的设置1、Action,也就是要执行的动作常量 目标组件 动作 ACTION_CALL activity Initiate a phone call ACTI...转载 2018-10-11 11:09:22 · 175 阅读 · 0 评论 -
AppCompatActivity与toolbar的结合
一、首先我们必须在配置文件中,写入Toolbar<android.support.v7.widget.Toolbar android:id="@+id/activity_main_toolbar" android:layout_height="wrap_content" android:layout_width="match_parent" androi...转载 2018-10-11 10:00:31 · 267 阅读 · 0 评论 -
android-layout_centerHorizontal layout_gravity gravity的区别
layout_centerHorizontal是相对于RelativeLayout的布局属性,如果设置为true,就将该控件设置在相对于父控件水平居中的位置。layout_gravity针对LineraLyout的一种控件对齐方式,可以把值设置成下列值:center_vertical center_horizontal center等待。gravity控制控件内文件字的对齐...转载 2018-10-19 10:53:17 · 209 阅读 · 0 评论 -
Android Manifest.xml
一、概述Manifest.xml是每个android程序中必须的文件,它位于整个项目的根目录。里面配置了程序运行所必要的组件、权限,以及一些相关信息。二、结构图<?xmlversion="1.0"encoding="utf-8"?><manifest> <uses-sdk/> <uses-configuration/&...转载 2018-10-10 11:48:43 · 324 阅读 · 0 评论 -
android HttpURLConnection
在android 6.0(api 23)sdk之后,HttpClient不再提供,所以android原生的网络请求为HttpURLConnection。介绍HttpClient与HttpURLConnection的比较1、HttpClient是apache的开源框架,封装了访问http的请求头、参数、内容体、响应等待,使用起来比较方便,而HttpURLConnection是java的标...转载 2018-10-17 11:16:10 · 261 阅读 · 0 评论 -
android的allowBackup
Android API Level 8及其以上Android系统提供了为应用程序数据的备份和恢复功能,此功能的开关决定了该应用程序中AndroidManifest.xml文件中allowBackup属性值,其属性值默认是true。当allowBackup标志为true时,用户即可通过 adb backup和adb restore来进行对应用数据的备份和恢复,这可能会带来一定的安全风险。Andr...转载 2018-11-07 09:18:37 · 359 阅读 · 0 评论 -
Android自定义Application
自定义Application用途1、为得到一个Application对象提供便捷。2、封装一些通用操作。3、初始化一些全局的变量数据。对于前两点,官方不建议这样做,国灰使用一个单例模式同样可以做到。但是自定义Application没有任何副作用。而在Applicationr onCreate()方法里去初始化各种全局的变量数据是一种比较推荐的做法。实战1、新建一个Appli...转载 2018-11-07 08:47:29 · 2092 阅读 · 0 评论 -
android onCreate与onCreateView的区别
onCreate是指创建该fragment,类似于Activity.onCreate,你可以在其中初始化除了view之外的东西。onCreateView是创建该fragment对应的视图,你必须在这里创建自己的视图并返回给调用者。例如return inflater.inflate(R.layout.fragment_settings, container, false); ...转载 2018-11-06 09:54:25 · 5863 阅读 · 0 评论 -
Android - Butterknife
概述ButterKnife是一个专专注于Android系统的View注入框架,使用ButterKnife对性能基本没有损失,因为ButterKnife用到的注解并不是在运行时反射的,而是在编译的时候生成新的class.ButterKnife的注册与绑定1、在Activity中绑定ButterKnife由于每次都要在Activity中的onCreate绑定Activity,所以个人建...转载 2018-10-23 09:12:47 · 235 阅读 · 0 评论 -
android:text和tools:text
安卓开发中,在写布局代码xml的时候,如果想看到运行之后才能看到的布局效果,但又不想动不动就把应用跑起来,就可以用到tools这个命名空间了。tools命名空间比较特别,该命名空间可以覆盖组件的任何属性,以便在ide预览中进行不同的展示,。<TextView android:id="@+id/text_main" android:layout_width="match_pare...转载 2018-10-22 16:16:45 · 2262 阅读 · 0 评论 -
android-自定义控件
我们所用的所有控件都是直接或间接继承自View,View是android最基本的一种UI组件,它可以在屏幕上绘制一块矩形区域,并能响应这块区域的各种事件。自定义控件两种方式1、继承ViewGroup例如:ViewGroup , LinearLayout, FrameLayout, RelativeLayout等。2、继承View例如:View, TextView, ImageV...转载 2018-10-22 14:37:04 · 243 阅读 · 0 评论