Android Coding利器之掌握小技巧,助你Coding更上一层楼~

本文讲的是Android Coding利器之掌握小技巧,助你Coding更上一层楼~,话说前几天在网上浏览到一大牛写的关于Android布局优化的文章,看后感触很深,回过头看看自己写过的代码,发现还是有不少需要改进,今天找不到那天看的文章了,只能自己总结一些,以后有机会再次补充吧~ 。

本文目标

通过举例说明Android开发中的小技巧,让你我更6的玩转Android~

掌握小技巧,助你Coding更上一层楼~

本文将通过以下几点进行举例说明:

  • Android Studio 常用快捷键;
  • Android Studio 强大的代码补全;
  • Android Studio 插件;
  • Android 布局优化

Android Studio 常用快捷键

只从接触Android Studio之后,愈发离不开这个开发神器了~也是,越接触,越能感觉Studio的魅力,今天为大家带来LZ开发中常用的一些快捷键。

1. Shift+F6 全局修改

LZ一般使用这种方式去改全局变量,或者资源名称。

2. Alt+F7 查看全局引用

LZ一般优化时会使用这个去查看某个方法或者变量全局引用

3. Ctrl+Shift+上下键 移动代码

4. 强大的 Alt+Insert

Alt+Insert,这个快捷键异常强大,里面包含生成get,set,toString ... 等一系列,爱不释手~

5. Ctrl+F 局部查找

用这个找个方法啥的很6,但是仅限于局部,也就是本类

6. Ctrl+Alt+V 自动初始化变量 引入变量类型

只适用于基本类型

7. Ctrl+D 向下复制

还在Ctrl+C,Ctrl+V嘛?Out了,骚年~

8. Ctrl+Alt+L 格式化代码

这个不得不说,都成为一种习惯,写好一部分总是习惯格式化下代码

9. Ctrl+Alt+O 去除无效引用(包名)

去除无用引用包以及格式化代码都成为LZ标配了~GGG

10. Ctrl+J 强大的代码补全

不得不说,这个真的666啊~

11. Ctrl+Alt+T 快速生成类似try块 if块 while等

这个LZ一般还是用于生成try块方便,在项目中针对某些会出现异常的代码块都需要添加try

块,防止异常导致崩溃

12. 贯穿全局的Alt+Enter

此子可用于导包,或者修正某些异常,类似于某些方法需要抛出异常或者添加try块等

13. Ctrl+N 查找类

不想用鼠标,还想找个类肿么办?Ctrl+N来帮你~

14. Ctrl+E 查看浏览历史

15 .Alt+Shift+C 对比本地历史纪录

这个技能不错,666

16. Ctrl+Shift+Space 自动补全代码

17. Ctrl+Y 删除当前行

18. F2 或Shift+F2 高亮错误或警告快速定位

19. Alt+J 多行编辑

想要一次性写多行么?想一次性修改多行么?完全不是梦~

关于常用快捷键介绍到此,以后用到再补充~

Android Studio 强大的代码补全

在上面已经为大家列举LZ个人开发中常用的一些快捷键,下面简单说明下强大的代码补全功能~继续感受Android Studio的魅力~

骚年,还在手动写public static final吗?

作为项目中常用也几乎为必备的东西,强大的Studio早已看穿一切~当然LZ这里没有全面,大家可以自行挖掘~或者直接使用快捷键~

Android Studio 插件

强大的Android Studio背后肯定会有n多插件使其更加优秀,下面将列举LZ常用的几种,具体大家可自行发掘~

1. GsonFormat json快速生成实体类

还在为Json编写实体类犯愁吗?赶快来使用它~

2. ButterKnife Zelezny 一键生成注解 简化代码

使用这个需要添加相应的依赖,为了省事儿,LZ直接盗图了~勿怪

3. Parcelable 序列化

Android中的序列化有两种方式,分别是实现Serializable接口和Parcelable接口,但在Android中是推荐使用Parcelable,而且这边过程比较繁琐,幸好有这神器~

