1.个人中心页面

2.资料编辑页面
3.新增自定义Dialog(仿ios)
This commit is contained in:
BA7LZD 2020-05-27 04:51:30 +08:00
parent 1b2b167896
commit e9c2027801
36 changed files with 1053 additions and 28 deletions

View File

@ -15,12 +15,13 @@
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:maxAspectRatio="2.4"
android:usesCleartextTraffic="true"
android:resizeableActivity="true"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true"
tools:ignore="UnusedAttribute"
tools:replace="android:allowBackup">
<activity android:name=".ui.info.InfoEditActivity"></activity>
<meta-data
android:name="android.max_aspect"

View File

@ -3,4 +3,7 @@ package com.yuxihan.sdu.comm;
public class Const {
public static final String LOGIN_STATE = "LoginState";
public static final String LOGIN_TOKEN = "LoginToken";
public static final String LOGIN_USER_NAME = "LoginUserName";
public static final String LOGIN_NICKNAME = "LoginNickname";
public static final String LOGIN_HEAD_URL = "LoginHeadUrl";
}

View File

@ -0,0 +1,57 @@
package com.yuxihan.sdu.comm.util;
import com.blankj.utilcode.util.SPUtils;
import com.yuxihan.sdu.comm.Const;
/**
* 账号管理相关类
*/
public class AccountUtils {
/**
* 保存登陆状态
*/
public static void saveLoginState(String userName, String token, String nickName,
String headUrl) {
SPUtils.getInstance().put(Const.LOGIN_STATE, true);
SPUtils.getInstance().put(Const.LOGIN_TOKEN, token);
SPUtils.getInstance().put(Const.LOGIN_USER_NAME, userName);
SPUtils.getInstance().put(Const.LOGIN_NICKNAME, nickName);
SPUtils.getInstance().put(Const.LOGIN_HEAD_URL, headUrl);
}
/**
* 清除登陆状态
*/
public static void clearLoginState() {
SPUtils.getInstance().put(Const.LOGIN_STATE, false);
SPUtils.getInstance().put(Const.LOGIN_TOKEN, "");
SPUtils.getInstance().put(Const.LOGIN_USER_NAME, "");
SPUtils.getInstance().put(Const.LOGIN_NICKNAME, "");
}
public static String getCurUserName() {
String ret = SPUtils.getInstance().getString(Const.LOGIN_USER_NAME);
return DataUtil.isEmpty(ret) ? "" : ret;
}
public static String getCurNickname() {
String ret = SPUtils.getInstance().getString(Const.LOGIN_NICKNAME);
return DataUtil.isEmpty(ret) ? "" : ret;
}
public static String getCurHeadUrl() {
String ret = SPUtils.getInstance().getString(Const.LOGIN_HEAD_URL);
return DataUtil.isEmpty(ret) ? "" : ret;
}
public static String getCurToken() {
String ret = SPUtils.getInstance().getString(Const.LOGIN_TOKEN);
return DataUtil.isEmpty(ret) ? "" : ret;
}
public static boolean isLoggedIn() {
return SPUtils.getInstance().getBoolean(Const.LOGIN_STATE);
}
}

View File

@ -7,13 +7,13 @@ public class DataUtil {
* 字符串判空
*/
public static boolean isEmpty(String src) {
return null != src && src.length() > 0;
return null == src || src.length() == 0;
}
/**
* List判空
*/
public static boolean isEmpty(List src) {
return null != src && src.size() > 0;
return null == src || src.size() == 0;
}
}

View File

