安卓——家庭记账本7

 

 昨天实现了改图表的数据隐藏功能,接下来实现预算设置功能

首先他是一个点击事件,在布局中已经进行设置,在MainActivity中设置点击事件,并定义方法实现预算的设置。

//显示预算设置
    private void showBudgetDialog() {
        BudgetDialog dialog = new BudgetDialog(this);
        dialog.show();
        dialog.setDialogSize();
        dialog.setOnEnsureListener(new BudgetDialog.OnEnsureListener() {
            @Override
            public void onEnsure(float money) {
                //将预算金额心如共享参数,进行存储
                SharedPreferences.Editor editor = preferences.edit();
                editor.putFloat("bmoney",money);
                editor.commit();
                //计算剩余金额
                float outcomeOneMonth = DBManger.getSumMoneyOneMonth(year,month,0);
                float syMoney = money-outcomeOneMonth;
                topbudgetTv.setText("¥"+syMoney);
            }
        });
    }

在实现预算设置之后,接下来实现记录的显示,为避免代码重复,我将本月支出和收入一块显示。

//设置头布局文本内容显示
    private void setTopTvShow() {
        //获取今日支出和收入的总金额,显示在view中
        float incomeOneDay = DBManger.getSumMoneyOneDay(year,month,day,1);
        float outcomeOneDay = DBManger.getSumMoneyOneDay(year,month,day,0);
        String infoOneDay = "今日支出 ¥"+outcomeOneDay+",收入 ¥"+incomeOneDay;
        topConTv.setText(infoOneDay);
        //获取本月收入和支出总金额
        float incomeOneMonth = DBManger.getSumMoneyOneMonth(year,month,1);
        float outcomeOneMonth = DBManger.getSumMoneyOneMonth(year,month,0);
        topInTv.setText("¥"+incomeOneMonth);
        topOutTv.setText("¥"+outcomeOneMonth);
        //设置显示预算剩余
        float bmoney = preferences.getFloat("bmoney",0);
        if(bmoney == 0){
            topbudgetTv.setText("¥ 0");
        }else {
            float syMoney = bmoney-outcomeOneMonth;
            topbudgetTv.setText("¥"+syMoney);
        }
    }

 

至于查看图表这一功能,在后面以一个显示账单详情的功能和其相同,到时候一块实现。

主界面还有一个功能未实现,那就是更多按钮。

 

 点击右下角的按钮会出现如下界面,有四个按键,对应四个功能。首先将布局实现

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="20dp"
    android:background="@color/grey_f3f3f3">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:id="@+id/dialog_more_btn_about"
            style="@style/dialog_more"
            android:drawableTop="@mipmap/it_guanyu"
            android:text="@string/about"/>
        <Button
            android:id="@+id/dialog_more_btn_setting"
            style="@style/dialog_more"
            android:drawableTop="@mipmap/it_shezhi"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:text="@string/setting"/>
        <Button
            android:id="@+id/dialog_more_btn_record"
            style="@style/dialog_more"
            android:drawableTop="@mipmap/it_jilu"
            android:text="@string/history_record"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="15dp"
        android:weightSum="3">
        <Button
            android:id="@+id/dialog_more_btn_info"
            style="@style/dialog_more"
            android:drawableTop="@mipmap/it_xiqing"
            android:text="@string/account_info"
            android:layout_marginRight="20dp"/>
    </LinearLayout>
    <ImageView
        android:id="@+id/dialog_more_iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/ih_error"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="10dp"/>
</LinearLayout>

接下来首先实现关于界面,这个界面显示的是一些应用和作者的相关信息。

 

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@color/white">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="50dp">
        <ImageView
            android:id="@+id/about_iv_back"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:src="@mipmap/it_back"
            android:onClick="onClick"
            android:layout_marginLeft="10dp"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="@string/about"
            android:textSize="18sp"
            android:textStyle="bold"/>
    </RelativeLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:padding="20dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/about_appinfo" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/about_version"
            android:textSize="16sp"
            android:textStyle="bold" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:text="@string/about_1" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:text="@string/about_app"
            android:textSize="16sp"
            android:textStyle="bold" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:text="@string/about_bala" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:text="@string/about_developer"
            android:textSize="16sp"
            android:textStyle="bold" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:text="@string/about_me" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:text="@string/about_loc" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:text="@string/about_email"
            android:textSize="16sp"
            android:textStyle="bold" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:text="@string/about_email1" />
    </LinearLayout>
</LinearLayout>

