用户登录界面
2016-06-29 11:14
260 查看
13.
1)圆形图像为一个开源控件---CircleImageView
①布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="180dp"
android:background="?attr/colorPrimary" >
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/img_head"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="12dp"
app:civ_border_width="2dp"
app:civ_border_color="#FFFFFF"
android:src="@drawable/default_head">
</de.hdodenhof.circleimageview.CircleImageView>
<TextView
android:id="@+id/txt_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="50dp"
android:layout_marginBottom="9dp"
android:gravity="center"
android:text="点击登录"
android:textColor="@color/white"
android:textSize="16sp" />
</FrameLayout>
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="20dp"
android:orientation="vertical">
<TextView
android:id="@+id/txt_my_orders"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/largePadding"
android:background="@drawable/selector_list_item"
android:drawableLeft="@drawable/icon_list_o"
android:gravity="center_vertical"
android:drawablePadding="20dp"
android:text="我的订单"
android:textColor="@color/black"/>
<View style="@style/line_vertical"/>
<TextView
android:id="@+id/txt_my_favorite"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/largePadding"
android:background="@drawable/selector_list_item"
android:drawableLeft="@drawable/icon_favorite"
android:gravity="center_vertical"
android:drawablePadding="20dp"
android:text="我的收藏"
android:textColor="@color/black"/>
<View style="@style/line_vertical"/>
<TextView
android:id="@+id/txt_my_address"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/largePadding"
android:background="@drawable/selector_list_item"
android:drawableLeft="@drawable/icon_location"
android:gravity="center_vertical"
android:drawablePadding="20dp"
android:text="我的收货地址"
android:textColor="@color/black"/>
<Button
android:id="@+id/btn_logout"
android:text="退出登录"
style="@style/bigRedButton"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
/>
</LinearLayout>
</ScrollView>
</LinearLayout>
②为圆形头像添加点击事件
private void initCircleImage(){
circleImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getContext(), LoginActivity.class);
startActivityForResult(intent, 0);
}
});
}
③实现登陆的布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/bg_color">
<com.example.administrator.shopdemo.widget.CNiaoToolBar
android:id="@id/toolbar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
app:title="登录"
app:navigationIcon="@drawable/icon_back_32px"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginTop="40dp"
android:background="@drawable/selector_view_block"
android:padding="@dimen/largePadding">
<com.example.administrator.shopdemo.widget.ClearEditText
android:id="@+id/etxt_phone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/icon_telphone_32"
android:drawablePadding="20dp"
android:hint="请输入手机号码"
style="@style/editText_base"
android:inputType="phone"
/>
<View style="@style/line_vertical"/>
<com.example.administrator.shopdemo.widget.ClearEditText
android:id="@+id/etxt_pwd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/icon_lock"
android:drawablePadding="20dp"
android:hint="请输入登录密码"
style="@style/editText_base"
android:inputType="textPassword"
/>
</LinearLayout>
<Button
android:id="@+id/btn_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/bigRedButton"
android:text="登 录"
android:onClick="login"
android:layout_marginTop="30dp"
android:layout_margin="20dp"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:padding="@dimen/largePadding"
android:orientation="horizontal"
android:gravity="center_vertical">
<TextView
android:id="@+id/txt_toReg"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="注册账号"
android:layout_weight="1"
android:textColor="@color/blue"
android:textSize="12sp"
android:clickable="true"
android:onClick="register"
/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="忘记密码"
android:layout_weight="1"
android:textColor="@color/blue"
android:textSize="12sp"
android:gravity="right"
android:clickable="true"
android:onClick="register"
/>
</LinearLayout>
</LinearLayout>
④实现登陆的逻辑
public class LoginActivity extends AppCompatActivity {
@ViewInject(R.id.etxt_phone)
private ClearEditText phoneEdit;
@ViewInject(R.id.etxt_pwd)
private ClearEditText passwordEdit;
@ViewInject(R.id.btn_login)
private Button loginButton;
@ViewInject(R.id.toolbar)
private CNiaoToolBar mToolBar;
private OkHttpHelper okHttpHelper = OkHttpHelper.getInstance();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
ViewUtils.inject(this);
initToolBar();
}
private void initToolBar(){
mToolBar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LoginActivity.this.finish();
}
});
}
@Override
public void onBackPressed() {
super.onBackPressed();
finish();
}
@OnClick(R.id.btn_login)
public void login(View view){
String phone = phoneEdit.getText().toString().trim();
if(TextUtils.isEmpty(phone)){
ToastUtils.show(this, "请输入手机号码");
return;
}
String pwd = passwordEdit.getText().toString().trim();
if(TextUtils.isEmpty(pwd)){
ToastUtils.show(this,"请输入密码");
return;
}
Map<String,String> params = new HashMap<>(2);
params.put("phone",phone);
params.put("password", DESUtil.encode(Contants.DES_KEY,pwd));
okHttpHelper.post(Contants.API.LOGIN, params, new SpotsCallBack<LoginRespMsg<User>>(this) {
@Override
public void onSuccess(Response response, LoginRespMsg<User> userLoginRespMsg) {
ShoppingApplication application = ShoppingApplication.getInstance();
application.putUser(userLoginRespMsg.getData(), userLoginRespMsg.getToken());
if(application.getIntent() == null){
setResult(RESULT_OK);
finish();
}else{
application.jumpToTargetActivity(LoginActivity.this);
finish();
}
// setResult(0);
// finish();
}
@Override
public void onError(Response response, int code, Exception e) {
}
});
}
@OnClick(R.id.txt_toReg)
public void register(View view){
Intent intent = new Intent(LoginActivity.this, RegActivity.class);
startActivity(intent);
}
}
⑤登陆成功后,跳转回页面进行处理
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode){
case 0:
ToastUtils.show(getContext(), "登陆成功");
User user = ShoppingApplication.getInstance().getUser();
ToastUtils.show(getContext(), (user == null) + "2");
showUser();
}
}
⑥将布局转换,加载用户头像
private void showUser(){
User user = ShoppingApplication.getInstance().getUser();
ToastUtils.show(getContext(), (user == null) + "");
if(user ==null){
mbtnLogout.setVisibility(View.GONE);
mTxtUserName.setText("点击登录");
}
else{
mbtnLogout.setVisibility(View.VISIBLE);
if(!TextUtils.isEmpty(user.getLogo_url()))
Picasso.with(getActivity()).load(Uri.parse(user.getLogo_url())).into(circleImageView);
mTxtUserName.setText(user.getUsername());
}
}
⑦为几个选项添加点击事件,实现其逻辑
@OnClick(R.id.txt_my_orders)
public void toMyOrderActivity(View view){
startActivity(new Intent(getActivity(), MyOrderActivity.class));
}
⑧
存储User:
ShoppingApplication application = ShoppingApplication.getInstance();
application.putUser(userLoginRespMsg.getData(), userLoginRespMsg.getToken());
获取User:
User user = ShoppingApplication.getInstance().getUser();
⑨在ShoppingApplication中有
public User getUser(){
return user;
}
public void putUser(User user, String token){
this.user = user;
UserLocalData.putUser(this,user);
UserLocalData.putToken(this,token);
}
实际上是存储在SharedPreferences中:
public class UserLocalData {
public static void putUser(Context context,User user){
String user_json = JSONUtil.toJSON(user);
PreferencesUtils.putString(context, Contants.USER_JSON,user_json);
}
public static void putToken(Context context,String token){
PreferencesUtils.putString(context, Contants.TOKEN,token);
}
public static User getUser(Context context){
String user_json= PreferencesUtils.getString(context,Contants.USER_JSON);
if(!TextUtils.isEmpty(user_json)){
return JSONUtil.fromJson(user_json,User.class);
}
return null;
}
public static String getToken(Context context){
return PreferencesUtils.getString( context,Contants.TOKEN);
}
public static void clearUser(Context context){
PreferencesUtils.putString(context, Contants.USER_JSON,"");
}
public static void clearToken(Context context){
PreferencesUtils.putString(context, Contants.TOKEN,"");
}
}
1)圆形图像为一个开源控件---CircleImageView
①布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="180dp"
android:background="?attr/colorPrimary" >
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/img_head"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="12dp"
app:civ_border_width="2dp"
app:civ_border_color="#FFFFFF"
android:src="@drawable/default_head">
</de.hdodenhof.circleimageview.CircleImageView>
<TextView
android:id="@+id/txt_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="50dp"
android:layout_marginBottom="9dp"
android:gravity="center"
android:text="点击登录"
android:textColor="@color/white"
android:textSize="16sp" />
</FrameLayout>
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="20dp"
android:orientation="vertical">
<TextView
android:id="@+id/txt_my_orders"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/largePadding"
android:background="@drawable/selector_list_item"
android:drawableLeft="@drawable/icon_list_o"
android:gravity="center_vertical"
android:drawablePadding="20dp"
android:text="我的订单"
android:textColor="@color/black"/>
<View style="@style/line_vertical"/>
<TextView
android:id="@+id/txt_my_favorite"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/largePadding"
android:background="@drawable/selector_list_item"
android:drawableLeft="@drawable/icon_favorite"
android:gravity="center_vertical"
android:drawablePadding="20dp"
android:text="我的收藏"
android:textColor="@color/black"/>
<View style="@style/line_vertical"/>
<TextView
android:id="@+id/txt_my_address"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/largePadding"
android:background="@drawable/selector_list_item"
android:drawableLeft="@drawable/icon_location"
android:gravity="center_vertical"
android:drawablePadding="20dp"
android:text="我的收货地址"
android:textColor="@color/black"/>
<Button
android:id="@+id/btn_logout"
android:text="退出登录"
style="@style/bigRedButton"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
/>
</LinearLayout>
</ScrollView>
</LinearLayout>
②为圆形头像添加点击事件
private void initCircleImage(){
circleImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getContext(), LoginActivity.class);
startActivityForResult(intent, 0);
}
});
}
③实现登陆的布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/bg_color">
<com.example.administrator.shopdemo.widget.CNiaoToolBar
android:id="@id/toolbar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
app:title="登录"
app:navigationIcon="@drawable/icon_back_32px"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginTop="40dp"
android:background="@drawable/selector_view_block"
android:padding="@dimen/largePadding">
<com.example.administrator.shopdemo.widget.ClearEditText
android:id="@+id/etxt_phone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/icon_telphone_32"
android:drawablePadding="20dp"
android:hint="请输入手机号码"
style="@style/editText_base"
android:inputType="phone"
/>
<View style="@style/line_vertical"/>
<com.example.administrator.shopdemo.widget.ClearEditText
android:id="@+id/etxt_pwd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/icon_lock"
android:drawablePadding="20dp"
android:hint="请输入登录密码"
style="@style/editText_base"
android:inputType="textPassword"
/>
</LinearLayout>
<Button
android:id="@+id/btn_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/bigRedButton"
android:text="登 录"
android:onClick="login"
android:layout_marginTop="30dp"
android:layout_margin="20dp"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:padding="@dimen/largePadding"
android:orientation="horizontal"
android:gravity="center_vertical">
<TextView
android:id="@+id/txt_toReg"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="注册账号"
android:layout_weight="1"
android:textColor="@color/blue"
android:textSize="12sp"
android:clickable="true"
android:onClick="register"
/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="忘记密码"
android:layout_weight="1"
android:textColor="@color/blue"
android:textSize="12sp"
android:gravity="right"
android:clickable="true"
android:onClick="register"
/>
</LinearLayout>
</LinearLayout>
④实现登陆的逻辑
public class LoginActivity extends AppCompatActivity {
@ViewInject(R.id.etxt_phone)
private ClearEditText phoneEdit;
@ViewInject(R.id.etxt_pwd)
private ClearEditText passwordEdit;
@ViewInject(R.id.btn_login)
private Button loginButton;
@ViewInject(R.id.toolbar)
private CNiaoToolBar mToolBar;
private OkHttpHelper okHttpHelper = OkHttpHelper.getInstance();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
ViewUtils.inject(this);
initToolBar();
}
private void initToolBar(){
mToolBar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LoginActivity.this.finish();
}
});
}
@Override
public void onBackPressed() {
super.onBackPressed();
finish();
}
@OnClick(R.id.btn_login)
public void login(View view){
String phone = phoneEdit.getText().toString().trim();
if(TextUtils.isEmpty(phone)){
ToastUtils.show(this, "请输入手机号码");
return;
}
String pwd = passwordEdit.getText().toString().trim();
if(TextUtils.isEmpty(pwd)){
ToastUtils.show(this,"请输入密码");
return;
}
Map<String,String> params = new HashMap<>(2);
params.put("phone",phone);
params.put("password", DESUtil.encode(Contants.DES_KEY,pwd));
okHttpHelper.post(Contants.API.LOGIN, params, new SpotsCallBack<LoginRespMsg<User>>(this) {
@Override
public void onSuccess(Response response, LoginRespMsg<User> userLoginRespMsg) {
ShoppingApplication application = ShoppingApplication.getInstance();
application.putUser(userLoginRespMsg.getData(), userLoginRespMsg.getToken());
if(application.getIntent() == null){
setResult(RESULT_OK);
finish();
}else{
application.jumpToTargetActivity(LoginActivity.this);
finish();
}
// setResult(0);
// finish();
}
@Override
public void onError(Response response, int code, Exception e) {
}
});
}
@OnClick(R.id.txt_toReg)
public void register(View view){
Intent intent = new Intent(LoginActivity.this, RegActivity.class);
startActivity(intent);
}
}
⑤登陆成功后,跳转回页面进行处理
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode){
case 0:
ToastUtils.show(getContext(), "登陆成功");
User user = ShoppingApplication.getInstance().getUser();
ToastUtils.show(getContext(), (user == null) + "2");
showUser();
}
}
⑥将布局转换,加载用户头像
private void showUser(){
User user = ShoppingApplication.getInstance().getUser();
ToastUtils.show(getContext(), (user == null) + "");
if(user ==null){
mbtnLogout.setVisibility(View.GONE);
mTxtUserName.setText("点击登录");
}
else{
mbtnLogout.setVisibility(View.VISIBLE);
if(!TextUtils.isEmpty(user.getLogo_url()))
Picasso.with(getActivity()).load(Uri.parse(user.getLogo_url())).into(circleImageView);
mTxtUserName.setText(user.getUsername());
}
}
⑦为几个选项添加点击事件,实现其逻辑
@OnClick(R.id.txt_my_orders)
public void toMyOrderActivity(View view){
startActivity(new Intent(getActivity(), MyOrderActivity.class));
}
⑧
存储User:
ShoppingApplication application = ShoppingApplication.getInstance();
application.putUser(userLoginRespMsg.getData(), userLoginRespMsg.getToken());
获取User:
User user = ShoppingApplication.getInstance().getUser();
⑨在ShoppingApplication中有
public User getUser(){
return user;
}
public void putUser(User user, String token){
this.user = user;
UserLocalData.putUser(this,user);
UserLocalData.putToken(this,token);
}
实际上是存储在SharedPreferences中:
public class UserLocalData {
public static void putUser(Context context,User user){
String user_json = JSONUtil.toJSON(user);
PreferencesUtils.putString(context, Contants.USER_JSON,user_json);
}
public static void putToken(Context context,String token){
PreferencesUtils.putString(context, Contants.TOKEN,token);
}
public static User getUser(Context context){
String user_json= PreferencesUtils.getString(context,Contants.USER_JSON);
if(!TextUtils.isEmpty(user_json)){
return JSONUtil.fromJson(user_json,User.class);
}
return null;
}
public static String getToken(Context context){
return PreferencesUtils.getString( context,Contants.TOKEN);
}
public static void clearUser(Context context){
PreferencesUtils.putString(context, Contants.USER_JSON,"");
}
public static void clearToken(Context context){
PreferencesUtils.putString(context, Contants.TOKEN,"");
}
}
相关文章推荐
- Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
- AMQP close-reason, initiated by Peer, code=406
- Java到底是不是一种纯面向对象语言?
- Spring注解详解
- linux下使用yum安装mysql
- eclipse中代码自动补全的设置
- Android Studio 编译Errors 解决笔记
- colorAccent,colorPrimary,colorPrimaryDark做什么的?
- OC的全局引用和Swift的宏定义
- oracle中的表空间(tablespace)、方案(schema)、段(segment)、区(extent)、块(block)
- Erlang常用代码段
- MyEclipse常用快捷键整理
- cargo自动部署
- eclipse中使用git
- 有关Appstore软件上传更新等问题有用网址汇总
- Maven入门3- Maven依赖机制
- Android native与HTNL5进行交互
- 常用的C语言算法库 libcst
- Go语言学习笔记一——环境搭建
- Java中如何查看一个类依赖的包