前言

转眼已经毕业一年了,工作一年还是学到了很多东西,但是由于公司维护的老项目,目前还是用eclipse开发,看着android studio 2.0 出来了,还是很想去尝试的,另外很多高版本的API,github上的开源控件以及Material Design,于是我就决定做个简单的应用,来熟悉一下android studio 以及对我来说这些比较新颖的东西。所以梳理一下自己的开发过程和参考的文章。


效果图

先看一下效果图吧,具体的可以去应用宝下载
账号管家下载地址


整体思路

于是我想到做一个账号管家的应用,来管理生活工作中乱七八糟的账号。可是这个真的也不好做,谁放心把账号密码交给一个不知名的app呢,这里我做了一些防护。

  1. 为了用户放心使用,这是一个单机应用。
  2. 可以使用不可逆加密的尽量使用不可逆加密。(比如登录时候的解锁密码,不需要展示的都使用不可逆加密)
  3. 数据库不可备份
  4. 代码混淆

主要的技术

1.登录
可以是密码登录或者九宫格解锁(用到的是github上的PatternLock,有兴趣的可以自己去看一下)

2.应用的主页
还是采用github上的FlowingDrawer 控件(带手势流动效果侧滑菜单github对于如何使用说的很清楚)抽屉导航NavigationView,可以参考一下(上面有效果图):
下面是Navigation View的使用的参考
Navigation View的使用

3.RecyclerView展示
是用RecyclerView的瀑布流来展示,item是CardView,CardView是v7包下的。。遇到的坑可以参考
cardView开发中的小问题

4.使用到的输入框

EditText+TextInputLayout,自带动画,非常炫酷。
以及EditText中的setError(“错误提示”)。如图:

只要把TextInputLayout 作为Edittext控件的父布局即可。

    <android.support.design.widget.TextInputLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><EditTextandroid:id="@+id/password"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="@string/login_password"android:inputType="textPassword"android:maxLines="1"android:singleLine="true" /></android.support.design.widget.TextInputLayout>

可以看出来TextInputLayout是MD里面提供的控件。

5.SnackBar:
Snackbar是Android Support Design Library库中的一个控件,可以在屏幕底部快速弹出消息,比Toast更加好用。我在登录成功的时候默认做了一个SnackBar,用于提示系统时间。
参考:SnackBar使用

6.设置界面
像手机原生的设置页面,这里我用的是android 提供了一种设置界面的写法:使用继承PreferenceFragment 然后实现Preference.OnPreferenceChangeListener,Preference.OnPreferenceClickListener 监听。在监听的回调中处理自己的业务逻辑,界面如图所示:

1. 首先要新建xml 包,在里面新建preference.xml,选择PreferenceScreen作为document的根。
2. 以下面布局为例,简单说一下

    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:layout="@layout/preference_item"android:title=""><PreferenceCategoryandroid:layout="@layout/preference_category_widget"android:title="@string/title_login_settings"><CheckBoxPreferenceandroid:key="@string/MODE_PATTERN_LOCK_MODE_VISIBLE"android:layout="@layout/preference_item"android:summaryOff="@string/pattern_lock_visible_off"android:summaryOn="@string/pattern_lock_visible_on"android:widgetLayout="@layout/switch_layout"android:checked="true"android:title="@string/pattern_lock_visible"/></PreferenceCategory>
</PreferenceScreen>

其中:

PreferenceCategory中的title为显示偏好种类的名字,我这边用的是‘登录设置’

CheckBoxPreference 中的key 为这个偏好的sp中存储的key值,summaryOff 和 summaryOn表示开关操作是下方显示的summary概述信息 title 为上方标题。

widgetLayout 表示这个组件的布局 。我这边使用的SwitchCompat控件 ,对应的switch_layout布局如下:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.SwitchCompat xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:textOff="OFF"
android:textOn="ON" />

其中的android:id=”@android:id/checkbox” 表示为系统的checkbox,不可随意修改