布局做好之后,在后台中与onClick事件联系起来,使其能够正常显示,这个后台代码中包含了四个功能点击之后如何运行。

package com.example.bookeep.utils;

import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.Display;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageView;

import androidx.annotation.NonNull;

import com.example.bookeep.AboutActivity;
import com.example.bookeep.HistoryActivity;
import com.example.bookeep.MonthChartActivity;
import com.example.bookeep.R;
import com.example.bookeep.SettingActivity;

public class MoreDialog extends Dialog implements View.OnClickListener {
    Button aboutBtn,settingBtn,historyBtn,infoBtn;
    ImageView errorIv;

    public MoreDialog(@NonNull Context context) {
        super(context);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dialog_more);
        aboutBtn = findViewById(R.id.dialog_more_btn_about);
        settingBtn = findViewById(R.id.dialog_more_btn_setting);
        historyBtn = findViewById(R.id.dialog_more_btn_record);
        infoBtn = findViewById(R.id.dialog_more_btn_info);
        errorIv = findViewById(R.id.dialog_more_iv);
        aboutBtn.setOnClickListener(this);
        settingBtn.setOnClickListener(this);
        historyBtn.setOnClickListener(this);
        infoBtn.setOnClickListener(this);
        errorIv.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        Intent intent = new Intent();
        switch (view.getId()) {
            case R.id.dialog_more_btn_about:
                intent.setClass(getContext(), AboutActivity.class);
                getContext().startActivity(intent);
                break;
            case R.id.dialog_more_btn_setting:
                intent.setClass(getContext(), SettingActivity.class);
                getContext().startActivity(intent);
                break;
            case R.id.dialog_more_btn_record:
                intent.setClass(getContext(), HistoryActivity.class);
                getContext().startActivity(intent);
                break;
            case R.id.dialog_more_btn_info:
                intent.setClass(getContext(), MonthChartActivity.class);
                getContext().startActivity(intent);
                break;
            case R.id.dialog_more_iv:
                cancel();
                break;
        }
        cancel();
    }
    //设置dialog尺寸和屏幕尺寸一致
    public void setDialogSize(){
        //获取当前窗口对象
        Window window = getWindow();
        //获取窗口对象参数
        WindowManager.LayoutParams wlp = window.getAttributes();
        //获取屏幕宽度
        Display d = window.getWindowManager().getDefaultDisplay();
        wlp.width=d.getWidth();//对话框窗口为屏幕窗口
        wlp.gravity= Gravity.BOTTOM;
        window.setBackgroundDrawableResource(android.R.color.transparent);
        window.setAttributes(wlp);
    }
}

 做完关于的功能之后,做设置的功能,这里面的具体功能只有一个-删除全部记录。

同样的,首先设置页面布局。

 

 

<?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:background="@color/grey_f3f3f3">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="50dp">
    <ImageView
        android:id="@+id/setting_iv_back"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:src="@mipmap/it_back"
        android:layout_marginLeft="10dp"
        android:onClick="onClick"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/setting"
        android:textStyle="bold"
        android:textSize="18sp"
        android:layout_centerInParent="true"/>
    </RelativeLayout>
    <TextView
        android:id="@+id/setting_tv_clear"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/clearall"
        android:onClick="onClick"
        android:textSize="16sp"
        android:textStyle="bold"
        android:padding="15dp"
        android:background="@color/white"/>
        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="@color/grey_7d7d7d"/>
</LinearLayout>

页面布局做完之后,在SettingActivity中实现数据的操作。

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.DialogInterface;
import android.location.SettingInjectorService;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

import com.example.bookeep.db.DBManger;

public class SettingActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_setting);
    }

    public void onClick(View view){
        switch (view.getId()) {
            case R.id.setting_iv_back:
                finish();
                break;
            case R.id.setting_tv_clear:
                showDeleteDialog();
                break;
        }
    }

    private void showDeleteDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("删除提示")
                .setMessage("你确定要删除所有数据吗?\n注意:删除后将无法恢复,请慎重选择!!")
                .setPositiveButton("取消",null)
                .setNegativeButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        DBManger.deleteAllAccount();
                        Toast.makeText(SettingActivity.this,"删除成功",Toast.LENGTH_SHORT).show();
                    }
                });
        builder.create().show();
    }
}

今天的功能实现就到这了,剩下的两个功能,明天再写,他需要很多小的布局,而且在账单详情中还有一个表格。

 

posted on 2022-02-06 13:32  跨越&尘世  阅读(86)  评论(0编辑  收藏  举报