4. Genymotion 优秀的模拟器

不解释,也不截图了,不过现在谷歌推出的模拟器使用起来也还不错,个人比较支持谷歌更新后的模拟器

LZ目前尝试用的也就以上几个,当然,还有很多优秀的插件,附上地址,大家自行浏览选择使用即可~

https://www.zhihu.com/question/28026027

Android 布局优化

布局优化,这是个有意思的话题,下面通过不同例子一起来看看吧~

一、巧用android:drawab系列+Style提高代码可读性以及简洁性

TextView这个东西,想必大家用的都熟透了吧?今天我们来说说如何更好玩转TextView。

举一个很通用的例子,微信"我"的界面布局

大家注意到"钱包","收藏","相册"等布局了么?

以前,我们会这么写:

 
  1. <LinearLayout 
  2.        android:layout_width="match_parent" 
  3.        android:layout_height="wrap_content" 
  4.        android:layout_marginTop="15dp" 
  5.        android:background="#FFF" 
  6.        android:orientation="horizontal" 
  7.        android:padding="15dp"
  8.  
  9.        <ImageView 
  10.            android:layout_width="30dp" 
  11.            android:layout_height="30dp" 
  12.            android:background="@mipmap/ic_launcher_1"/> 
  13.  
  14.        <TextView 
  15.            android:layout_width="match_parent" 
  16.            android:layout_height="wrap_content" 
  17.            android:layout_gravity="center_vertical" 
  18.            android:text="钱包"/> 
  19.  
  20.    </LinearLayout> 
  21.  
  22.    <LinearLayout 
  23.        android:layout_width="match_parent" 
  24.        android:layout_height="wrap_content" 
  25.        android:layout_marginTop="15dp" 
  26.        android:background="#FFF" 
  27.        android:orientation="horizontal" 
  28.        android:padding="15dp"
  29.  
  30.        <ImageView 
  31.            android:layout_width="30dp" 
  32.            android:layout_height="30dp" 
  33.            android:background="@mipmap/ic_launcher_1"/> 
  34.  
  35.        <TextView 
  36.            android:layout_width="match_parent" 
  37.            android:layout_height="wrap_content" 
  38.            android:layout_gravity="center_vertical" 
  39.            android:text="钱包"/> 
  40.  
  41.    </LinearLayout> 
  42.  
  43.    ... ...  

如果点击项多的话,反而显得乱,而且多了很多无用的代码,今天我们来尝试新的玩法~

 
  1. <TextView 
  2.        android:layout_width="match_parent" 
  3.        android:layout_height="wrap_content" 
  4.        android:layout_marginTop="15dp" 
  5.        android:background="#FFF" 
  6.        android:drawableLeft="@mipmap/ic_launcher_1" 
  7.        android:drawablePadding="10dp" 
  8.        android:gravity="center_vertical" 
  9.        android:padding="10dp" 
  10.        android:text="钱包"/> 
  11.  
  12.    <TextView 
  13.        android:layout_width="match_parent" 
  14.        android:layout_height="wrap_content" 
  15.        android:layout_marginTop="15dp" 
  16.        android:background="#FFF" 
  17.        android:drawableLeft="@mipmap/ic_launcher_1" 
  18.        android:drawablePadding="10dp" 
  19.        android:gravity="center_vertical" 
  20.        android:padding="10dp" 
  21.        android:text="钱包"/> 
  22.  
  23.    ... ...  

俩者实现效果如下:

TextView多的话还可以提取Style文件,代码简洁易读。

二、TextView跑马灯

附上效果图:

部分代码如下:

 
  1. <TextView 
  2.    android:id="@+id/id_test" 
  3.    android:layout_width="match_parent" 
  4.    android:layout_height="wrap_content" 
  5.    android:layout_marginTop="15dp" 
  6.    android:background="#FFF" 
  7.    android:singleLine="true" 
  8.    android:ellipsize="marquee" 
  9.    android:marqueeRepeatLimit="marquee_forever" 
  10.    android:text="失恋算个啥?轻轻的,你走吧,千万别后悔,因为只要你一挥手,就会发现,已经有那等不及的意中人,正偷偷摸摸拉你的手!"/>  

