今天在用某记账软件,我心里就再琢磨着,万一被老婆拿到手机,胡乱翻一通,万一看到了我的用钱流水账,那可不好,要遭!我要隐私~怎么办呢?于是发现其实人家早已想到,为用户考虑到了这个问题,有个设置密码功能,并且我发现启动后,输入密码连以往的登录或者进入进入的按钮都没有省去了,只要密码输入完匹配成功就自动进入了,好神奇,什么样做的呢?这个设计,能减少用户输入,同时还有心思的设计是就算在没有输入密码的时候也可以进行收入和支出的记录,只是看不到详细内容,非常好的设计!花了一点时间思考了一下就实现了这个小巧的自动登录功能。
下面把代码贴上来吧,大虾就勿喷了!
LoginActivity.java
package com.challen;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.TextView;
/**
* Activity which displays a login screen to the user, offering registration as
* well.
*/
public class LoginActivity extends Activity {
private EditText mPasswordView;
private TextView mLoginStatusMessageView;
private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mLoginStatusMessageView = (TextView)findViewById(R.id.sign_in_button);
mPasswordView = (EditText) findViewById(R.id.password);
mPasswordView.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(mPasswordView.getText().toString().equals("123456")){
intent = new Intent(LoginActivity.this,secondActivity.class);
startActivity(intent);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
@Override
protected void onResume() {
// 由于我知道你会点击返回键反复试验,所以加了这句话
mPasswordView.setText("");
super.onResume();
}
}
跳转过去的second.activity各位就随便弄一个吧!不过需要记住的就是新增了activity后记着要在AndroidManifest.xml中添加这个activity
mian.xml
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".LoginActivity" >
<!-- Login form -->
<LinearLayout
android:orientation="vertical" >
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="输入密码"
android:maxLines="1"
android:singleLine="true" />
<TextView
android:id="@+id/sign_in_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:layout_marginTop="16dp"
android:paddingLeft="32dp"
android:paddingRight="32dp"
android:text="密码匹配成功则自动登录" />
</LinearLayout>
</merge>
其实最关键的就是知道edittext的一些监听的函数了,例如还有一些自动补全特别是用于账号输入的时候,这里主要就是用到了监听edittext的变化用到了addTextChangedListener,并且配合TextWatcher()就能实现在输入的过程中进行一些操作了,把登录跳转的方法写在了onTextChanged里。
好了,我这里预设的密码就是123456设置死了的,大家可以试一试啦!
延伸问题:
1.这款记账软件设置的密码就是保存在本地的,那么如何保存,读取这个设置的密码呢?(这个其实就设计到了本地数据的存储,方法也多种多样,后面有时间我们接着讨论这个)
希望和大家多多交流,我也是android新兵,希望我们在这条路上坚持走下去,哪怕是一个小小的功能,只要能方便用户,就会为我们增加更多的使用者和用户。大家加油,积少成多,集腋成裘!
由于这两天在做listView的东西,所以整理出来一些比较特别(不常用)的属性,通过设置这样的属性可以做出更加美观的列表
1.stackFromBottom属性,这只该属性之后你做好的列表就会显示你列表的最下面,值为true和false
android:stackFromBottom="true"
2. transciptMode属性,需要用ListView或者其它显示大量Items的控件实时跟踪或者查看信息,并且希望最新的条目可以自动滚动到可视范围内。通过设置的控件transcriptMode属性可以将Android平台的控件(支持ScrollBar)自动滑动到最底部。
android:transcriptMode="alwaysScroll"
3.cacheColorHint属性,很多人希望能够改变一下它的背景,使他能够符合整体的UI设计,改变背景背很简单只需要准备一张图片然后指定属性 android:background="@drawable/bg",不过不要高兴地太早,当你这么做以后,发现背景是变了,但是当你拖动,或者点击list空白位置的时候发现ListItem都变成黑色的了,破坏了整体效果。
如果你只是换背景的颜色的话,可以直接指定android:cacheColorHint为你所要的颜色,如果你是用图片做背景的话,那也只要将android:cacheColorHint指定为透明(#00000000)就可以了
4.divider属性,该属性作用是每一项之间需要设置一个图片做为间隔,或是去掉item之间的分割线
android:divider="@drawable/list_driver" 其中 @drawable/list_driver 是一个图片资源,如果不想显示分割线则只要设置为android:divider="@null" 就可以了
5.fadingEdge属性,上边和下边有黑色的阴影
android:fadingEdge="none" 设置后没有阴影了~
6.scrollbars属性,作用是隐藏listView的滚动条,
android:scrollbars="none"与setVerticalScrollBarEnabled(true);的效果是一样的,不活动的时候隐藏,活动的时候也隐藏
7.fadeScrollbars属性,android:fadeScrollbars="true" 配置ListView布局的时候,设置这个属性为true就可以实现滚动条的自动隐藏和显示。
条形码扫描的功能终于实现了,写此笔记以供自己复习之用,也能够帮助一些向我一样刚开始做IOS,刚开始熟悉二维码扫描功能的学习。做出来了,回头一看,其实很容易。非常感谢Oran的指点,是他让我能够快速的学会zbarsdk的使用方法。同时也教会了我怎么学习新知识的方法。
条形码、二维码扫描 sdk 已经封装好了实现的功能,我们要做的只是简单的几句代码就OK。
首先说一下原理,只有懂了原理才会很快的知道该去怎么做。
扫描原理:扫描的第一步是通过摄像头 获取图片,结果是得到一张图片,然后通过zbar的内部处理方法 来识别这张图片,并返回信息。就是这么简单。
在代码之前需要先引入几个类:
以下是详细代码:
ViewController.h
#import <UIKit/UIKit.h>
#import "ZBarSDK.h"
@interface ViewController : UIViewController<ZBarReaderViewDelegate>
@property (nonatomic, retain) IBOutlet ZBarReaderView *readerView;
@end
ViewController.m
#import "ViewController.h"
@implementation ViewController
@synthesize readerView;
- (void)viewDidLoad
{
[super viewDidLoad];
[ZBarReaderView class];
readerView.readerDelegate = self;
if(TARGET_IPHONE_SIMULATOR){
ZBarCameraSimulator *cameraSim = [[ZBarCameraSimulator alloc]initWithViewController:self];
cameraSim.readerView = readerView;
}
}
-(void)readerView:(ZBarReaderView *)readerView didReadSymbols:(ZBarSymbolSet *)symbols fromImage:(UIImage *)image{
for(ZBarSymbol *sym in symbols) {
NSLog(@"%@",sym.data);
break;
}
}
-(void)viewDidAppear:(BOOL)animated{
[readerView start];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
在xib里面增加一个view,class 里面填写 ZBarReaderView。
然后将 readView 和 File's Owner链接即可。
本笔记demo下载
另外一个demo下载(与本demo有不同之处)