package com.example.easycash.utils;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Display;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import androidx.annotation.NonNull;
import com.example.easycash.R;
public class BeiZhuDialog extends Dialog implements View.OnClickListener {
EditText et;
Button cancelBtn,ensureBtn;
OnEnsureListener onEnsureListener;
// 设定回调接口的方法
public void setOnEnsureListener(OnEnsureListener onEnsureListener) {
this.onEnsureListener = onEnsureListener;
}
public BeiZhuDialog(@NonNull Context context) {
super(context);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_beizhu);//设置对话框显示布局
et = findViewById(R.id.dialog_beizhu_et);
cancelBtn = findViewById(R.id.dialog_beizhu_btn_cancel);
ensureBtn = findViewById(R.id.dialog_beizhu_btn_ensure);
cancelBtn.setOnClickListener(this);
ensureBtn.setOnClickListener(this);
}
public interface OnEnsureListener{
public void onEnsure();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.dialog_beizhu_btn_cancel:
cancel();
break;
case R.id.dialog_beizhu_btn_ensure:
if (onEnsureListener!=null) {
onEnsureListener.onEnsure();
}
break;
}
}
// 获取输入数据的方法
public String getEditText(){
return et.getText().toString().trim();
}
/* 设置Dialog的尺寸和屏幕尺寸一致*/
public void setDialogSize(){
// 获取当前窗口对象
Window window = getWindow();
// 获取窗口对象的参数
WindowManager.LayoutParams wlp = window.getAttributes();
// 获取屏幕宽度
Display d = window.getWindowManager().getDefaultDisplay();
wlp.width = (int)(d.getWidth()); //对话框窗口为屏幕窗口
wlp.gravity = Gravity.BOTTOM;
window.setBackgroundDrawableResource(android.R.color.transparent);
window.setAttributes(wlp);
handler.sendEmptyMessageDelayed(1,100);
}
Handler handler = new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
//自动弹出软键盘的方法
InputMethodManager inputMethodManager = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.toggleSoftInput(0,InputMethodManager.HIDE_NOT_ALWAYS);
}
};
}
package com.example.easycash.utils;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import androidx.annotation.NonNull;
import com.example.easycash.R;
/*
* 在记录页面弹出时间对话框
* */
public class SelectTimeDialog extends Dialog implements View.OnClickListener {
EditText hourEt,minuteEt;
DatePicker datePicker;
Button ensureBtn,cancelBtn;
public interface OnEnsureListener{
public void onEnsure(String time,int year,int month,int day);
}
OnEnsureListener onEnsureListener;
public void setOnEnsureListener(OnEnsureListener onEnsureListener) {
this.onEnsureListener = onEnsureListener;
}
public SelectTimeDialog(@NonNull Context context) {
super(context);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_time);
hourEt = findViewById(R.id.dialog_time_et_hour);
minuteEt = findViewById(R.id.dialog_time_et_minute);
datePicker = findViewById(R.id.dialog_time_dp);
ensureBtn = findViewById(R.id.dialog_time_btn_ensure);
cancelBtn = findViewById(R.id.dialog_time_btn_cancel);
ensureBtn.setOnClickListener(this); //添加点击监听事件
cancelBtn.setOnClickListener(this);
hideDatePickerHeader();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.dialog_time_btn_cancel:
cancel();
break;
case R.id.dialog_time_btn_ensure:
int year = datePicker.getYear(); //选择年份
int month = datePicker.getMonth()+1;
int dayOfMonth = datePicker.getDayOfMonth();
String monthStr = String.valueOf(month);
if (month<10){
monthStr = "0"+month;
}
String dayStr = String.valueOf(dayOfMonth);
if (dayOfMonth<10){
dayStr="0"+dayOfMonth;
}
// 获取输入的小时和分钟
String hourStr = hourEt.getText().toString();
String minuteStr = minuteEt.getText().toString();
int hour = 0;
if (!TextUtils.isEmpty(hourStr)) {
hour = Integer.parseInt(hourStr);
hour=hour%24;
}
int minute = 0;
if (!TextUtils.isEmpty(minuteStr)) {
minute = Integer.parseInt(minuteStr);
minute=minute%60;
}
hourStr=String.valueOf(hour);
minuteStr=String.valueOf(minute);
if (hour<10){
hourStr="0"+hour;
}
if (minute<10){
minuteStr="0"+minute;
}
String timeFormat = year+"年"+monthStr+"月"+dayStr+"日 "+hourStr+":"+minuteStr;
if (onEnsureListener!=null) {
onEnsureListener.onEnsure(timeFormat,year,month,dayOfMonth);
}
cancel();
break;
}
}
//隐藏DatePicker头布局
private void hideDatePickerHeader(){
ViewGroup rootView = (ViewGroup) datePicker.getChildAt(0);
if (rootView == null) {
return;
}
View headerView = rootView.getChildAt(0);
if (headerView == null) {
return;
}
//5.0+
int headerId = getContext().getResources().getIdentifier("day_picker_selector_layout", "id", "android");
if (headerId == headerView.getId()) {
headerView.setVisibility(View.GONE);
ViewGroup.LayoutParams layoutParamsRoot = rootView.getLayoutParams();
layoutParamsRoot.width = ViewGroup.LayoutParams.WRAP_CONTENT;
rootView.setLayoutParams(layoutParamsRoot);
ViewGroup animator = (ViewGroup) rootView.getChildAt(1);
ViewGroup.LayoutParams layoutParamsAnimator = animator.getLayoutParams();
layoutParamsAnimator.width = ViewGroup.LayoutParams.WRAP_CONTENT;
animator.setLayoutParams(layoutParamsAnimator);
View child = animator.getChildAt(0);
ViewGroup.LayoutParams layoutParamsChild = child.getLayoutParams();
layoutParamsChild.width = ViewGroup.LayoutParams.WRAP_CONTENT;
child.setLayoutParams(layoutParamsChild);
return;
}
// 6.0+
headerId = getContext().getResources().getIdentifier("date_picker_header","id","android");
if (headerId == headerView.getId()) {
headerView.setVisibility(View.GONE);
}
}
}
package com.example.easycash.frag_record;
import android.inputmethodservice.KeyboardView;
import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.easycash.R;
import com.example.easycash.db.AccountBean;
import com.example.easycash.db.DBManager;
import com.example.easycash.db.TypeBean;
import com.example.easycash.utils.BeiZhuDialog;
import com.example.easycash.utils.KeyBoardUtils;
import com.example.easycash.utils.SelectTimeDialog;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
* 记录页面当中的支出模块
*/
public abstract class BaseRecordFragment extends Fragment implements View.OnClickListener {
KeyboardView keyboardView;
EditText moneyEt;
ImageView typeIv;
TextView typeTv,beizhuTv,timeTv;
GridView typeGv;
List<TypeBean>typeList;
TypeBaseAdapter adapter;
AccountBean accountBean; //将需要插入到记账本当中的数据保存成对象的形式
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
accountBean = new AccountBean(); //创建对象
accountBean.setTypename("其他");
accountBean.setsImageId(R.mipmap.ic_qita_fs);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_outcome, container, false);
initView(view);
setInitTime();
//给GridView填充数据的方法
loadDataToGV();
setGVListener(); //设置GridView每一项的点击事件
return view;
}
/* 获取当前时间,显示在timeTv上*/
private void setInitTime() {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
String time = sdf.format(date);
timeTv.setText(time);
accountBean.setTime(time);
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH)+1;
int day = calendar.get(Calendar.DAY_OF_MONTH);
accountBean.setYear(year);
accountBean.setMonth(month);
accountBean.setDay(day);
}
/* 设置GridView每一项的点击事件*/
private void setGVListener() {
typeGv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
adapter.selectPos = position;
adapter.notifyDataSetInvalidated(); //提示绘制发生变化了
TypeBean typeBean = typeList.get(position);
String typename = typeBean.getTypename();
typeTv.setText(typename);
accountBean.setTypename(typename);
int simageId = typeBean.getSimageId();
typeIv.setImageResource(simageId);
accountBean.setsImageId(simageId);
}
});
}
/* 给GridView填出数据的方法*/
public void loadDataToGV() {
typeList = new ArrayList<>();
adapter = new TypeBaseAdapter(getContext(), typeList);
typeGv.setAdapter(adapter);
}
private void initView(View view) {
keyboardView = view.findViewById(R.id.frag_record_keyboard);
moneyEt = view.findViewById(R.id.frag_record_et_money);
typeIv = view.findViewById(R.id.frag_record_iv);
typeGv = view.findViewById(R.id.frag_record_gv);
typeTv = view.findViewById(R.id.frag_record_tv_type);
beizhuTv = view.findViewById(R.id.frag_record_tv_beizhu);
timeTv = view.findViewById(R.id.frag_record_tv_time);
beizhuTv.setOnClickListener(this);
timeTv.setOnClickListener(this);
//让自定义软键盘显示出来
KeyBoardUtils boardUtils = new KeyBoardUtils(keyboardView, moneyEt);
boardUtils.showKeyboard();
//设置接口,监听确定按钮按钮被点击了
boardUtils.setOnEnsureListener(new KeyBoardUtils.OnEnsureListener() {
@Override
public void onEnsure() {
//获取输入钱数
String moneyStr = moneyEt.getText().toString();
if (TextUtils.isEmpty(moneyStr)||moneyStr.equals("0")) {
getActivity().finish();
return;
}
float money = Float.parseFloat(moneyStr);
accountBean.setMoney(money);
//获取记录的信息,保存在数据库当中
saveAccountToDB();
// 返回上一级页面
getActivity().finish();
}
});
}
/* 让子类一定要重写这个方法*/
public abstract void saveAccountToDB();
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.frag_record_tv_time:
showTimeDialog();
break;
case R.id.frag_record_tv_beizhu:
showBZDialog();
break;
}
}
/* 弹出显示时间的对话框*/
private void showTimeDialog() {
SelectTimeDialog dialog = new SelectTimeDialog(getContext());
dialog.show();
//设定确定按钮被点击了的监听器
dialog.setOnEnsureListener(new SelectTimeDialog.OnEnsureListener() {
@Override
public void onEnsure(String time, int year, int month, int day) {
timeTv.setText(time);
accountBean.setTime(time);
accountBean.setYear(year);
accountBean.setMonth(month);
accountBean.setDay(day);
}
});
}
/* 弹出备注对话框*/
public void showBZDialog(){
final BeiZhuDialog dialog = new BeiZhuDialog(getContext());
dialog.show();
dialog.setDialogSize();
dialog.setOnEnsureListener(new BeiZhuDialog.OnEnsureListener() {
@Override
public void onEnsure() {
String msg = dialog.getEditText();
if (!TextUtils.isEmpty(msg)) {
beizhuTv.setText(msg);
accountBean.setBeizhu(msg);
}
dialog.cancel();
}
});
}
}