记得Activity要设置一个属性,否则无效。

 
  1. findViewById(R.id.id_test).setSelected(true); 

要想实现跑马灯效果,必须满足一个条件,就是TextView内容必须超出屏幕,否则无效!当然你可以自定义。

三、关于显示价格优化

效果如下:

按照之前的想法,我们会这么玩:

 
  1. <TextView 
  2.      android:layout_width="wrap_content" 
  3.     android:layout_height="wrap_content" 
  4.     android:text="您需要支付:"/><TextView 
  5.     android:layout_width="wrap_content" 
  6.     android:layout_height="wrap_content" 
  7.     android:text="¥50" 
  8.     android:textColor="@android:color/holo_red_light"/>  

可有简单用法,干嘛还多写一个TextView,这不是浪费嘛?瞧着~

string文件中这样写:

 
  1. <string name="string_pay_price">您需要支付:%1$s</string> <!-- %1$s:代码第一位是String类型,同理,第二位%2$s --> 

Activity定义方法:

 
  1. private void setPayPrice(String payPrice) { 
  2.     tvShow.setText(getString(R.string.string_pay_price, payPrice)); 
  3.     SpannableStringBuilder builder = new SpannableStringBuilder(tvShow.getText().toString()); 
  4.     ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.RED); // 根据要求自定义颜色值 
  5.     builder.setSpan(colorSpan, 4, tvShow.getText().toString().length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
  6.     tvShow.setText(builder); 
  7.  

四、自动链接TextView内容,例如网址,电话,e-mail等

效果如下:

代码部分:

 
  1. <TextView 
  2.     android:id="@+id/id_test" 
  3.     android:layout_width="wrap_content" 
  4.     android:autoLink="all" 
  5.     android:text="贺贺博文地址:http://blog.csdn.net/u012400885 \n查询电话:13811604922" 
  6.     android:layout_height="wrap_content"/>  

五、巧用LinearLayout,节省不必要代码~

下面为大家附上一个简单效果图,大家首先想想,如果是你,怎么写?

这里为大家引入另一种写法,也就是小标题如何巧用LinearLayout

首先编写shape文件,很简单,设置高度和颜色。

 
  1. <shape xmlns:android="http://schemas.android.com/apk/res/android"
  2.  
  3. <size android:height="15dp"/> 
  4.  
  5. <solid android:color="#FFF000"/></shape>  

其次,在布局文件中设置divider以及showDividers属性即可。

 
  1. <?xml version="1.0" encoding="utf-8"?><LinearLayout 
  2.     xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     xmlns:tools="http://schemas.android.com/tools" 
  4.     android:layout_width="match_parent" 
  5.     android:layout_height="match_parent" 
  6.     android:background="#FFF" 
  7.     android:divider="@drawable/shape_0" 
  8.     android:orientation="vertical" 
  9.     android:showDividers="middle|beginning|end" 
  10.     tools:context="cn.hlq.hlqstudyandroid.MainActivity"
  11.  
  12.     <TextView 
  13.         android:layout_width="match_parent" 
  14.         android:layout_height="wrap_content" 
  15.         android:drawableLeft="@mipmap/ic_launcher_1" 
  16.         android:drawablePadding="10dp" 
  17.         android:gravity="center_vertical" 
  18.         android:padding="10dp" 
  19.         android:text="item项111"/> 
  20.  
  21.     <TextView 
  22.         android:layout_width="match_parent" 
  23.         android:layout_height="wrap_content" 
  24.         android:drawableLeft="@mipmap/ic_launcher_1" 
  25.         android:drawablePadding="10dp" 
  26.         android:gravity="center_vertical" 
  27.         android:padding="10dp" 
  28.         android:text="item项222"/></LinearLayout>  

下面简单介绍下android:showDividers属性:

android:showDividers="middle|beginning|end":鉴名其意,三个属性值分别为 中间 开始部分 结束部分,也就是在三个部分显示分割线。

有个哥儿们会说了,不是还有v7包下LinearLayoutCompat不也能实现分割线吗?

确实,不过我试了下,感觉俩者一样,这里就不做过分说明了~

六、禁止截屏功能,间接保护App

想想实现禁止应用截屏,只需要一行代码,如下:

 
  1. getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE); 