在java代码中:

    public class SettingFragment extends PreferenceFragment implements  Preference.OnPreferenceChangeListener,Preference.OnPreferenceClickListener{private CheckBoxPreference loginLockVisiablePre;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);addPreferencesFromResource(R.xml.preferences);loginLockVisiablePre = (CheckBoxPreference) getPreferenceManager().findPreference(getString(R.string.MODE_PATTERN_LOCK_MODE_VISIBLE));loginLockVisiablePre.setOnPreferenceChangeListener(this);}@Overridepublic boolean onPreferenceChange(Preference preference, Object newValue) {if(preference instanceof  CheckBoxPreference) {boolean checked = Boolean.valueOf(newValue.toString());//获取到对应的key 和valueLog.i("test",preference.getKey()+"=="+checked);}return true;}//如果有点击事件,可以在这里处理@Overridepublic boolean onPreferenceClick(Preference preference) {return false;}}

7.分享功能
分享应用和分享账号密码,这个需要阅读微信开放平台去了解。大概流程是:
- 1.申请appId
- 2.集成微信开发sdk,只用分享好像不需要联网。在app包名下新建一个wxapi的包(如应用的包名是com.a.b,则必须有com.a.b.wxapi)需要新建一个WXEntryActivity的类。
- 3.调用sdk,发送请求,并且分享成功之后在WXEntryActivity中的onResp会回调到。我们这里选择finish当前的activity,防止显示空白的activity。

    public class WXEntryActivity extends Activity implements IWXAPIEventHandler {private IWXAPI mIWXAPI;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mIWXAPI = WXAPIFactory.createWXAPI(this, WXConstants.APP_ID);mIWXAPI.handleIntent(getIntent(), this);}@Overridepublic void onReq(BaseReq baseReq) {}@Overridepublic void onResp(BaseResp baseResp) {finish();}}

其他的一些控件

很多v7包下的系统控件android.support.v7.app.AlertDialog;,ProgressDialog等等这些,其实已经做得很好看了,有机会还是多使用使用。


遇到的问题

1.application中theme主题的理解

新建一个空项目的时候,在清单文件中的android:theme=”@style/AppTheme”,对应的

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"><!-- Customize your theme here. --><item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorPrimaryDark</item><item name="colorAccent">@color/colorAccent</item><item name="patternViewStyle">@style/PatternView.Light</item><!-- Or PatternView.Light, or your own style extending these two or not. -->
</style>

下面这张图,可以帮我们更好的理解这些参数的意义:

我一开始创建的editText是粉红色的,纠结了半天,原来是colorAccent 这个值设置的问题。。。

2.cardView显示的问题

虽然上面的坑中有提到,但是我还是想再说一下:android 5.0以上和和以下是不一样。
有问题的界面截图:

主要是android 5.0前后的差异:在xml 中写的
android:layout_margin=”@dimen/cardview_default_margin”,这个cardview_default_margin值在不同value包中的值需要不同:

我这里是这样写的:

  1. res/values/dimens.xml中: <dimen name="cardview_default_margin">0dp</dimen>
  2. res/values-v21/dimens.xml中
    <dimen name="cardview_default_margin">8dp</dimen>
    这样就能解决这样的显示问题

3.进入输入界面,自动弹出软键盘,这样显得不友好,处理方式:

  • 可以在EditText前面放置一个看不到的LinearLayout

    <LinearLayout
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:layout_width="0px"
    android:layout_height="0px"/>
    
  • 或者在他的父布局中加入

    android:focusable="true"
    android:focusableInTouchMode="true"
    

总结

当然还有很多没有讲到的,比如android studio如何导入github的开源项目,如何添加Material Design依赖关系呀,Gradle是什么玩意呀。这些网上其实资料很多了,在加上我也只是入门水平,再此就不累赘了。写此博客,算是我对前一阶段学习的一个总结吧。


关于开发个简单应用(账号管家)的总结相关推荐

  1. java计算机毕业设计vue开发一个简单音乐播放器(附源码、数据库)

    java计算机毕业设计vue开发一个简单音乐播放器(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ec ...

  2. CK3M自定义伺服算法(C语言)开发的简单流程

    本文的章节安排如下 1 注意事项 2 自定义伺服算法(C语言)开发 2.1 Global Includes 2.2 C Language 2.3 编译并下载程序 2.4 控制器调试 3 运动程序 在导 ...

  3. Python开发一个简单的BBS论坛

    项目:开发一个简单的BBS论坛 需求: 整体参考"抽屉新热榜" + "虎嗅网" 实现不同论坛版块 帖子列表展示 帖子评论数.点赞数展示 在线用户展示 允许登录用 ...

  4. java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署

    java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署 本源 ...

  5. 账号管家(绿色版) - 密码账号管家助手

    简介: 大家会在很多网站注册账号口令信息,比如银行账号.邮箱账号.网站的账号等,账号密码太多记不住? 让密码管家为您效劳吧! 有了它, 从此挥别遗忘账号密码的窘境! 账号管家是一款「安全加密」的账号密 ...

  6. 【HTML5游戏开发】简单的《找不同汉字版》,来考考你的眼力吧

    一,准备工作 本次游戏开发需要用到lufylegend.js开源游戏引擎,版本我用的是1.5.2(现在最新的版本是1.6.0). 引擎下载的位置:http://lufylegend.googlecod ...

  7. 圆环,扇形控件基本算法一种实现 - 代码库 - CocoaChina_让移动开发更简单

    圆环,扇形控件基本算法一种实现 - 代码库 - CocoaChina_让移动开发更简单 // //  CircleCore.h //  Quartz // //  Created by 仙人掌 on ...

  8. SaltStack介绍——SaltStack是一种新的基础设施管理方法开发软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流...

    SaltStack介绍和架构解析 简介 SaltStack是一种新的基础设施管理方法开发软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流,以毫秒为单位.SaltSta ...

  9. 主流WEB开发语言简单对比(转)

    主流WEB开发语言简单对比  原文链接:http://www.uml.org.cn/site/201401091.asp   随着时间的飞逝,随着岁月的流失.从世界上第一台计算机ENIAC诞生至今,已 ...

最新文章

  1. c++ DirectShow播放任意格式的视频
  2. python visa模块_已经安装了pyvisa仍然报错没有模块
  3. java反射api研究_深入研究Java 8中的可选类API
  4. 杭州之行--记杭电网新恩普杯程序设计邀请赛
  5. mysql用utf-8_为什么在MySQL中不建议使用UTF-8
  6. 校园卡管理系统实验报告c语言,校园卡管理系统-C语言.doc
  7. 使用python解析pdf文档中的单词导入到有道云词典中
  8. 论文阅读《Revisiting Domain Generalized Stereo Matching Networks from a Feature Consistency Perspective》
  9. NAS 和 SAN 服务器概述
  10. 通过ICommand和ITool操作地图
  11. 深度学习基础6(微分,偏导,梯度,链式法则)
  12. 第三章第九题(商业:检验ISBN-10)((Business: check ISBN-10))
  13. Matlab蒙特卡罗模拟
  14. python判断按键是否按下_python – 如何检查键修饰符是否被按下(shift,ctrl,alt)?
  15. 聊聊新加坡的工作和生活
  16. Verilog学习笔记(5):Verilog高级程序设计
  17. 锐捷交换机系统版本升级11.X平台
  18. a-za-z-9_P-ZA的完整形式是什么?
  19. python selenium 大众点评餐厅信息+用户评论 爬虫
  20. 从技术出发 | 有孚网络吕鑫:生信海量数据管理的实践与探讨

热门文章

  1. 软件质量缺陷管理工具大全
  2. atan2和atan函数的区别
  3. 如何高效实现搜索引擎爬虫进行数据挖掘-搜索引擎爬虫(SERP)集成测试与分享
  4. 模拟酷狗2008声音频谱。
  5. Linux服务器中木马(肉鸡)手工清除方法(转载)
  6. Python编程实例分析Ⅰ
  7. 例题 9-13 Hali-Bula 的晚会(Party at Hali-Bula,ACM/ICPC Tehran 2006,UVa1220)
  8. 关于QQ一些功能的实现(一)
  9. Ubuntu安装deb文件的步骤
  10. Markdown使用学习