Compare commits
5 Commits
main
...
zhanghao_b
| Author | SHA1 | Date |
|---|---|---|
|
|
40ddfe32c9 | 4 months ago |
|
|
3951bec200 | 5 months ago |
|
|
ab23ef6692 | 5 months ago |
|
|
f4b04cd3a8 | 6 months ago |
|
|
0f1eb46965 | 6 months ago |
Binary file not shown.
@ -0,0 +1,23 @@
|
||||
# 个人周工作计划 -第四周
|
||||
|
||||
**姓名:** 张豪
|
||||
**角色:** 安卓app开发工程师
|
||||
**团队:** 菜鸟队
|
||||
**周期:** 2025-10-13 至 2025-10-19
|
||||
|
||||
---
|
||||
| 序号 | 计划内容| 协作人 | 情况说明 |
|
||||
| ----| ------ | ------| ------- |
|
||||
| 1 | 需求获取 | 组员 | 2025-10-09 与边耐政老师面对面沟通确定需求 |
|
||||
| 2 | 学习安卓app知识 | 个人 | 周内持续学习css的浮动与定位的相关知识 |
|
||||
| 3 | 确定分工 | 组员 | 2025-10-12 细分确定团队分工,统一开发工具 |
|
||||
| 4 | 搭建安卓项目基础架构 | 组员 | 周内完成安卓项目初始化:基于 Android Studio 创建 Module |
|
||||
| 5 | 开发 “扫一扫” 核心功能模块 | 组员 | 完成摄像头调用权限申请、扫描框 UI 绘制 |
|
||||
---
|
||||
|
||||
## 小结
|
||||
|
||||
1. **学习需求:** 希望团队能组织安卓端 “动态码生成优化”(如防止截屏、提高识别效率)的技术分享,或提供成熟项目的相关代码参考;
|
||||
2. **知识储备:** 本周将抽时间学习安卓 Jetpack Compose 组件(为后续复杂页面开发做准备),以及移动支付安全相关知识(如数据加密、支付签名校验);
|
||||
3. **文档撰写:**同步整理安卓端核心功能的开发文档(含接口调用流程、关键代码注释),后续上传至代码托管平台供团队参考。
|
||||
|
||||
@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.payment">
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera"
|
||||
android:required="false" />
|
||||
<application
|
||||
android:name=".MyApplication"
|
||||
android:allowBackup="true"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.MobilePaymentApp"
|
||||
android:usesCleartextTraffic="true"> <activity
|
||||
android:name=".ui.MainActivity"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<activity android:name=".user.LoginActivity" />
|
||||
<activity android:name=".user.RegisterActivity" />
|
||||
<activity android:name=".user.RealNameAuthActivity" />
|
||||
<activity android:name=".user.AuditStatusActivity" />
|
||||
<activity android:name=".asset.BalanceActivity" />
|
||||
<activity android:name=".asset.BankCardListActivity" />
|
||||
<activity android:name=".asset.AddBankCardActivity" />
|
||||
<activity android:name=".asset.RechargeWithdrawActivity" />
|
||||
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
@ -0,0 +1,19 @@
|
||||
package com.payment;
|
||||
|
||||
import android.app.Application;
|
||||
import android.content.Context;
|
||||
|
||||
public class MyApplication extends Application {
|
||||
private static Context context;
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
context = getApplicationContext();
|
||||
}
|
||||
|
||||
// 提供全局上下文
|
||||
public static Context getContext() {
|
||||
return context;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,61 @@
|
||||
package com.payment.asset;
|
||||
|
||||
import com.payment.base.BaseActivity;
|
||||
import com.payment.R;
|
||||
import com.payment.utils.ToastUtils;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.EditText;
|
||||
|
||||
public class AddBankCardActivity extends BaseActivity {
|
||||
private EditText etCardNo, etBankName;
|
||||
private Button btnSubmit;
|
||||
private AssetViewModel assetViewModel;
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_add_bank_card;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initView() {
|
||||
etCardNo = findViewById(R.id.et_card_no);
|
||||
etBankName = findViewById(R.id.et_bank_name);
|
||||
btnSubmit = findViewById(R.id.btn_submit);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initData() {
|
||||
assetViewModel = new ViewModelProvider(this).get(AssetViewModel.class);
|
||||
// 观察添加结果
|
||||
assetViewModel.getAddCardResult().observe(this, resultBean -> {
|
||||
if (resultBean != null && resultBean.isSuccess()) {
|
||||
ToastUtils.showToast(this, "银行卡添加成功");
|
||||
finish(); // 返回列表页
|
||||
} else {
|
||||
ToastUtils.showToast(this, "添加失败:" + (resultBean != null ? resultBean.getMsg() : "网络异常"));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void bindEvent() {
|
||||
btnSubmit.setOnClickListener(v -> {
|
||||
String cardNo = etCardNo.getText().toString().trim();
|
||||
String bankName = etBankName.getText().toString().trim();
|
||||
|
||||
if (cardNo.isEmpty() || bankName.isEmpty()) {
|
||||
showToast("请完善银行卡信息");
|
||||
return;
|
||||
}
|
||||
if (cardNo.length() < 16 || cardNo.length() > 19) {
|
||||
showToast("请输入正确的银行卡号");
|
||||
return;
|
||||
}
|
||||
// 提交添加银行卡
|
||||
assetViewModel.addBankCard(cardNo, bankName);
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,97 @@
|
||||
package com.payment.asset;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import com.payment.R;
|
||||
import com.payment.model.BankCard;
|
||||
import java.util.List;
|
||||
import android.widget.Button;
|
||||
|
||||
public class BankCardAdapter extends RecyclerView.Adapter<BankCardAdapter.CardViewHolder> {
|
||||
private Context context;
|
||||
private List<BankCard> cardList;
|
||||
private OnItemActionListener actionListener;
|
||||
|
||||
// 点击事件接口
|
||||
public interface OnItemActionListener {
|
||||
void onAction(BankCard card, String action);
|
||||
}
|
||||
|
||||
public void setOnItemActionListener(OnItemActionListener listener) {
|
||||
this.actionListener = listener;
|
||||
}
|
||||
|
||||
public BankCardAdapter(Context context, List<BankCard> cardList) {
|
||||
this.context = context;
|
||||
this.cardList = cardList;
|
||||
}
|
||||
|
||||
// 更新数据
|
||||
public void updateData(List<BankCard> cardList) {
|
||||
this.cardList = cardList;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public CardViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
View view = LayoutInflater.from(context).inflate(R.layout.item_bank_card, parent, false);
|
||||
return new CardViewHolder(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull CardViewHolder holder, int position) {
|
||||
BankCard card = cardList.get(position);
|
||||
if (card == null) return;
|
||||
|
||||
// 显示银行名称和脱敏卡号
|
||||
holder.tvBankName.setText(card.getBankName());
|
||||
String cardNo = card.getCardNo();
|
||||
String maskedCardNo = cardNo.replaceAll("(\\d{4})(\\d{8})(\\d{4})", "$1 **** **** $3");
|
||||
holder.tvCardNo.setText(maskedCardNo);
|
||||
|
||||
// 显示默认卡标识
|
||||
holder.ivDefault.setVisibility(card.isDefault() ? View.VISIBLE : View.GONE);
|
||||
|
||||
// 设置默认卡点击
|
||||
holder.btnSetDefault.setOnClickListener(v -> {
|
||||
if (actionListener != null) {
|
||||
actionListener.onAction(card, "setDefault");
|
||||
}
|
||||
});
|
||||
|
||||
// 删除卡点击
|
||||
holder.btnDelete.setOnClickListener(v -> {
|
||||
if (actionListener != null) {
|
||||
actionListener.onAction(card, "delete");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return cardList == null ? 0 : cardList.size();
|
||||
}
|
||||
|
||||
// ViewHolder
|
||||
static class CardViewHolder extends RecyclerView.ViewHolder {
|
||||
TextView tvBankName, tvCardNo;
|
||||
ImageView ivDefault;
|
||||
Button btnSetDefault, btnDelete;
|
||||
|
||||
public CardViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
tvBankName = itemView.findViewById(R.id.tv_bank_name);
|
||||
tvCardNo = itemView.findViewById(R.id.tv_card_no);
|
||||
ivDefault = itemView.findViewById(R.id.iv_default);
|
||||
btnSetDefault = itemView.findViewById(R.id.btn_set_default);
|
||||
btnDelete = itemView.findViewById(R.id.btn_delete);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,101 @@
|
||||
package com.payment.asset;
|
||||
|
||||
import com.payment.base.BaseActivity;
|
||||
import com.payment.R;
|
||||
import com.payment.model.BankCard;
|
||||
import com.payment.utils.IntentUtils;
|
||||
import com.payment.utils.ToastUtils;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
import java.util.List;
|
||||
|
||||
public class BankCardListActivity extends BaseActivity {
|
||||
private RecyclerView rvBankCards;
|
||||
private Button btnAddCard;
|
||||
private TextView tvEmpty;
|
||||
private BankCardAdapter adapter;
|
||||
private AssetViewModel assetViewModel;
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_bank_card_list;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initView() {
|
||||
rvBankCards = findViewById(R.id.rv_bank_cards);
|
||||
btnAddCard = findViewById(R.id.btn_add_card);
|
||||
tvEmpty = findViewById(R.id.tv_empty);
|
||||
|
||||
// 初始化RecyclerView
|
||||
rvBankCards.setLayoutManager(new LinearLayoutManager(this));
|
||||
adapter = new BankCardAdapter(this, null);
|
||||
rvBankCards.setAdapter(adapter);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initData() {
|
||||
assetViewModel = new ViewModelProvider(this).get(AssetViewModel.class);
|
||||
// 获取银行卡列表
|
||||
assetViewModel.getBankCardList();
|
||||
// 观察列表结果
|
||||
assetViewModel.getBankCardListResult().observe(this, resultBean -> {
|
||||
if (resultBean != null && resultBean.isSuccess()) {
|
||||
List<BankCard> cardList = resultBean.getData();
|
||||
if (cardList != null && !cardList.isEmpty()) {
|
||||
rvBankCards.setVisibility(View.VISIBLE);
|
||||
tvEmpty.setVisibility(View.GONE);
|
||||
adapter.updateData(cardList);
|
||||
} else {
|
||||
rvBankCards.setVisibility(View.GONE);
|
||||
tvEmpty.setVisibility(View.VISIBLE);
|
||||
}
|
||||
} else {
|
||||
ToastUtils.showToast(this, "获取银行卡列表失败");
|
||||
}
|
||||
});
|
||||
|
||||
// 观察默认卡设置结果
|
||||
assetViewModel.getDefaultCardResult().observe(this, resultBean -> {
|
||||
if (resultBean != null && resultBean.isSuccess()) {
|
||||
ToastUtils.showToast(this, "默认银行卡设置成功");
|
||||
assetViewModel.getBankCardList(); // 刷新列表
|
||||
} else {
|
||||
ToastUtils.showToast(this, "设置失败");
|
||||
}
|
||||
});
|
||||
|
||||
// 观察删除结果
|
||||
assetViewModel.getDeleteCardResult().observe(this, resultBean -> {
|
||||
if (resultBean != null && resultBean.isSuccess()) {
|
||||
ToastUtils.showToast(this, "银行卡删除成功");
|
||||
assetViewModel.getBankCardList(); // 刷新列表
|
||||
} else {
|
||||
ToastUtils.showToast(this, "删除失败");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void bindEvent() {
|
||||
// 添加银行卡
|
||||
btnAddCard.setOnClickListener(v -> IntentUtils.jumpTo(this, AddBankCardActivity.class, false));
|
||||
|
||||
// 列表项点击事件(设置默认卡/删除)
|
||||
adapter.setOnItemActionListener((card, action) -> {
|
||||
switch (action) {
|
||||
case "setDefault":
|
||||
assetViewModel.setDefaultCard(card.getId());
|
||||
break;
|
||||
case "delete":
|
||||
assetViewModel.deleteBankCard(card.getId());
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,127 @@
|
||||
package com.payment.asset;
|
||||
|
||||
import com.payment.base.BaseActivity;
|
||||
import com.payment.R;
|
||||
import com.payment.model.BankCard;
|
||||
import com.payment.utils.ToastUtils;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.EditText;
|
||||
import android.widget.RadioGroup;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.ArrayAdapter;
|
||||
import java.util.List;
|
||||
|
||||
public class RechargeWithdrawActivity extends BaseActivity {
|
||||
private RadioGroup rgType;
|
||||
private EditText etAmount;
|
||||
private Spinner spBankCards;
|
||||
private Button btnConfirm;
|
||||
private AssetViewModel assetViewModel;
|
||||
private List<BankCard> cardList;
|
||||
private String type = "recharge"; // 默认充值
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_recharge_withdraw;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initView() {
|
||||
rgType = findViewById(R.id.rg_type);
|
||||
etAmount = findViewById(R.id.et_amount);
|
||||
spBankCards = findViewById(R.id.sp_bank_cards);
|
||||
btnConfirm = findViewById(R.id.btn_confirm);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initData() {
|
||||
assetViewModel = new ViewModelProvider(this).get(AssetViewModel.class);
|
||||
|
||||
// 获取银行卡列表(用于下拉选择)
|
||||
assetViewModel.getBankCardList();
|
||||
assetViewModel.getBankCardListResult().observe(this, resultBean -> {
|
||||
if (resultBean != null && resultBean.isSuccess()) {
|
||||
cardList = resultBean.getData();
|
||||
if (cardList != null && !cardList.isEmpty()) {
|
||||
// 初始化下拉框
|
||||
String[] cardNames = new String[cardList.size()];
|
||||
for (int i = 0; i < cardList.size(); i++) {
|
||||
BankCard card = cardList.get(i);
|
||||
cardNames[i] = card.getBankName() + "(" + card.getCardNo().replaceAll("(\\d{4})(\\d{8})(\\d{4})", "$1 **** **** $3") + ")";
|
||||
}
|
||||
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, cardNames);
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
spBankCards.setAdapter(adapter);
|
||||
} else {
|
||||
showToast("暂无绑定银行卡,请先添加");
|
||||
finish();
|
||||
}
|
||||
} else {
|
||||
showToast("获取银行卡失败");
|
||||
finish();
|
||||
}
|
||||
});
|
||||
|
||||
// 观察充值结果
|
||||
assetViewModel.getRechargeResult().observe(this, resultBean -> {
|
||||
if (resultBean != null && resultBean.isSuccess()) {
|
||||
showToast("充值成功");
|
||||
finish();
|
||||
} else {
|
||||
showToast("充值失败:" + (resultBean != null ? resultBean.getMsg() : "网络异常"));
|
||||
}
|
||||
});
|
||||
|
||||
// 观察提现结果
|
||||
assetViewModel.getWithdrawResult().observe(this, resultBean -> {
|
||||
if (resultBean != null && resultBean.isSuccess()) {
|
||||
showToast("提现申请提交成功");
|
||||
finish();
|
||||
} else {
|
||||
showToast("提现失败:" + (resultBean != null ? resultBean.getMsg() : "网络异常"));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void bindEvent() {
|
||||
// 选择充值/提现类型
|
||||
rgType.setOnCheckedChangeListener((group, checkedId) -> {
|
||||
if (checkedId == R.id.rb_recharge) {
|
||||
type = "recharge";
|
||||
btnConfirm.setText("确认充值");
|
||||
} else if (checkedId == R.id.rb_withdraw) {
|
||||
type = "withdraw";
|
||||
btnConfirm.setText("确认提现");
|
||||
}
|
||||
});
|
||||
|
||||
// 确认按钮
|
||||
btnConfirm.setOnClickListener(v -> {
|
||||
String amountStr = etAmount.getText().toString().trim();
|
||||
if (amountStr.isEmpty()) {
|
||||
showToast("请输入金额");
|
||||
return;
|
||||
}
|
||||
double amount = Double.parseDouble(amountStr);
|
||||
if (amount <= 0) {
|
||||
showToast("金额必须大于0");
|
||||
return;
|
||||
}
|
||||
|
||||
// 获取选中的银行卡ID
|
||||
int selectedPosition = spBankCards.getSelectedItemPosition();
|
||||
int cardId = cardList.get(selectedPosition).getId();
|
||||
|
||||
// 执行充值或提现
|
||||
if ("recharge".equals(type)) {
|
||||
assetViewModel.recharge(amount, cardId);
|
||||
} else {
|
||||
assetViewModel.withdraw(amount, cardId);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,12 @@
|
||||
package com.payment.model;
|
||||
|
||||
public class Balance {
|
||||
private double balance; // 账户余额
|
||||
private String updateTime; // 最后更新时间
|
||||
|
||||
// getter + setter
|
||||
public double getBalance() { return balance; }
|
||||
public void setBalance(double balance) { this.balance = balance; }
|
||||
public String getUpdateTime() { return updateTime; }
|
||||
public void setUpdateTime(String updateTime) { this.updateTime = updateTime; }
|
||||
}
|
||||
@ -0,0 +1,18 @@
|
||||
package com.payment.model;
|
||||
|
||||
public class BankCard {
|
||||
private int id; // 银行卡ID
|
||||
private String cardNo; // 银行卡号(脱敏)
|
||||
private String bankName; // 银行名称
|
||||
private boolean isDefault; // 是否默认卡
|
||||
|
||||
// getter + setter
|
||||
public int getId() { return id; }
|
||||
public void setId(int id) { this.id = id; }
|
||||
public String getCardNo() { return cardNo; }
|
||||
public void setCardNo(String cardNo) { this.cardNo = cardNo; }
|
||||
public String getBankName() { return bankName; }
|
||||
public void setBankName(String bankName) { this.bankName = bankName; }
|
||||
public boolean isDefault() { return isDefault; }
|
||||
public void setDefault(boolean aDefault) { isDefault = aDefault; }
|
||||
}
|
||||
@ -0,0 +1,21 @@
|
||||
package com.payment.model;
|
||||
|
||||
public class User {
|
||||
private int userId; // 用户ID
|
||||
private String userName; // 用户名
|
||||
private String token; // 登录令牌
|
||||
private String realName; // 真实姓名(实名认证后)
|
||||
private String idCard; // 身份证号(脱敏)
|
||||
|
||||
// getter + setter
|
||||
public int getUserId() { return userId; }
|
||||
public void setUserId(int userId) { this.userId = userId; }
|
||||
public String getUserName() { return userName; }
|
||||
public void setUserName(String userName) { this.userName = userName; }
|
||||
public String getToken() { return token; }
|
||||
public void setToken(String token) { this.token = token; }
|
||||
public String getRealName() { return realName; }
|
||||
public void setRealName(String realName) { this.realName = realName; }
|
||||
public String getIdCard() { return idCard; }
|
||||
public void setIdCard(String idCard) { this.idCard = idCard; }
|
||||
}
|
||||
@ -0,0 +1,87 @@
|
||||
package com.payment.ui;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentTransaction;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.RadioButton;
|
||||
import android.widget.RadioGroup;
|
||||
|
||||
import com.payment.R;
|
||||
import com.payment.ui.fragment.HomeFragment;
|
||||
import com.payment.ui.fragment.TravelCodeFragment;
|
||||
import com.payment.ui.fragment.BillFragment;
|
||||
import com.payment.ui.fragment.MineFragment;
|
||||
|
||||
public class MainActivity extends AppCompatActivity {
|
||||
private FrameLayout flContent;
|
||||
private RadioGroup rgBottomNav;
|
||||
private RadioButton rbHome, rbTravel, rbBill, rbMine;
|
||||
|
||||
// 碎片实例
|
||||
private Fragment homeFragment, travelFragment, billFragment, mineFragment;
|
||||
private Fragment currentFragment;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_main);
|
||||
|
||||
// 初始化视图
|
||||
initView();
|
||||
// 初始化碎片
|
||||
initFragment();
|
||||
// 底部导航点击事件
|
||||
setNavClickListener();
|
||||
}
|
||||
|
||||
private void initView() {
|
||||
flContent = findViewById(R.id.fl_content);
|
||||
rgBottomNav = findViewById(R.id.rg_bottom_nav);
|
||||
rbHome = findViewById(R.id.rb_home);
|
||||
rbTravel = findViewById(R.id.rb_travel);
|
||||
rbBill = findViewById(R.id.rb_bill);
|
||||
rbMine = findViewById(R.id.rb_mine);
|
||||
}
|
||||
|
||||
private void initFragment() {
|
||||
homeFragment = new HomeFragment();
|
||||
travelFragment = new TravelCodeFragment();
|
||||
billFragment = new BillFragment();
|
||||
mineFragment = new MineFragment();
|
||||
|
||||
// 默认显示首页
|
||||
currentFragment = homeFragment;
|
||||
getSupportFragmentManager().beginTransaction()
|
||||
.add(R.id.fl_content, homeFragment)
|
||||
.commit();
|
||||
}
|
||||
|
||||
private void setNavClickListener() {
|
||||
rgBottomNav.setOnCheckedChangeListener((group, checkedId) -> {
|
||||
Fragment targetFragment = null;
|
||||
// 用if-else替代switch-case
|
||||
if (checkedId == R.id.rb_home) {
|
||||
targetFragment = homeFragment;
|
||||
} else if (checkedId == R.id.rb_travel) {
|
||||
targetFragment = travelFragment;
|
||||
} else if (checkedId == R.id.rb_bill) {
|
||||
targetFragment = billFragment;
|
||||
} else if (checkedId == R.id.rb_mine) {
|
||||
targetFragment = mineFragment;
|
||||
}
|
||||
|
||||
// 切换碎片
|
||||
if (targetFragment != null && targetFragment != currentFragment) {
|
||||
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
|
||||
if (!targetFragment.isAdded()) {
|
||||
transaction.add(R.id.fl_content, targetFragment);
|
||||
}
|
||||
transaction.hide(currentFragment).show(targetFragment).commit();
|
||||
currentFragment = targetFragment;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,22 @@
|
||||
package com.payment.ui.fragment;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import com.payment.R;
|
||||
|
||||
public class BillFragment extends Fragment {
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
View view = inflater.inflate(R.layout.fragment_bill, container, false);
|
||||
TextView tvTip = view.findViewById(R.id.tv_tip);
|
||||
tvTip.setText("账单功能暂未开放,敬请期待");
|
||||
return view;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,68 @@
|
||||
package com.payment.ui.fragment;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import com.payment.R;
|
||||
import com.payment.utils.IntentUtils;
|
||||
import com.payment.asset.BalanceActivity;
|
||||
import com.payment.asset.BankCardListActivity;
|
||||
|
||||
public class HomeFragment extends Fragment {
|
||||
private Button btnBalance, btnBankCard, btnRecharge, btnWithdraw;
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
View view = inflater.inflate(R.layout.fragment_home, container, false);
|
||||
initView(view);
|
||||
bindEvent();
|
||||
return view;
|
||||
}
|
||||
|
||||
private void initView(View view) {
|
||||
btnBalance = view.findViewById(R.id.btn_balance);
|
||||
btnBankCard = view.findViewById(R.id.btn_bank_card);
|
||||
btnRecharge = view.findViewById(R.id.btn_recharge);
|
||||
btnWithdraw = view.findViewById(R.id.btn_withdraw);
|
||||
}
|
||||
|
||||
private void bindEvent() {
|
||||
// 余额查询
|
||||
btnBalance.setOnClickListener(v -> {
|
||||
if (getActivity() != null) {
|
||||
IntentUtils.jumpTo(getActivity(), BalanceActivity.class, false);
|
||||
}
|
||||
});
|
||||
|
||||
// 银行卡管理
|
||||
btnBankCard.setOnClickListener(v -> {
|
||||
if (getActivity() != null) {
|
||||
IntentUtils.jumpTo(getActivity(), BankCardListActivity.class, false);
|
||||
}
|
||||
});
|
||||
|
||||
// 充值
|
||||
btnRecharge.setOnClickListener(v -> {
|
||||
if (getActivity() != null) {
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString("type", "recharge");
|
||||
IntentUtils.jumpToWithBundle(getActivity(), com.payment.asset.RechargeWithdrawActivity.class, bundle, false);
|
||||
}
|
||||
});
|
||||
|
||||
// 提现
|
||||
btnWithdraw.setOnClickListener(v -> {
|
||||
if (getActivity() != null) {
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString("type", "withdraw");
|
||||
IntentUtils.jumpToWithBundle(getActivity(), com.payment.asset.RechargeWithdrawActivity.class, bundle, false);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,22 @@
|
||||
package com.payment.ui.fragment;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import com.payment.R;
|
||||
|
||||
public class TravelCodeFragment extends Fragment {
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
View view = inflater.inflate(R.layout.fragment_travel_code, container, false);
|
||||
TextView tvTip = view.findViewById(R.id.tv_tip);
|
||||
tvTip.setText("出行码功能暂未开放,敬请期待");
|
||||
return view;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,73 @@
|
||||
package com.payment.user;
|
||||
|
||||
import com.payment.base.BaseActivity;
|
||||
import com.payment.R;
|
||||
import com.payment.network.ApiService;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import android.os.Bundle;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
public class AuditStatusActivity extends BaseActivity {
|
||||
private TextView tvStatus, tvDesc;
|
||||
private UserViewModel userViewModel;
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_audit_status;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initView() {
|
||||
tvStatus = findViewById(R.id.tv_status);
|
||||
tvDesc = findViewById(R.id.tv_desc);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initData() {
|
||||
userViewModel = new ViewModelProvider(this).get(UserViewModel.class);
|
||||
// 查询审核状态
|
||||
userViewModel.getAuditStatus();
|
||||
// 观察审核状态结果
|
||||
userViewModel.getAuditStatusResult().observe(this, resultBean -> {
|
||||
if (resultBean != null && resultBean.isSuccess()) {
|
||||
ApiService.AuditStatusBean statusBean = resultBean.getData();
|
||||
updateStatusUI(statusBean.getStatus(), statusBean.getDesc());
|
||||
} else {
|
||||
showToast("查询审核状态失败");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 更新审核状态UI
|
||||
private void updateStatusUI(int status, String desc) {
|
||||
tvStatus.setText(getStatusText(status));
|
||||
tvDesc.setText(desc);
|
||||
// 根据状态设置文字颜色
|
||||
switch (status) {
|
||||
case 0: // 未提交
|
||||
tvStatus.setTextColor(getResources().getColor(R.color.gray));
|
||||
break;
|
||||
case 1: // 审核中
|
||||
tvStatus.setTextColor(getResources().getColor(R.color.blue));
|
||||
break;
|
||||
case 2: // 审核通过
|
||||
tvStatus.setTextColor(getResources().getColor(R.color.green));
|
||||
break;
|
||||
case 3: // 驳回
|
||||
tvStatus.setTextColor(getResources().getColor(R.color.red));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 状态文字映射
|
||||
private String getStatusText(int status) {
|
||||
switch (status) {
|
||||
case 0: return "未提交实名认证";
|
||||
case 1: return "审核中";
|
||||
case 2: return "审核通过";
|
||||
case 3: return "审核驳回";
|
||||
default: return "未知状态";
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,61 @@
|
||||
package com.payment.user;
|
||||
|
||||
import com.payment.base.BaseActivity;
|
||||
import com.payment.R;
|
||||
import com.payment.utils.ToastUtils;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.EditText;
|
||||
|
||||
public class RealNameAuthActivity extends BaseActivity {
|
||||
private EditText etRealName, etIdCard;
|
||||
private Button btnSubmit;
|
||||
private UserViewModel userViewModel;
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.activity_real_name_auth;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initView() {
|
||||
etRealName = findViewById(R.id.et_real_name);
|
||||
etIdCard = findViewById(R.id.et_id_card);
|
||||
btnSubmit = findViewById(R.id.btn_submit);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initData() {
|
||||
userViewModel = new ViewModelProvider(this).get(UserViewModel.class);
|
||||
// 观察实名认证结果
|
||||
userViewModel.getRealNameResult().observe(this, resultBean -> {
|
||||
if (resultBean != null && resultBean.isSuccess()) {
|
||||
showToast(resultBean.getMsg());
|
||||
finish(); // 返回上一页
|
||||
} else {
|
||||
showToast("提交失败:" + (resultBean != null ? resultBean.getMsg() : "网络异常"));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void bindEvent() {
|
||||
btnSubmit.setOnClickListener(v -> {
|
||||
String realName = etRealName.getText().toString().trim();
|
||||
String idCard = etIdCard.getText().toString().trim();
|
||||
|
||||
if (realName.isEmpty() || idCard.isEmpty()) {
|
||||
showToast("请完善实名认证信息");
|
||||
return;
|
||||
}
|
||||
if (idCard.length() != 18) {
|
||||
showToast("请输入正确的身份证号");
|
||||
return;
|
||||
}
|
||||
// 提交实名认证
|
||||
userViewModel.submitRealNameAuth(realName, idCard);
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,38 @@
|
||||
package com.payment.utils;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
|
||||
public class IntentUtils {
|
||||
/**
|
||||
* 页面跳转
|
||||
* @param context 上下文
|
||||
* @param targetClass 目标Activity
|
||||
* @param isFinish 是否关闭当前Activity
|
||||
*/
|
||||
public static void jumpTo(Context context, Class<?> targetClass, boolean isFinish) {
|
||||
Intent intent = new Intent(context, targetClass);
|
||||
context.startActivity(intent);
|
||||
if (isFinish && context instanceof android.app.Activity) {
|
||||
((android.app.Activity) context).finish();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 带参数跳转
|
||||
* @param context 上下文
|
||||
* @param targetClass 目标Activity
|
||||
* @param bundle 参数包
|
||||
* @param isFinish 是否关闭当前Activity
|
||||
*/
|
||||
public static void jumpToWithBundle(Context context, Class<?> targetClass, android.os.Bundle bundle, boolean isFinish) {
|
||||
Intent intent = new Intent(context, targetClass);
|
||||
if (bundle != null) {
|
||||
intent.putExtras(bundle);
|
||||
}
|
||||
context.startActivity(intent);
|
||||
if (isFinish && context instanceof android.app.Activity) {
|
||||
((android.app.Activity) context).finish();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,30 @@
|
||||
package com.payment.utils;
|
||||
|
||||
import android.content.Context;
|
||||
import android.widget.Toast;
|
||||
|
||||
public class ToastUtils {
|
||||
private static Toast toast;
|
||||
|
||||
// 显示短吐司
|
||||
public static void showToast(Context context, String msg) {
|
||||
if (toast == null) {
|
||||
toast = Toast.makeText(context.getApplicationContext(), msg, Toast.LENGTH_SHORT);
|
||||
} else {
|
||||
toast.setText(msg);
|
||||
toast.setDuration(Toast.LENGTH_SHORT);
|
||||
}
|
||||
toast.show();
|
||||
}
|
||||
|
||||
// 显示长吐司
|
||||
public static void showLongToast(Context context, String msg) {
|
||||
if (toast == null) {
|
||||
toast = Toast.makeText(context.getApplicationContext(), msg, Toast.LENGTH_LONG);
|
||||
} else {
|
||||
toast.setText(msg);
|
||||
toast.setDuration(Toast.LENGTH_LONG);
|
||||
}
|
||||
toast.show();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:duration="200"
|
||||
android:fromAlpha="0.0"
|
||||
android:toAlpha="1.0"
|
||||
android:interpolator="@android:anim/accelerate_interpolator"/>
|
||||
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:duration="200"
|
||||
android:fromAlpha="1.0"
|
||||
android:toAlpha="0.0"
|
||||
android:interpolator="@android:anim/decelerate_interpolator"/>
|
||||
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@color/blue_primary"
|
||||
android:pathData="M19,3H5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V5c0,-1.1 -0.9,-2 -2,-2zm-2,5h-1.42v1.5h1.71v1.22h-1.71v1.28h1.42V14h-1.71v1.5h1.71v1.22h-1.71v1.28h1.71V20H7v-1.5h1.71v-1.22H7v-1.28h1.71V14H7v-1.5h1.71v-1.22H7V8h10v1.5H9.29v1.22h1.71V11h-1.71v1.28h1.71V14H9.29v1.5h1.71v1.22H9.29v1.28h1.71V20h1.71v-1.5h-1.71v-1.22h1.71v-1.28h-1.71V14h1.71v-1.5h-1.71v-1.22h1.71V8h1.71V6.5h-1.71V5.28h1.71V4h1.71V5.28h-1.71V6.5h1.71V8z"/>
|
||||
</vector>
|
||||
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@color/blue_primary"
|
||||
android:pathData="M11,17h2v-6h-2v6zm1,-15C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zm0,18c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8z"/>
|
||||
</vector>
|
||||
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@color/blue_primary"
|
||||
android:pathData="M20,4H4c-1.11,0 -1.99,0.89 -1.99,2L2,18c0,1.11 0.89,2 2,2h16c1.11,0 2,-0.89 2,-2V6c0,-1.11 -0.89,-2 -2,-2zM4,9h10.5v3.5H4V9zm0,5h10.5v3.5H4V14zm16,5h-2.5V9H20v10z"/>
|
||||
</vector>
|
||||
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="20dp"
|
||||
android:height="20dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@color/blue_primary"
|
||||
android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/>
|
||||
</vector>
|
||||
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@color/gray"
|
||||
android:pathData="M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z"/>
|
||||
</vector>
|
||||
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@color/blue_primary"
|
||||
android:pathData="M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z"/>
|
||||
</vector>
|
||||
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@color/red"
|
||||
android:pathData="M17,7l-1.41,1.41L18.17,11H8v2h10.17l-2.58,2.58L17,17l5,-5zM4,5h8V3H4C2.9,3 2,3.9 2,5v14c0,1.1 0.9,2 2,2h8v-2H4V5z"/>
|
||||
</vector>
|
||||
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@color/gray"
|
||||
android:pathData="M12,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zm0,2c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z" />
|
||||
</vector>
|
||||
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@color/blue_primary"
|
||||
android:pathData="M12,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zm0,2c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z" />
|
||||
</vector>
|
||||
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@color/blue_primary"
|
||||
android:pathData="M12,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zm0,2c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z"/>
|
||||
</vector>
|
||||
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@color/blue_primary"
|
||||
android:pathData="M11,17h2v-6h-2v6zm1,-15C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zm0,18c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8z"/>
|
||||
</vector>
|
||||
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@color/gray"
|
||||
android:pathData="M12,2C8.13,2 5,5.13 5,9c0,5.25 7,13 7,13s7,-7.75 7,-13c0,-3.87 -3.13,-7 -7,-7zM9,9c0,-1.66 1.34,-3 3,-3s3,1.34 3,3 -1.34,3 -3,3 -3,-1.34 -3,-3z"/> <!-- 与选中状态路径一致 -->
|
||||
</vector>
|
||||
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@color/blue_primary"
|
||||
android:pathData="M12,2C8.13,2 5,5.13 5,9c0,5.25 7,13 7,13s7,-7.75 7,-13c0,-3.87 -3.13,-7 -7,-7zM9,9c0,-1.66 1.34,-3 3,-3s3,1.34 3,3 -1.34,3 -3,3 -3,-1.34 -3,-3z"/> <!-- 出行码相关图标路径 -->
|
||||
</vector>
|
||||
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="80dp"
|
||||
android:height="80dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@color/white"
|
||||
android:pathData="M12,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zm0,2c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z"/>
|
||||
</vector>
|
||||
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@color/blue_primary"
|
||||
android:pathData="M12,15c1.66,0 2.99,-1.34 2.99,-3L15,6c0,-1.66 -1.34,-3 -3,-3S9,4.34 9,6v6c0,1.66 1.34,3 3,3zm5.3,-3c0,3 -2.54,5.1 -5.3,5.1S6.7,15 6.7,12H5c0,3.42 2.72,6.23 6,6.72V22h2v-3.28c3.28,-0.48 6,-3.3 6,-6.72h-1.7z"/>
|
||||
</vector>
|
||||
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_checked="true">
|
||||
<layer-list android:layout_width="match_parent">
|
||||
<item android:drawable="@android:drawable/ic_menu_view"/>
|
||||
<item android:gravity="bottom|center" android:bottom="2dp">
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="@color/blue_primary"/>
|
||||
<size android:height="2dp" android:width="20dp"/>
|
||||
</shape>
|
||||
</item>
|
||||
</layer-list>
|
||||
</item>
|
||||
<item android:drawable="@android:drawable/ic_menu_agenda"/>
|
||||
</selector>
|
||||
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_checked="true">
|
||||
<layer-list>
|
||||
<item android:drawable="@drawable/ic_home_selected"/>
|
||||
<item android:gravity="bottom|center" android:bottom="2dp">
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="@color/blue_primary"/>
|
||||
<size android:height="2dp" android:width="20dp"/>
|
||||
</shape>
|
||||
</item>
|
||||
</layer-list>
|
||||
</item>
|
||||
<item android:drawable="@drawable/ic_home_normal"/>
|
||||
</selector>
|
||||
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_checked="true">
|
||||
<layer-list>
|
||||
<item android:drawable="@drawable/ic_mine_selected"/>
|
||||
<item android:gravity="bottom|center" android:bottom="2dp">
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="@color/blue_primary"/>
|
||||
<size android:height="2dp" android:width="20dp"/>
|
||||
</shape>
|
||||
</item>
|
||||
</layer-list>
|
||||
</item>
|
||||
<item android:drawable="@drawable/ic_mine_normal"/>
|
||||
</selector>
|
||||
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_checked="true">
|
||||
<layer-list>
|
||||
<item android:drawable="@drawable/ic_travel_selected"/>
|
||||
<item android:gravity="bottom|center" android:bottom="2dp">
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="@color/blue_primary"/>
|
||||
<size android:height="2dp" android:width="20dp"/>
|
||||
</shape>
|
||||
</item>
|
||||
</layer-list>
|
||||
</item>
|
||||
<item android:drawable="@drawable/ic_travel_normal"/>
|
||||
</selector>
|
||||
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_checked="true">
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="@color/blue_primary"/>
|
||||
<corners android:topLeftRadius="8dp" android:bottomLeftRadius="8dp"/>
|
||||
</shape>
|
||||
</item>
|
||||
<item>
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="@color/gray_light"/>
|
||||
<corners android:topLeftRadius="8dp" android:bottomLeftRadius="8dp"/>
|
||||
</shape>
|
||||
</item>
|
||||
</selector>
|
||||
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_checked="true">
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="@color/blue_primary"/>
|
||||
<corners android:topRightRadius="8dp" android:bottomRightRadius="8dp"/>
|
||||
</shape>
|
||||
</item>
|
||||
<item>
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="@color/gray_light"/>
|
||||
<corners android:topRightRadius="8dp" android:bottomRightRadius="8dp"/>
|
||||
</shape>
|
||||
</item>
|
||||
</selector>
|
||||
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="@color/white"/>
|
||||
<corners android:radius="12dp"/>
|
||||
<elevation android:elevation="4dp"/>
|
||||
<padding
|
||||
android:left="10dp"
|
||||
android:top="10dp"
|
||||
android:right="10dp"
|
||||
android:bottom="10dp"/>
|
||||
</shape>
|
||||
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="oval">
|
||||
<solid android:color="@color/gray_light"/>
|
||||
<size
|
||||
android:width="80dp"
|
||||
android:height="80dp"/>
|
||||
</shape>
|
||||
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="@color/white"/>
|
||||
<corners android:radius="8dp"/>
|
||||
<stroke
|
||||
android:width="1dp"
|
||||
android:color="@color/gray_light"/>
|
||||
</shape>
|
||||
@ -0,0 +1,47 @@
|
||||
<?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="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:padding="20dp"
|
||||
android:background="@color/gray_f5">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="添加银行卡"
|
||||
android:textSize="24sp"
|
||||
android:textStyle="bold"
|
||||
android:layout_marginTop="50dp"/>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/et_card_no"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="50dp"
|
||||
android:hint="请输入银行卡号"
|
||||
android:inputType="number"
|
||||
android:background="@drawable/shape_edittext"
|
||||
android:paddingHorizontal="15dp"
|
||||
android:layout_marginTop="30dp"/>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/et_bank_name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="50dp"
|
||||
android:hint="请输入银行名称"
|
||||
android:background="@drawable/shape_edittext"
|
||||
android:paddingHorizontal="15dp"
|
||||
android:layout_marginTop="15dp"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_submit"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="50dp"
|
||||
android:text="确认添加"
|
||||
android:textSize="18sp"
|
||||
android:backgroundTint="@color/blue_primary"
|
||||
android:textColor="@color/white"
|
||||
android:layout_marginTop="40dp"
|
||||
android:radius="8dp"/>
|
||||
|
||||
</LinearLayout>
|
||||
@ -0,0 +1,50 @@
|
||||
<?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="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:padding="20dp"
|
||||
android:background="@color/gray_f5"
|
||||
android:gravity="center_horizontal">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="实名认证审核状态"
|
||||
android:textSize="22sp"
|
||||
android:textStyle="bold"
|
||||
android:layout_marginTop="80dp"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_status"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="审核中"
|
||||
android:textSize="30sp"
|
||||
android:textStyle="bold"
|
||||
android:layout_marginTop="50dp"
|
||||
android:textColor="@color/blue_primary"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_desc"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="提交成功,工作人员正在审核中,请耐心等待"
|
||||
android:textSize="18sp"
|
||||
android:layout_marginTop="20dp"
|
||||
android:textColor="@color/gray"
|
||||
android:gravity="center"/>
|
||||
|
||||
<Button
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="返回"
|
||||
android:layout_marginTop="50dp"
|
||||
android:backgroundTint="@color/blue_primary"
|
||||
android:textColor="@color/white"
|
||||
android:paddingHorizontal="30dp"
|
||||
android:paddingVertical="10dp"
|
||||
android:radius="8dp"
|
||||
android:onClick="finish"/>
|
||||
|
||||
</LinearLayout>
|
||||
@ -0,0 +1,75 @@
|
||||
<?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="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:padding="20dp"
|
||||
android:background="@color/gray_f5">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="我的余额"
|
||||
android:textSize="24sp"
|
||||
android:textStyle="bold"
|
||||
android:layout_marginTop="50dp"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:gravity="center"
|
||||
android:layout_marginTop="50dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_balance"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="0.00 元"
|
||||
android:textSize="48sp"
|
||||
android:textStyle="bold"
|
||||
android:textColor="@color/blue_primary"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_update_time"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="最后更新:未知"
|
||||
android:textSize="14sp"
|
||||
android:textColor="@color/gray"
|
||||
android:layout_marginTop="10dp"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:layout_marginTop="80dp">
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_recharge"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="50dp"
|
||||
android:layout_weight="1"
|
||||
android:text="充值"
|
||||
android:textSize="18sp"
|
||||
android:backgroundTint="@color/blue_primary"
|
||||
android:textColor="@color/white"
|
||||
android:radius="8dp"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_withdraw"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="50dp"
|
||||
android:layout_weight="1"
|
||||
android:text="提现"
|
||||
android:textSize="18sp"
|
||||
android:backgroundTint="@color/gray"
|
||||
android:textColor="@color/white"
|
||||
android:layout_marginStart="20dp"
|
||||
android:radius="8dp"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
@ -0,0 +1,55 @@
|
||||
<?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="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:padding="20dp"
|
||||
android:background="@color/gray_f5">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:gravity="center_vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="银行卡管理"
|
||||
android:textSize="24sp"
|
||||
android:textStyle="bold"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_add_card"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="添加银行卡"
|
||||
android:backgroundTint="@color/blue_primary"
|
||||
android:textColor="@color/white"
|
||||
android:layout_marginStart="16dp"
|
||||
android:paddingHorizontal="15dp"
|
||||
android:paddingVertical="5dp"
|
||||
android:radius="4dp"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<!-- 银行卡列表 -->
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/rv_bank_cards"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_marginTop="20dp"/>
|
||||
|
||||
<!-- 空数据提示 -->
|
||||
<TextView
|
||||
android:id="@+id/tv_empty"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="暂无绑定银行卡,点击添加"
|
||||
android:textSize="18sp"
|
||||
android:textColor="@color/gray"
|
||||
android:layout_gravity="center"
|
||||
android:visibility="gone"/>
|
||||
|
||||
</LinearLayout>
|
||||
@ -0,0 +1,71 @@
|
||||
<?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="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:padding="20dp"
|
||||
android:background="@color/gray_f5">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="移动支付平台"
|
||||
android:textSize="28sp"
|
||||
android:textStyle="bold"
|
||||
android:layout_marginTop="100dp"
|
||||
android:layout_gravity="center"/>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/et_phone"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="50dp"
|
||||
android:hint="请输入手机号"
|
||||
android:inputType="phone"
|
||||
android:background="@drawable/shape_edittext"
|
||||
android:paddingHorizontal="15dp"
|
||||
android:layout_marginTop="80dp"/>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/et_password"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="50dp"
|
||||
android:hint="请输入密码"
|
||||
android:inputType="textPassword"
|
||||
android:background="@drawable/shape_edittext"
|
||||
android:paddingHorizontal="15dp"
|
||||
android:layout_marginTop="15dp"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_login"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="50dp"
|
||||
android:text="登录"
|
||||
android:textSize="18sp"
|
||||
android:backgroundTint="@color/blue_primary"
|
||||
android:textColor="@color/white"
|
||||
android:layout_marginTop="40dp"
|
||||
android:radius="8dp"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:gravity="center"
|
||||
android:layout_marginTop="20dp">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="还没有账号?"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_register"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="立即注册"
|
||||
android:textColor="@color/blue_primary"
|
||||
android:background="@null"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
@ -0,0 +1,73 @@
|
||||
<?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="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<!-- 内容容器(碎片展示区域) -->
|
||||
<FrameLayout
|
||||
android:id="@+id/fl_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"/>
|
||||
|
||||
<!-- 底部导航栏 -->
|
||||
<RadioGroup
|
||||
android:id="@+id/rg_bottom_nav"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:background="@color/white"
|
||||
android:paddingVertical="8dp">
|
||||
|
||||
<!-- 首页 -->
|
||||
<RadioButton
|
||||
android:id="@+id/rb_home"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:button="@null"
|
||||
android:gravity="center"
|
||||
android:text="首页"
|
||||
android:textSize="14sp"
|
||||
android:drawableTop="@drawable/selector_nav_home"/>
|
||||
|
||||
<!-- 出行码 -->
|
||||
<RadioButton
|
||||
android:id="@+id/rb_travel"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:button="@null"
|
||||
android:gravity="center"
|
||||
android:text="出行码"
|
||||
android:textSize="14sp"
|
||||
android:drawableTop="@drawable/selector_nav_travel"/>
|
||||
|
||||
<!-- 账单 -->
|
||||
<RadioButton
|
||||
android:id="@+id/rb_bill"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:button="@null"
|
||||
android:gravity="center"
|
||||
android:text="账单"
|
||||
android:textSize="14sp"
|
||||
android:drawableTop="@drawable/selector_nav_bill"/>
|
||||
|
||||
<!-- 我的 -->
|
||||
<RadioButton
|
||||
android:id="@+id/rb_mine"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:button="@null"
|
||||
android:gravity="center"
|
||||
android:text="我的"
|
||||
android:textSize="14sp"
|
||||
android:drawableTop="@drawable/selector_nav_mine"/>
|
||||
|
||||
</RadioGroup>
|
||||
|
||||
</LinearLayout>
|
||||
@ -0,0 +1,55 @@
|
||||
<?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="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:padding="20dp"
|
||||
android:background="@color/gray_f5">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="实名认证"
|
||||
android:textSize="24sp"
|
||||
android:textStyle="bold"
|
||||
android:layout_marginTop="50dp"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="完成实名认证后可解锁全部功能"
|
||||
android:textSize="14sp"
|
||||
android:textColor="@color/gray"
|
||||
android:layout_marginTop="10dp"/>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/et_real_name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="50dp"
|
||||
android:hint="请输入真实姓名"
|
||||
android:background="@drawable/shape_edittext"
|
||||
android:paddingHorizontal="15dp"
|
||||
android:layout_marginTop="30dp"/>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/et_id_card"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="50dp"
|
||||
android:hint="请输入身份证号"
|
||||
android:inputType="number"
|
||||
android:background="@drawable/shape_edittext"
|
||||
android:paddingHorizontal="15dp"
|
||||
android:layout_marginTop="15dp"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_submit"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="50dp"
|
||||
android:text="提交认证"
|
||||
android:textSize="18sp"
|
||||
android:backgroundTint="@color/blue_primary"
|
||||
android:textColor="@color/white"
|
||||
android:layout_marginTop="40dp"
|
||||
android:radius="8dp"/>
|
||||
|
||||
</LinearLayout>
|
||||
@ -0,0 +1,81 @@
|
||||
<?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="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:padding="20dp"
|
||||
android:background="@color/gray_f5">
|
||||
|
||||
<!-- 充值/提现切换 -->
|
||||
<RadioGroup
|
||||
android:id="@+id/rg_type"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:layout_marginTop="50dp">
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/rb_recharge"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="50dp"
|
||||
android:layout_weight="1"
|
||||
android:text="充值"
|
||||
android:textSize="18sp"
|
||||
android:button="@null"
|
||||
android:gravity="center"
|
||||
android:background="@drawable/selector_radio_recharge"
|
||||
android:textColor="@color/white"
|
||||
android:checked="true"/>
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/rb_withdraw"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="50dp"
|
||||
android:layout_weight="1"
|
||||
android:text="提现"
|
||||
android:textSize="18sp"
|
||||
android:button="@null"
|
||||
android:gravity="center"
|
||||
android:background="@drawable/selector_radio_withdraw"
|
||||
android:textColor="@color/gray"/>
|
||||
|
||||
</RadioGroup>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/et_amount"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="50dp"
|
||||
android:hint="请输入金额"
|
||||
android:inputType="numberDecimal"
|
||||
android:background="@drawable/shape_edittext"
|
||||
android:paddingHorizontal="15dp"
|
||||
android:layout_marginTop="30dp"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="选择支付/提现银行卡"
|
||||
android:textSize="16sp"
|
||||
android:layout_marginTop="20dp"/>
|
||||
|
||||
<!-- 银行卡下拉选择 -->
|
||||
<Spinner
|
||||
android:id="@+id/sp_bank_cards"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="50dp"
|
||||
android:background="@drawable/shape_edittext"
|
||||
android:paddingHorizontal="15dp"
|
||||
android:layout_marginTop="10dp"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_confirm"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="50dp"
|
||||
android:text="确认充值"
|
||||
android:textSize="18sp"
|
||||
android:backgroundTint="@color/blue_primary"
|
||||
android:textColor="@color/white"
|
||||
android:layout_marginTop="40dp"
|
||||
android:radius="8dp"/>
|
||||
|
||||
</LinearLayout>
|
||||
@ -0,0 +1,28 @@
|
||||
<?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="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:gravity="center"
|
||||
android:background="@color/gray_f5">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_tip"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="账单功能暂未开放"
|
||||
android:textSize="20sp"
|
||||
android:textColor="@color/gray"/>
|
||||
|
||||
<Button
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="刷新账单"
|
||||
android:backgroundTint="@color/blue_primary"
|
||||
android:textColor="@color/white"
|
||||
android:layout_marginTop="20dp"
|
||||
android:paddingHorizontal="30dp"
|
||||
android:paddingVertical="10dp"
|
||||
android:radius="8dp"/>
|
||||
|
||||
</LinearLayout>
|
||||
@ -0,0 +1,77 @@
|
||||
<?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="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:padding="20dp"
|
||||
android:background="@color/gray_f5">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="资产中心"
|
||||
android:textSize="22sp"
|
||||
android:textStyle="bold"
|
||||
android:layout_marginTop="30dp"/>
|
||||
|
||||
<!-- 功能按钮区域 -->
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:layout_marginTop="40dp">
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_balance"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="60dp"
|
||||
android:text="查询余额"
|
||||
android:textSize="18sp"
|
||||
android:backgroundTint="@color/white"
|
||||
android:textColor="@color/black"
|
||||
android:gravity="center"
|
||||
android:layout_marginBottom="15dp"
|
||||
android:drawableStart="@drawable/ic_balance"
|
||||
android:drawablePadding="15dp"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_bank_card"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="60dp"
|
||||
android:text="银行卡管理"
|
||||
android:textSize="18sp"
|
||||
android:backgroundTint="@color/white"
|
||||
android:textColor="@color/black"
|
||||
android:gravity="center"
|
||||
android:layout_marginBottom="15dp"
|
||||
android:drawableStart="@drawable/ic_bank_card"
|
||||
android:drawablePadding="15dp"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_recharge"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="60dp"
|
||||
android:text="充值"
|
||||
android:textSize="18sp"
|
||||
android:backgroundTint="@color/white"
|
||||
android:textColor="@color/black"
|
||||
android:gravity="center"
|
||||
android:layout_marginBottom="15dp"
|
||||
android:drawableStart="@drawable/ic_recharge"
|
||||
android:drawablePadding="15dp"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_withdraw"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="60dp"
|
||||
android:text="提现"
|
||||
android:textSize="18sp"
|
||||
android:backgroundTint="@color/white"
|
||||
android:textColor="@color/black"
|
||||
android:gravity="center"
|
||||
android:drawableStart="@drawable/ic_withdraw"
|
||||
android:drawablePadding="15dp"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
@ -0,0 +1,100 @@
|
||||
<?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="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:padding="20dp"
|
||||
android:background="@color/gray_f5">
|
||||
|
||||
<!-- 用户信息区域 -->
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:gravity="center_vertical"
|
||||
android:layout_marginTop="30dp">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="80dp"
|
||||
android:layout_height="80dp"
|
||||
android:src="@drawable/ic_user_avatar"
|
||||
android:background="@drawable/shape_circle"
|
||||
android:scaleType="centerCrop"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:layout_marginStart="15dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_user_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="未登录"
|
||||
android:textSize="20sp"
|
||||
android:textStyle="bold"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="点击实名认证解锁全部功能"
|
||||
android:textSize="14sp"
|
||||
android:textColor="@color/gray"
|
||||
android:layout_marginTop="5dp"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<!-- 功能按钮区域 -->
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:layout_marginTop="40dp">
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_real_name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="60dp"
|
||||
android:text="实名认证"
|
||||
android:textSize="18sp"
|
||||
android:backgroundTint="@color/white"
|
||||
android:textColor="@color/black"
|
||||
android:gravity="center_vertical"
|
||||
android:layout_marginBottom="15dp"
|
||||
android:drawableStart="@drawable/ic_real_name"
|
||||
android:drawablePadding="15dp"
|
||||
android:paddingHorizontal="15dp"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_audit_status"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="60dp"
|
||||
android:text="审核状态查询"
|
||||
android:textSize="18sp"
|
||||
android:backgroundTint="@color/white"
|
||||
android:textColor="@color/black"
|
||||
android:gravity="center_vertical"
|
||||
android:layout_marginBottom="15dp"
|
||||
android:drawableStart="@drawable/ic_audit"
|
||||
android:drawablePadding="15dp"
|
||||
android:paddingHorizontal="15dp"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_logout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="60dp"
|
||||
android:text="退出登录"
|
||||
android:textSize="18sp"
|
||||
android:backgroundTint="@color/white"
|
||||
android:textColor="@color/red"
|
||||
android:gravity="center_vertical"
|
||||
android:drawableStart="@drawable/ic_logout"
|
||||
android:drawablePadding="15dp"
|
||||
android:paddingHorizontal="15dp"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
@ -0,0 +1,28 @@
|
||||
<?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="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:gravity="center"
|
||||
android:background="@color/gray_f5">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_tip"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="出行码功能暂未开放"
|
||||
android:textSize="20sp"
|
||||
android:textColor="@color/gray"/>
|
||||
|
||||
<Button
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="开通出行码"
|
||||
android:backgroundTint="@color/blue_primary"
|
||||
android:textColor="@color/white"
|
||||
android:layout_marginTop="20dp"
|
||||
android:paddingHorizontal="30dp"
|
||||
android:paddingVertical="10dp"
|
||||
android:radius="8dp"/>
|
||||
|
||||
</LinearLayout>
|
||||
@ -0,0 +1,75 @@
|
||||
<?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="15dp"
|
||||
android:background="@drawable/shape_card_bg"
|
||||
android:layout_margin="10dp">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:gravity="center_vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_bank_name"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="中国工商银行"
|
||||
android:textSize="18sp"
|
||||
android:textStyle="bold"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/iv_default"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/ic_default"
|
||||
android:visibility="gone"
|
||||
android:layout_marginStart="10dp"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_card_no"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="6222 02**** 1234"
|
||||
android:layout_marginTop="5dp"
|
||||
android:textSize="16sp"
|
||||
android:textColor="@color/gray"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:layout_marginTop="10dp">
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_set_default"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="30dp"
|
||||
android:text="设为默认"
|
||||
android:textSize="14sp"
|
||||
android:backgroundTint="@color/blue_primary"
|
||||
android:textColor="@color/white"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:paddingHorizontal="15dp"
|
||||
android:radius="4dp"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_delete"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="30dp"
|
||||
android:text="删除"
|
||||
android:textSize="14sp"
|
||||
android:backgroundTint="@color/red"
|
||||
android:textColor="@color/white"
|
||||
android:paddingHorizontal="15dp"
|
||||
android:radius="4dp"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 6.4 KiB |
@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- 主色调 -->
|
||||
<color name="blue_primary">#2196F3</color>
|
||||
<color name="blue_primary_dark">#1976D2</color>
|
||||
<color name="blue_accent">#64B5F6</color>
|
||||
|
||||
<!-- 基础色 -->
|
||||
<color name="white">#FFFFFF</color>
|
||||
<color name="black">#000000</color>
|
||||
<color name="gray">#9E9E9E</color>
|
||||
<color name="gray_light">#E0E0E0</color>
|
||||
<color name="gray_f5">#F5F5F5</color>
|
||||
<color name="gray_ee">#EEEEEE</color>
|
||||
<color name="blue">@color/blue_primary</color> <!-- 新增别名 -->
|
||||
|
||||
<!-- 功能色 -->
|
||||
<color name="red">#F44336</color>
|
||||
<color name="green">#4CAF50</color>
|
||||
<color name="yellow">#FFC107</color>
|
||||
</resources>
|
||||
@ -0,0 +1,92 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- 应用名称 -->
|
||||
<string name="app_name">移动支付平台</string>
|
||||
|
||||
<!-- 登录/注册 -->
|
||||
<string name="login">登录</string>
|
||||
<string name="register">注册</string>
|
||||
<string name="phone">手机号</string>
|
||||
<string name="password">密码</string>
|
||||
<string name="verify_code">验证码</string>
|
||||
<string name="get_code">获取验证码</string>
|
||||
<string name="no_account">还没有账号?</string>
|
||||
|
||||
<!-- 实名认证 -->
|
||||
<string name="real_name_auth">实名认证</string>
|
||||
<string name="real_name">真实姓名</string>
|
||||
<string name="id_card">身份证号</string>
|
||||
<string name="submit_auth">提交认证</string>
|
||||
<string name="audit_status">审核状态</string>
|
||||
<string name="audit_ing">审核中</string>
|
||||
<string name="audit_pass">审核通过</string>
|
||||
<string name="audit_reject">审核驳回</string>
|
||||
|
||||
<!-- 资产管理 -->
|
||||
<string name="asset_center">资产中心</string>
|
||||
<string name="balance">余额</string>
|
||||
<string name="bank_card_manage">银行卡管理</string>
|
||||
<string name="add_bank_card">添加银行卡</string>
|
||||
<string name="card_no">银行卡号</string>
|
||||
<string name="bank_name">银行名称</string>
|
||||
<string name="set_default">设为默认</string>
|
||||
<string name="delete">删除</string>
|
||||
<string name="recharge">充值</string>
|
||||
<string name="withdraw">提现</string>
|
||||
<string name="amount">金额</string>
|
||||
<string name="select_card">选择银行卡</string>
|
||||
<string name="confirm">确认</string>
|
||||
|
||||
<!-- 底部导航 -->
|
||||
<string name="home">首页</string>
|
||||
<string name="travel_code">出行码</string>
|
||||
<string name="bill">账单</string>
|
||||
<string name="mine">我的</string>
|
||||
|
||||
<!-- 提示语 -->
|
||||
<string name="input_phone">请输入手机号</string>
|
||||
<string name="input_password">请输入密码</string>
|
||||
<string name="input_verify_code">请输入验证码</string>
|
||||
<string name="input_real_name">请输入真实姓名</string>
|
||||
<string name="input_id_card">请输入身份证号</string>
|
||||
<string name="input_card_no">请输入银行卡号</string>
|
||||
<string name="input_bank_name">请输入银行名称</string>
|
||||
<string name="input_amount">请输入金额</string>
|
||||
<string name="empty_card_list">暂无绑定银行卡,点击添加</string>
|
||||
<string name="function_not_open">功能暂未开放,敬请期待</string>
|
||||
|
||||
<!-- 错误提示 -->
|
||||
<string name="phone_empty">手机号不能为空</string>
|
||||
<string name="password_empty">密码不能为空</string>
|
||||
<string name="code_empty">验证码不能为空</string>
|
||||
<string name="name_empty">真实姓名不能为空</string>
|
||||
<string name="id_card_empty">身份证号不能为空</string>
|
||||
<string name="card_no_empty">银行卡号不能为空</string>
|
||||
<string name="bank_name_empty">银行名称不能为空</string>
|
||||
<string name="amount_empty">金额不能为空</string>
|
||||
<string name="amount_invalid">金额必须大于0</string>
|
||||
<string name="id_card_invalid">请输入正确的身份证号</string>
|
||||
<string name="card_no_invalid">请输入正确的银行卡号</string>
|
||||
<string name="password_short">密码长度不能少于6位</string>
|
||||
|
||||
<!-- 成功提示 -->
|
||||
<string name="login_success">登录成功</string>
|
||||
<string name="register_success">注册成功</string>
|
||||
<string name="auth_submit_success">实名认证提交成功,请等待审核</string>
|
||||
<string name="card_add_success">银行卡添加成功</string>
|
||||
<string name="card_default_success">默认银行卡设置成功</string>
|
||||
<string name="card_delete_success">银行卡删除成功</string>
|
||||
<string name="recharge_success">充值成功</string>
|
||||
<string name="withdraw_success">提现申请提交成功</string>
|
||||
|
||||
<!-- 失败提示 -->
|
||||
<string name="login_fail">登录失败</string>
|
||||
<string name="register_fail">注册失败</string>
|
||||
<string name="network_error">网络请求失败</string>
|
||||
<string name="auth_submit_fail">实名认证提交失败</string>
|
||||
<string name="card_add_fail">银行卡添加失败</string>
|
||||
<string name="card_default_fail">默认银行卡设置失败</string>
|
||||
<string name="card_delete_fail">银行卡删除失败</string>
|
||||
<string name="recharge_fail">充值失败</string>
|
||||
<string name="withdraw_fail">提现失败</string>
|
||||
</resources>
|
||||
@ -0,0 +1,54 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- 基础应用主题 -->
|
||||
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
|
||||
<item name="colorPrimary">@color/blue_primary</item>
|
||||
<item name="colorPrimaryDark">@color/blue_primary_dark</item>
|
||||
<item name="colorAccent">@color/blue_accent</item>
|
||||
<item name="android:windowBackground">@color/gray_f5</item>
|
||||
</style>
|
||||
|
||||
<!-- 输入框样式 -->
|
||||
<style name="EditTextStyle">
|
||||
<item name="android:layout_width">match_parent</item>
|
||||
<item name="android:layout_height">50dp</item>
|
||||
<item name="android:background">@drawable/shape_edittext</item>
|
||||
<item name="android:paddingHorizontal">15dp</item>
|
||||
<item name="android:textSize">16sp</item>
|
||||
<item name="android:textColor">@color/black</item>
|
||||
<item name="android:textColorHint">@color/gray</item>
|
||||
</style>
|
||||
|
||||
<!-- 按钮样式 -->
|
||||
<style name="ButtonStyle">
|
||||
<item name="android:layout_width">match_parent</item>
|
||||
<item name="android:layout_height">50dp</item>
|
||||
<item name="android:textSize">18sp</item>
|
||||
<item name="android:textColor">@color/white</item>
|
||||
<item name="android:backgroundTint">@color/blue_primary</item>
|
||||
<item name="android:radius">8dp</item>
|
||||
</style>
|
||||
|
||||
<!-- 卡片按钮样式 -->
|
||||
<style name="CardButtonStyle">
|
||||
<item name="android:layout_width">match_parent</item>
|
||||
<item name="android:layout_height">60dp</item>
|
||||
<item name="android:textSize">18sp</item>
|
||||
<item name="android:textColor">@color/black</item>
|
||||
<item name="android:backgroundTint">@color/white</item>
|
||||
<item name="android:gravity">center_vertical</item>
|
||||
<item name="android:paddingHorizontal">15dp</item>
|
||||
<item name="android:drawablePadding">15dp</item>
|
||||
</style>
|
||||
|
||||
<!-- 底部导航按钮样式 -->
|
||||
<style name="BottomNavButtonStyle">
|
||||
<item name="android:layout_width">0dp</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:layout_weight">1</item>
|
||||
<item name="android:button">@null</item>
|
||||
<item name="android:gravity">center</item>
|
||||
<item name="android:textSize">14sp</item>
|
||||
<item name="android:drawableTop">@drawable/selector_nav_home</item>
|
||||
</style>
|
||||
</resources>
|
||||
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<style name="Theme.MobilePaymentApp" parent="Theme.AppCompat.Light.NoActionBar">
|
||||
|
||||
</style>
|
||||
</resources>
|
||||
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Sample backup rules file; uncomment and customize as necessary.
|
||||
See https://developer.android.com/guide/topics/data/autobackup
|
||||
for details.
|
||||
Note: This file is ignored for devices older than API 31
|
||||
See https://developer.android.com/about/versions/12/backup-restore
|
||||
-->
|
||||
<full-backup-content>
|
||||
<!--
|
||||
<include domain="sharedpref" path="."/>
|
||||
<exclude domain="sharedpref" path="device.xml"/>
|
||||
-->
|
||||
</full-backup-content>
|
||||
@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Sample data extraction rules file; uncomment and customize as necessary.
|
||||
See https://developer.android.com/about/versions/12/backup-restore#xml-changes
|
||||
for details.
|
||||
-->
|
||||
<data-extraction-rules>
|
||||
<cloud-backup>
|
||||
<!-- TODO: Use <include> and <exclude> to control what is backed up.
|
||||
<include .../>
|
||||
<exclude .../>
|
||||
-->
|
||||
</cloud-backup>
|
||||
<!--
|
||||
<device-transfer>
|
||||
<include .../>
|
||||
<exclude .../>
|
||||
</device-transfer>
|
||||
-->
|
||||
</data-extraction-rules>
|
||||
Loading…
Reference in new issue