防止setContentView后即可,之后截屏的时候,会提示以下内容:

结束语

东西很简单,LZ简单总结了下,给自己留点东西~


本文作者:佚名

来源:51CTO

原文标题:Android Coding利器之掌握小技巧,助你Coding更上一层楼~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/393846.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux系统报警怎么办,常见Linux系统故障和解决方法

常见Linux系统故障和解决方法发布时间&#xff1a;2020-06-06 14:48:19来源&#xff1a;亿速云阅读&#xff1a;212作者&#xff1a;Leah栏目&#xff1a;云计算这篇文章给大家分享的是常见的Linux系统故障和解决方法。在使用系统的过程中总会有各种各样的故障&#xff0c;所以…

Vuex 模块化与项目实例 (2.0)

Vuex 强调使用单一状态树&#xff0c;即在一个项目里只有一个 store&#xff0c;这个 store 集中管理了项目中所有的数据以及对数据的操作行为。但是这样带来的问题是 store 可能会非常臃肿庞大不易维护&#xff0c;所以就需要对状态树进行模块化的拆分。 首先贴出一个逻辑比较…

click js自动点击 vue_vue.js2.0点击获取自己的属性和jquery方法

如下所示&#xff1a;:data-index"index":dt"index"v-on:click"onclick($event,index)":data-d "JSON.stringify( item)"href"http://www.baidu.com" rel"external nofollow" rel"external nofollow"da…

Python:知识目录

Python目录 第一篇&#xff1a;数据类型部分文件操作 基础数据类型---str 基础数据类型---List 基础数据类型---dict 基础数据类型---set 基础数据类型---bytes 数据类型的总结 文件操作------读&#xff0c;写 文件操作------使用方法 第二章&#xff1a;函数模块 初识函数…

初学者css常见问题_5分钟内学习CSS-初学者教程

初学者css常见问题关于网络设计语言的快速教程。 (A quick tutorial on the design language of the web.) CSS (Cascading Style Sheets) is what makes web pages look good and presentable. It’s an essential part of modern web development and a must-have skill for …

leetcode39. 组合总和(回溯)

给定一个无重复元素的数组 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明&#xff1a; 所有数字&#xff08;包括 target&#xff09;都是正整数。 解集不能包含重复的…

一脸懵逼学习基于CentOs的Hadoop集群安装与配置(三台机器跑集群)

1&#xff1a;Hadoop分布式计算平台是由Apache软件基金会开发的一个开源分布式计算平台。以Hadoop分布式文件系统&#xff08;HDFS&#xff09;和MapReduce&#xff08;Google MapReduce的开源实现&#xff09;为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构。 注…

linux批量去掉文件名前缀,linux 批量删除某个前缀文件