@ -0,0 +1,483 @@
package com.yuxihan.sdu.comm.widget;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.view.Display;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ScrollView;
import android.widget.TextView;
import com.yuxihan.sdu.R;
import java.util.ArrayList;
import java.util.List;
public class ActionSheetDialog {
/**
* ActionSheetDialog Type
*/
public static final int DEFAULT_MODE_TYPE = 1;
public static final int MULT_SELECT_MODE_TYPE = 2;
public static final int SINGLE_SELECT_MODE_TYPE = 3;
private Context context;
private Dialog dialog;
private TextView txt_title;
private TextView txt_cancel;
private LinearLayout lLayout_content;
private ScrollView sLayout_content;
private boolean showTitle = false;
private List<SheetItem> sheetItemList;
private Display display;
private int ModeType;
public ActionSheetDialog(Context context) {
this.context = context;
WindowManager windowManager = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
display = windowManager.getDefaultDisplay();
}
public ActionSheetDialog builder() {
View view = LayoutInflater.from(context).inflate(
R.layout.view_actionsheet, null);
view.setMinimumWidth(display.getWidth());
sLayout_content = (ScrollView) view.findViewById(R.id.sLayout_content);
lLayout_content = (LinearLayout) view
.findViewById(R.id.lLayout_content);
txt_title = (TextView) view.findViewById(R.id.txt_title);
txt_cancel = (TextView) view.findViewById(R.id.txt_cancel);
txt_cancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog = new Dialog(context, R.style.ActionSheetDialogStyle);
dialog.setContentView(view);
Window dialogWindow = dialog.getWindow();
dialogWindow.setGravity(Gravity.LEFT | Gravity.BOTTOM);
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
lp.x = 0;
lp.y = 0;
dialogWindow.setAttributes(lp);
return this;
}
public ActionSheetDialog setTitle(String title) {
showTitle = true;
txt_title.setVisibility(View.VISIBLE);
txt_title.setText(title);
return this;
}
public ActionSheetDialog setCancelable(boolean cancel) {
dialog.setCancelable(cancel);
return this;
}
public ActionSheetDialog setCanceledOnTouchOutside(boolean cancel) {
dialog.setCanceledOnTouchOutside(cancel);
return this;
}
/**
* @param strItem
* @param color
* @param listener
* @return
*/
public ActionSheetDialog addSheetItem(String strItem, SheetItemColor color,
OnSheetItemClickListener listener) {
if (sheetItemList == null) {
sheetItemList = new ArrayList<SheetItem>();
}
this.ModeType = DEFAULT_MODE_TYPE;
sheetItemList.add(new SheetItem(strItem, color, listener));
return this;
}
public ActionSheetDialog addSheetItem(String strItem, SheetItemColor color,
OnSheetFirstIconClickListener firstListener,
OnSheetSecondIconClickListener secondListener,
int modeType) {
if (sheetItemList == null) {
sheetItemList = new ArrayList<SheetItem>();
}
this.ModeType = modeType;
sheetItemList.add(new SheetItem(strItem, color, firstListener,
secondListener));
return this;
}
public ActionSheetDialog addSheetItem(String strItem, SheetItemColor color,
OnSheetItemClickListener listener, int modeType,
int drawableId) {
if (sheetItemList == null) {
sheetItemList = new ArrayList<SheetItem>();
}
this.ModeType = modeType;
sheetItemList.add(new SheetItem(strItem, color, listener, drawableId));
return this;
}
private void setSheetItemsSingleMode() {
if (sheetItemList == null || sheetItemList.size() <= 0) {
return;
}
int size = sheetItemList.size();
if (size >= 7) {
LayoutParams params = (LayoutParams) sLayout_content
.getLayoutParams();
params.height = display.getHeight() / 2;
sLayout_content.setLayoutParams(params);
}
for (int i = 1; i <= size; i++) {
final int index = i;
SheetItem sheetItem = sheetItemList.get(i - 1);
final String strItem = sheetItem.name;
SheetItemColor color = sheetItem.color;
int drawableId = sheetItem.drawableId;
final OnSheetItemClickListener listener =
(OnSheetItemClickListener) sheetItem.itemClickListener;
LinearLayout itemView = (LinearLayout) LayoutInflater.from(context)
.inflate(R.layout.item_cardphone, null);
((TextView) itemView.findViewById(R.id.txtPhoneNumber))
.setText(strItem);
itemView.setGravity(Gravity.CENTER);
itemView.findViewById(R.id.imgCallMessage).setVisibility(View.GONE);
itemView.findViewById(R.id.imgCallPhone).setBackgroundResource(
drawableId);
if (size == 1) {
if (showTitle) {
itemView.setBackgroundResource(R.drawable.actionsheet_bottom_selector);
} else {
itemView.setBackgroundResource(R.drawable.actionsheet_single_selector);
}
} else {
if (showTitle) {
if (i >= 1 && i < size) {
itemView.setBackgroundResource(R.drawable.actionsheet_middle_selector);
} else {
itemView.setBackgroundResource(R.drawable.actionsheet_bottom_selector);
}
} else {
if (i == 1) {
itemView.setBackgroundResource(R.drawable.actionsheet_top_selector);
} else if (i < size) {
itemView.setBackgroundResource(R.drawable.actionsheet_middle_selector);
} else {
itemView.setBackgroundResource(R.drawable.actionsheet_bottom_selector);
}
}
}
if (color == null) {
((TextView) itemView.findViewById(R.id.txtPhoneNumber))
.setTextColor(Color.parseColor(SheetItemColor.Blue
.getName()));
} else {
((TextView) itemView.findViewById(R.id.txtPhoneNumber))
.setTextColor(Color.parseColor(color.getName()));
}
// float scale = context.getResources().getDisplayMetrics().density;
// int height = (int) (45 * scale + 0.5f);
// itemView.setLayoutParams(new LinearLayout.LayoutParams(
// LayoutParams.MATCH_PARENT, height));
itemView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
listener.onClick(index);
dialog.dismiss();
}
});
lLayout_content.addView(itemView);
}
}
private void setSheetItemsMultMode() {
if (sheetItemList == null || sheetItemList.size() <= 0) {
return;
}
int size = sheetItemList.size();
if (size >= 7) {
LayoutParams params = (LayoutParams) sLayout_content
.getLayoutParams();
params.height = display.getHeight() / 2;
sLayout_content.setLayoutParams(params);
}
for (int i = 1; i <= size; i++) {
final int index = i;
SheetItem sheetItem = sheetItemList.get(i - 1);
final String strItem = sheetItem.name;
SheetItemColor color = sheetItem.color;
final OnSheetFirstIconClickListener listener1 =
(OnSheetFirstIconClickListener) sheetItem.itemFirstClickListener;
final OnSheetSecondIconClickListener listener2 =
(OnSheetSecondIconClickListener) sheetItem.itemSecondClickListener;
LinearLayout itemView = (LinearLayout) LayoutInflater.from(context)
.inflate(R.layout.item_cardphone, null);
((TextView) itemView.findViewById(R.id.txtPhoneNumber))
.setText(strItem);
itemView.setGravity(Gravity.CENTER);
if (listener1 != null) {
itemView.findViewById(R.id.imgCallMessage).setVisibility(
View.VISIBLE);
} else {
itemView.findViewById(R.id.imgCallMessage).setVisibility(
View.GONE);
}
if (size == 1) {
if (showTitle) {
itemView.setBackgroundResource(R.drawable.actionsheet_bottom_selector);
} else {
itemView.setBackgroundResource(R.drawable.actionsheet_single_selector);
}
} else {
if (showTitle) {
if (i >= 1 && i < size) {
itemView.setBackgroundResource(R.drawable.actionsheet_middle_selector);
} else {
itemView.setBackgroundResource(R.drawable.actionsheet_bottom_selector);
}
} else {
if (i == 1) {
itemView.setBackgroundResource(R.drawable.actionsheet_top_selector);
} else if (i < size) {
itemView.setBackgroundResource(R.drawable.actionsheet_middle_selector);
} else {
itemView.setBackgroundResource(R.drawable.actionsheet_bottom_selector);
}
}
}
// float scale = context.getResources().getDisplayMetrics().density;
// int height = (int) (45 * scale + 0.5f);
// itemView.setLayoutParams(new LinearLayout.LayoutParams(
// LayoutParams.MATCH_PARENT, height));
((ImageView) itemView.findViewById(R.id.imgCallPhone))
.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (listener2 != null) {
listener2.onClick(strItem);
dialog.dismiss();
}
}
});
((ImageView) itemView.findViewById(R.id.imgCallMessage))
.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (listener1 != null) {
listener1.onClick(strItem);
dialog.dismiss();
}
}
});
lLayout_content.addView(itemView);
}
}
private void setSheetItems() {
if (sheetItemList == null || sheetItemList.size() <= 0) {
return;
}
int size = sheetItemList.size();
if (size >= 7) {
LayoutParams params = (LayoutParams) sLayout_content
.getLayoutParams();
params.height = display.getHeight() / 2;
sLayout_content.setLayoutParams(params);
}
for (int i = 1; i <= size; i++) {
final int index = i;
SheetItem sheetItem = sheetItemList.get(i - 1);
String strItem = sheetItem.name;
SheetItemColor color = sheetItem.color;
final OnSheetItemClickListener listener =
(OnSheetItemClickListener) sheetItem.itemClickListener;
TextView textView = new TextView(context);
textView.setText(strItem);
textView.setTextSize(18);
textView.setGravity(Gravity.CENTER);
if (size == 1) {
if (showTitle) {
textView.setBackgroundResource(R.drawable.actionsheet_bottom_selector);
} else {
textView.setBackgroundResource(R.drawable.actionsheet_single_selector);
}
} else {
if (showTitle) {
if (i >= 1 && i < size) {
textView.setBackgroundResource(R.drawable.actionsheet_middle_selector);
} else {
textView.setBackgroundResource(R.drawable.actionsheet_bottom_selector);
}
} else {
if (i == 1) {
textView.setBackgroundResource(R.drawable.actionsheet_top_selector);
} else if (i < size) {
textView.setBackgroundResource(R.drawable.actionsheet_middle_selector);
} else {
textView.setBackgroundResource(R.drawable.actionsheet_bottom_selector);
}
}
}
if (color == null) {
textView.setTextColor(Color.parseColor(SheetItemColor.Blue
.getName()));
} else {
textView.setTextColor(Color.parseColor(color.getName()));
}
float scale = context.getResources().getDisplayMetrics().density;
int height = (int) (45 * scale + 0.5f);
textView.setLayoutParams(new LayoutParams(
LayoutParams.MATCH_PARENT, height));
textView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
listener.onClick(index);
dialog.dismiss();
}
});
lLayout_content.addView(textView);
}
}
public void show() {
switch (ModeType) {
case DEFAULT_MODE_TYPE:
setSheetItems();
break;
case MULT_SELECT_MODE_TYPE:
setSheetItemsMultMode();
break;
case SINGLE_SELECT_MODE_TYPE:
setSheetItemsSingleMode();
break;
default:
break;
}
dialog.show();
}
public interface OnSheetItemClickListener {
void onClick(int which);
}
public interface OnSheetFirstIconClickListener {
void onClick(String value);
}
public interface OnSheetSecondIconClickListener {
void onClick(String value);
}
public class SheetItem {
String name;
OnSheetItemClickListener itemClickListener;
OnSheetFirstIconClickListener itemFirstClickListener;
OnSheetSecondIconClickListener itemSecondClickListener;
SheetItemColor color;
int drawableId;
public SheetItem(String name, SheetItemColor color,
OnSheetItemClickListener itemClickListener) {
this.name = name;
this.color = color;
this.itemClickListener = itemClickListener;
}
public SheetItem(String name, SheetItemColor color,
OnSheetItemClickListener itemClickListener, int drawableId) {
this.name = name;
this.color = color;
this.drawableId = drawableId;
this.itemClickListener = itemClickListener;
}
public SheetItem(String name, SheetItemColor color,
OnSheetFirstIconClickListener itemFirstClickListener,
OnSheetSecondIconClickListener itemSecondClickListener) {
this.name = name;
this.color = color;
this.itemFirstClickListener = itemFirstClickListener;
this.itemSecondClickListener = itemSecondClickListener;
}
}
public enum SheetItemColor {
Blue("#037BFF"), Red("#FD4A2E");
private String name;
private SheetItemColor(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}

View File

@ -13,13 +13,17 @@ import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import com.blankj.utilcode.util.SPUtils;
import com.bumptech.glide.Glide;
import com.yuxihan.sdu.R;
import com.yuxihan.sdu.comm.BaseFragment;
import com.yuxihan.sdu.comm.Const;
import com.yuxihan.sdu.comm.util.AccountUtils;
import com.yuxihan.sdu.comm.util.DataUtil;
import com.yuxihan.sdu.ui.info.InfoEditActivity;
import com.yuxihan.sdu.ui.login.LoginActivity;
public class AccountFragment extends BaseFragment {
import de.hdodenhof.circleimageview.CircleImageView;
public class AccountFragment extends BaseFragment implements View.OnClickListener {
private AccountViewModel accountViewModel;
@ -28,7 +32,22 @@ public class AccountFragment extends BaseFragment {
accountViewModel =
new ViewModelProvider(this).get(AccountViewModel.class);
View root = inflater.inflate(R.layout.fragment_account, container, false);
initView(root);
return root;
}
private void initView(View root) {
final TextView textView = root.findViewById(R.id.text_notifications);
root.findViewById(R.id.text_sign_out).setOnClickListener(this);
root.findViewById(R.id.rl_personal_info).setOnClickListener(this);
TextView tvNickName = root.findViewById(R.id.tv_nick_name);
tvNickName.setText(AccountUtils.getCurNickname());
TextView tvUserName = root.findViewById(R.id.tv_user_name);
tvUserName.setText(getString(R.string.account_show, AccountUtils.getCurUserName()));
CircleImageView civHead = root.findViewById(R.id.civ_head);
if (!DataUtil.isEmpty(AccountUtils.getCurHeadUrl())) {
Glide.with(this).load(AccountUtils.getCurHeadUrl()).into(civHead);
}
accountViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
@ -36,19 +55,25 @@ public class AccountFragment extends BaseFragment {
}
});
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SPUtils.getInstance().put(Const.LOGIN_STATE, false);
SPUtils.getInstance().put(Const.LOGIN_TOKEN, "");
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.text_sign_out:
AccountUtils.clearLoginState();
startActivity(new Intent(getContext(), LoginActivity.class));
Activity activity = getActivity();
if (null != activity) {
activity.finish();
}
}
});
return root;
break;
case R.id.rl_personal_info:
//打开资料编辑页面
startActivity(new Intent(getContext(), InfoEditActivity.class));
break;
default:
break;
}
}
}