1. 命令 (参考&#xff1a;https://blog.csdn.net/kl28978113/article/details/80271831)find ./ -name updatesites*-* -exec rm {} \;2. 举例[rootadmin batch-create-sites]# ls2020-02-13-10-10.out logs-2020-04-07-08-00.out updatesites-2020-02-12-01-49-25.xlsx updat…

Docker - 避免启动container后运行shell脚本执行完成后docker退出container

问题 最近在使用 Dockerfile 启动容器&#xff0c;发现使用Dockerfile调用容器里面的shell&#xff0c;当shell执行完成以后&#xff0c;docker会退出容器。 分析 Docker 在执行shell的时候&#xff0c;是在后台执行的&#xff1b;因此&#xff0c;在shell执行完成以后&#xf…

css画横线箭头_用CSS绘制三角形箭头

用CSS绘制三角形箭头。使用纯CSS&#xff0c;你只需要很少的代码就可以创作出各种浏览器都兼容的三角形箭头&#xff01;CSS代码:/* create an arrow that points up */div.arrow-up {width: 0;height: 0;border-left: 5px solid transparent; /* left arrow slant */border-ri…

Jmeter参数化的理解

jmeter参数化有两种情况&#xff1a; jmeter执行的sql语句中值的参数化&#xff08;如select过滤条件&#xff09;csv data set config参数表示方式${zjhm}jmx脚本的设置属性参数化&#xff0c;方便命令行调用时修改参数&#xff08;如并发量、执行时间&#xff09;在脚本中调用…

leetcode216. 组合总和 III(回溯)

找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数&#xff0c;并且每种组合中不存在重复的数字。 说明&#xff1a; 所有数字都是正整数。 解集不能包含重复的组合。 示例 1: 输入: k 3, n 7 输出: [[1,2,4]] 代码 class Solution {List<List…

linux内核epub,Android底层开发技术实战详解——内核、移植和驱动(第2版)[EPUB][MOBI][AZW3][42.33MB]...

内容简介本书从底层原理开始讲起&#xff0c;结合真实的案例向读者详细介绍了Android内核、移植和驱动开发的整个流程。全书分为21章&#xff0c;依次讲解驱动移植的必要性&#xff0c; Goldfish、OMAP内核和驱动解析&#xff0c;显示系统、输入系统、振动器系统、音频系统、视…

机器学习岗位太少_太多的东西要学习,很少的时间

机器学习岗位太少by Rick West由里克韦斯特(Rick West) 太多的东西要学习&#xff0c;很少的时间 (So much to learn, so little time) 我学习&#xff0c;保持动力并实现目标的主要技巧 (My top tips for learning, staying motivated, and achieving your goals) One of the…

用9种办法解决 JS 闭包经典面试题之 for 循环取 i

2017-01-06Tomson JavaScript转自 https://segmentfault.com/a/1190000003818163 闭包 1.正确的说,应该是指一个闭包域,每当声明了一个函数,它就产生了一个闭包域(可以解释为每个函数都有自己的函数栈),每个闭包域(Function 对象)都有一个 function scope(不是属性),function s…

bzoj 2296: 【POJ Challenge】随机种子

Time Limit: 1 Sec Memory Limit: 128 MBSec Special JudgeDescription1tthinking除了随机算法&#xff0c;其他什么都不会。但是他还是可以ac很多题目&#xff0c;他用的是什么呢&#xff1f;他会选择一个好的随机种子&#xff0c;然后输出答案。往往他选择的一个好的种子可…

英特尔第十代处理器为什么不支持win7_5GHz动力澎湃 高主频多核处理器成就巅峰玩家...

频率之争永远是处理器领域无法回避的话题。高主频在游戏中所带来的高速运行&#xff0c;稳定帧数等特性永远是玩家们所追求的目标。随着英特尔第十代桌面及移动版酷睿处理器的发布&#xff0c;无论是台式整机或是笔记本平台&#xff0c;都已全面进入了5GHz时代。选择英特尔处理…

leetcode46. 全排列(回溯)

给定一个 没有重复 数字的序列&#xff0c;返回其所有可能的全排列。 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 代码 class Solution {List<List<Integer>> cListnew ArrayList<>();public List<List<…

初级算法-12.反转字符串

题目描述: 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 你可以假设数组中的所有字符都是 ASCII 码表中的可打…

linux python源码目录结构,TensorFlow0.8源码阅读 -- 代码目录结构讲解

TensorFlow0.8发布以来受到了大量机器学习领域爱好者的关注&#xff0c;目前其项目在github上的follow人数在同类项目中排名第一。作为google的第一个开源项目&#xff0c;TensorFlow的源码结构较为清晰&#xff0c;相关的代码注释覆盖较全。本文首先从代码结构入手&#xff0c…