View File

@ -10,7 +10,7 @@ public class AccountViewModel extends ViewModel {
public AccountViewModel() {
mText = new MutableLiveData<>();
mText.setValue("注销");
mText.setValue("This is notifications fragment");
}
public LiveData<String> getText() {

View File

@ -0,0 +1,17 @@
package com.yuxihan.sdu.ui.info;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import com.yuxihan.sdu.R;
import com.yuxihan.sdu.comm.BaseActivity;
public class InfoEditActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_info_edit);
}
}

View File

@ -6,8 +6,8 @@ import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
import com.blankj.utilcode.util.SPUtils;
import com.yuxihan.sdu.comm.SDUApp;
import com.yuxihan.sdu.comm.util.AccountUtils;
import com.yuxihan.sdu.comm.util.FormatUtils;
import com.yuxihan.sdu.data.UpdateService;
import com.yuxihan.sdu.data.model.DataBean;
@ -46,11 +46,10 @@ public class LoginViewModel extends ViewModel {
public void onResponse(Call<DataBean> call, Response<DataBean> response) {
//请求成功返回是一个封装为DataBean的响应
Log.e("TAG", "接口返回内容 ===== " + response.body().getResult());
if ("0" .equals(response.body().getErrCode())) {
if ("0".equals(response.body().getErrCode())) {
String token = response.body().getResult().getToken();
loggedInUser.setValue(new LoggedInUser(username, username));
SPUtils.getInstance().put("LoginState", true);
SPUtils.getInstance().put("LoginToken", response.body().getResult().getToken());
AccountUtils.saveLoginState(username, token, "雨曦大魔王", null);
} else {
loggedInUser.setValue(new LoggedInUser(username, "用户名/密码 错误!", false));
}

View File

@ -3,11 +3,10 @@ package com.yuxihan.sdu.ui.splash;
import android.content.Intent;
import android.os.Bundle;
import com.blankj.utilcode.util.SPUtils;
import com.yuxihan.sdu.MainActivity;
import com.yuxihan.sdu.R;
import com.yuxihan.sdu.comm.BaseActivity;
import com.yuxihan.sdu.comm.Const;
import com.yuxihan.sdu.comm.util.AccountUtils;
import com.yuxihan.sdu.ui.login.LoginActivity;
public class InitializeActivity extends BaseActivity {
@ -16,7 +15,7 @@ public class InitializeActivity extends BaseActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_initialize);
if (SPUtils.getInstance().getBoolean(Const.LOGIN_STATE)) {
if (AccountUtils.isLoggedIn()) {
startActivity(new Intent(this, MainActivity.class));
} else {
startActivity(new Intent(this, LoginActivity.class));

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="200"
android:fromYDelta="100%"
android:toYDelta="0" />

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="200"
android:fromYDelta="0"
android:toYDelta="100%" />

Binary file not shown.

After

Width:  |  Height:  |  Size: 563 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 366 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 272 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 B

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/actionsheet_bottom_pressed" android:state_pressed="true"/>
<item android:drawable="@drawable/actionsheet_bottom_normal"/>
</selector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 B

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/actionsheet_middle_pressed" android:state_pressed="true"/>
<item android:drawable="@drawable/actionsheet_middle_normal"/>
</selector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 318 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 321 B

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/actionsheet_single_pressed" android:state_pressed="true"/>
<item android:drawable="@drawable/actionsheet_single_normal"/>
</selector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 276 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 B

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/actionsheet_top_pressed" android:state_pressed="true"/>
<item android:drawable="@drawable/actionsheet_top_normal"/>
</selector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="200dp"
android:height="200dp"
android:viewportWidth="1024"
android:viewportHeight="1024">
<path
android:fillColor="#FF888888"
android:pathData="M364.47,511.68l378.21,378.21c15.9,15.88 15.9,41.67 0,57.55 -15.88,15.9 -41.67,15.9 -57.55,0l-406.99,-406.99c-15.9,-15.88 -15.9,-41.67 0,-57.55l406.99,-406.99c7.94,-7.95 18.36,-11.92 28.77,-11.92s20.83,3.98 28.77,11.92c15.9,15.88 15.9,41.67 0,57.55l-378.21,378.21z"/>
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="200dp"
android:height="200dp"
android:viewportWidth="1024"
android:viewportHeight="1024">
<path
android:fillColor="#FF888888"
android:pathData="M273.88,9.48 L775.43,502.52 273.88,995.56 219.47,942.08 666.62,502.52 219.47,62.96 273.88,9.48Z"/>
</vector>

View File

@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="200dp"
android:height="200dp"
android:viewportWidth="1024"
android:viewportHeight="1024">
<path
android:pathData="M514.56,509.44m-506.88,0a506.88,506.88 0,1 0,1013.76 0,506.88 506.88,0 1,0 -1013.76,0Z"
android:fillColor="#BDDBF4"/>
<path
android:pathData="M830,812.8c-15.92,-82.28 -66.56,-153.96 -140.65,-204.39a26.88,26.88 0,0 0,-29.24 45.11c61.08,42.5 103.53,100.86 116.79,169.88a25.86,25.86 0,0 0,26.57 21.25h5.12a27.55,27.55 0,0 0,21.25 -31.85zM753.2,366.9a238.9,238.9 0,1 0,-477.75 0,231.63 231.63,0 0,0 121.86,207 321.18,321.18 0,0 0,-199.07 238.85,26.88 26.88,0 0,0 21.25,32.05h5.12a25.86,25.86 0,0 0,26.52 -21.25,269.52 269.52,0 0,1 260.1,-217.65h5.12a237.36,237.36 0,0 0,236.24 -238.9zM516.97,552.7h-8.14a185.8,185.8 0,1 1,191.08 -185.8c0,100.86 -82.28,183.14 -183.14,185.8zM516.97,552.7"
android:fillColor="#FFFFFF"/>
</vector>

View File

@ -0,0 +1,149 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".ui.info.InfoEditActivity">
<RelativeLayout
android:id="@+id/rl_account_title"
android:layout_width="match_parent"
android:layout_height="75dp"
android:background="@color/white_bg"
android:gravity="center_vertical"
android:paddingTop="25dp"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/iv_back"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_marginStart="12dp"
android:src="@drawable/ic_arrow_left" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="@string/info_edit"
android:textColor="@color/text_black"
android:textSize="20sp" />
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignParentEnd="true"
android:layout_marginEnd="12dp"
android:padding="2dp"
android:src="@drawable/ic_add"
android:visibility="gone" />
</RelativeLayout>
<include layout="@layout/view_divider" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="80dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginStart="15dp"
android:text="@string/head_icon"
android:textColor="@color/black"
android:textSize="16sp" />
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/civ_head"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginEnd="36dp"
android:src="@drawable/ic_head_default" />
<ImageView
android:layout_width="14dp"
android:layout_height="14dp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginEnd="15dp"
android:src="@drawable/ic_arrow_right" />
</RelativeLayout>
<include layout="@layout/view_divider" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="50dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginStart="15dp"
android:text="@string/nick_name"
android:textColor="@color/black"
android:textSize="16sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginStart="15dp"
android:layout_marginEnd="38dp"
android:textColor="@color/gray"
android:textSize="16sp"
tools:text="这里是昵称" />
<ImageView
android:layout_width="14dp"
android:layout_height="14dp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginEnd="15dp"
android:src="@drawable/ic_arrow_right" />
</RelativeLayout>
<include layout="@layout/view_divider" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="50dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginStart="15dp"
android:text="@string/account_id"
android:textColor="@color/black"
android:textSize="16sp" />
<TextView
android:id="@+id/tv_user_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginStart="15dp"
android:layout_marginEnd="38dp"
android:textColor="@color/gray"
android:textSize="16sp"
tools:text="15006391924" />
<ImageView
android:layout_width="14dp"
android:layout_height="14dp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginEnd="15dp"
android:src="@drawable/ic_arrow_right" />
</RelativeLayout>
<include layout="@layout/view_divider" />
</LinearLayout>

View File

@ -1,22 +1,121 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".ui.account.AccountFragment">
<RelativeLayout
android:id="@+id/rl_account_title"
android:layout_width="match_parent"
android:layout_height="75dp"
android:background="@color/white_bg"
android:gravity="center_vertical"
android:paddingTop="25dp"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginStart="12dp"
android:src="@drawable/ic_cam"
android:visibility="gone" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="@string/account_info"
android:textColor="@color/text_black"
android:textSize="20sp" />
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignParentEnd="true"
android:layout_marginEnd="12dp"
android:padding="2dp"
android:src="@drawable/ic_add"
android:visibility="gone" />
</RelativeLayout>
<include layout="@layout/view_divider" />
<RelativeLayout
android:id="@+id/rl_personal_info"
android:layout_width="match_parent"
android:layout_height="125dp"
android:gravity="center_vertical">
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/civ_head"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginStart="20dp"
android:src="@drawable/ic_head_default" />
<TextView
android:id="@+id/tv_nick_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="13dp"
android:layout_toEndOf="@+id/civ_head"
android:maxLines="1"
android:textColor="@color/black"
android:textSize="22sp"
tools:text="雨曦大魔王" />
<TextView
android:layout_width="wrap_content"
android:id="@+id/tv_user_name"
android:layout_height="wrap_content"
android:layout_alignStart="@+id/tv_nick_name"
android:layout_alignBottom="@+id/civ_head"
android:maxLines="1"
android:textColor="@color/text_hint"
android:textSize="14sp"
tools:text="账号:15006391924" />
</RelativeLayout>
<include layout="@layout/view_divider" />
<TextView
android:id="@+id/text_notifications"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="50dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:textAlignment="center"
android:gravity="center"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<include layout="@layout/view_divider" />
<TextView
android:id="@+id/place_holder"
android:layout_width="match_parent"
android:layout_height="250dp" />
<include layout="@layout/view_divider" />
<TextView
android:id="@+id/text_sign_out"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center"
android:paddingStart="20dp"
android:paddingEnd="20dp"
android:text="@string/sign_out"
android:textColor="@color/black"
android:textSize="20sp" />
<include layout="@layout/view_divider" />
</LinearLayout>

View File

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<RelativeLayout android:id="@+id/rl_itemCardPhone"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView android:id="@+id/txtPhoneNumber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:layout_marginLeft="10dp"
android:textColor="@color/black"
android:textSize="14sp"/>
<ImageView android:id="@+id/imgCallPhone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/action_contact"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_marginRight="10dp"/>
<ImageView android:id="@+id/imgCallMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/action_message"
android:layout_centerVertical="true"
android:layout_toLeftOf="@id/imgCallPhone"
android:layout_marginRight="30dp"
android:visibility="gone"/>
</RelativeLayout>
</LinearLayout>

View File

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="8dp" >
<TextView
android:id="@+id/txt_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/actionsheet_top_normal"
android:gravity="center"
android:minHeight="45dp"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:textColor="@color/black"
android:textSize="14sp"
android:visibility="gone" />
<ScrollView
android:id="@+id/sLayout_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fadingEdge="none"
>
<LinearLayout
android:id="@+id/lLayout_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
</LinearLayout>
</ScrollView>
<TextView
android:id="@+id/txt_cancel"
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_marginTop="8dp"
android:background="@drawable/actionsheet_single_selector"
android:gravity="center"
android:text="取消"
android:textColor="@color/black"
android:textSize="18sp" />
</LinearLayout>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<View xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="10dp"
android:background="@color/divider_gray" />

View File

@ -18,4 +18,10 @@
<string name="title_home">Home</string>
<string name="title_dashboard">Dashboard</string>
<string name="title_notifications">Notifications</string>
<string name="sign_out">注销登录</string>
<string name="account_show">账号:%1$s</string>
<string name="info_edit">资料编辑</string>
<string name="head_icon">头像</string>
<string name="nick_name">昵称</string>
<string name="account_id">账号</string>
</resources>

View File

@ -10,11 +10,37 @@
<item name="android:windowBackground">@android:color/white</item>
</style>
<style name="DetailTheme" parent="Theme.AppCompat.Light.NoActionBar"/>
<style name="DetailTheme" parent="Theme.AppCompat.Light.NoActionBar" />
<style name="SplashTheme" parent="AppTheme">
<item name="android:windowBackground">@drawable/splash</item>
<item name="android:windowFullscreen">true</item>
</style>
<!-- ActionSheet进出动画 -->
<style name="ActionSheetDialogAnimation" parent="@android:style/Animation.Dialog">
<item name="android:windowEnterAnimation">@anim/actionsheet_dialog_in</item>
<item name="android:windowExitAnimation">@anim/actionsheet_dialog_out</item>
</style>
<!-- 自定义仿IOS的ActionSheet底部Dialog的样式 ,有模糊效果 -->
<style name="ActionSheetDialogStyle" parent="@android:style/Theme.Dialog">
<!-- 背景透明 -->
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<!-- 浮于Activity之上 -->
<item name="android:windowIsFloating">true</item>
<!-- 边框 -->
<item name="android:windowFrame">@null</item>
<!-- Dialog以外的区域模糊效果 -->
<item name="android:backgroundDimEnabled">true</item>
<!-- 无标题 -->
<item name="android:windowNoTitle">true</item>
<!-- 半透明 -->
<item name="android:windowIsTranslucent">true</item>
<!-- Dialog进入及退出动画 -->
<item name="android:windowAnimationStyle">@style/ActionSheetDialogAnimation</item>
</style>
</resources>