记账APP:小哈记账4——记账首页页面的制作(1)

news2024/12/21 15:48:05

项目介绍:

        小哈记账是一款用于记账APP,基于Android Studio开发工具,采用Java语言进行开发,同时使用litepal和阿里云数据库进行数据的增删查改,以图标的形式在App的界面上显示。App可以清晰显示收支情况,并以图表的形式展示每月收支情况;同时可以记录消费用途,项目能够精确到每一个款项的收入支出时间、结余并且可以设置每月的预算。超出预算提醒,并且有每周,每月及每年的账单统计,较为清晰明确帮助用户分析自己当前的支出和收入。同时拥有用户登录、注册、修改头像等功能。

        本项目中使用到的技术:LitePal数据库,阿里云RDS数据库,MPAndroidChart图表库,部分自定义控件等。

        支持Android5.0以上版本。

        本文将介绍小哈记账的首页页面制作。

 效果图:

 

源代码:

        首先,让我们介绍一下首页页面的模块组成。页面最顶部是一个卡片,其中展示了当前月份以及本月的收入、支出和结余情况。接下来,我们可以看到一个本月支出预算的模块,其中展示了当前支出的金额以及占总预算的百分比。第三部分是本月收支趋势图,其中展示了当前月份每日的收入和支出情况。最后,我们还可以看到今日、本周和本年的收入和支出情况,这一部分的信息也非常有用。

顶部卡片的制作(本月收支、结余)

第一步:本月统计样式的编写main.xml

<!--本月统计-->
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="140sp"
    android:layout_marginLeft="15sp"
    android:layout_marginTop="12sp"
    android:layout_marginRight="15sp"
    android:background="@drawable/acc_myacc"
    android:orientation="vertical">

    <TextView
        android:id="@+id/main_month"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="25sp"
        android:layout_marginTop="10sp"
        android:text="20xx年x月"
        android:textColor="@color/white"
        android:textSize="16sp"
        tools:ignore="HardcodedText" />
    <!--总支出-->
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="25sp"
        android:layout_marginTop="3sp"
        android:orientation="vertical">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="总支出"
            android:textColor="@color/white"
            android:textSize="12sp"
            tools:ignore="HardcodedText" />

        <TextView
            android:id="@+id/main_zc_money"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="0.00"
            android:textColor="@color/white"
            android:textSize="24sp"
            tools:ignore="HardcodedText" />
    </LinearLayout>

    <!--总收入,结余-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="25sp"
        android:layout_marginTop="10sp"
        android:layout_marginRight="25sp"
        android:orientation="horizontal"
        tools:ignore="DisableBaselineAlignment">

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:orientation="vertical">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="总收入"
                android:textColor="@color/white"
                android:textSize="12sp"
                tools:ignore="HardcodedText" />

            <TextView
                android:id="@+id/main_sr_money"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="0.00"
                android:textColor="@color/white"
                android:textSize="20sp"
                tools:ignore="HardcodedText" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="40sp"
            android:layout_weight="1"
            android:orientation="vertical">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="结余"
                android:textColor="@color/white"
                android:textSize="12sp"
                tools:ignore="HardcodedText" />

            <TextView
                android:id="@+id/main_jy_money"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="0.00"
                android:textColor="@color/white"
                android:textSize="20sp"
                tools:ignore="HardcodedText" />
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

背景图片为Adobe Illustrator制作。其余部分为LinearLayout和TextView组成,比较简单。

第二步:功能实现,编写MainActivity.java文件

该部分比较简单,从数据库获取数据,求和赋值给TextView即可。

public int year = MyUtils.initYear();
public int month = MyUtils.initMonth();
public int day = MyUtils.initDay();

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

    context = this;
    mActivity = new WeakReference<Activity>(this);

    initView();//初始化控件
    main_month.setText(year+"年"+month+"月");//为卡片的当前月份赋值
}

@Override
protected void onStart() {
    super.onStart();
    if(is_add || is_delete){
        progressBarLayout.setVisibility(View.VISIBLE);
        main_layout.setVisibility(View.GONE);
        Message msg = new Message();
        sum_ThisMonth(month);//更新数据
        setThisDate();//添加当前数据
        handlerProgress.sendEmptyMessageDelayed(1,2000);
    }
}
/**
    * 求出数据和
    * @param mmonth 本月月份
    */
private void sum_ThisMonth(int mmonth){
    zc_week_money = 0;
    zc_day_money = 0;
    zc_year_money = 0;
    sr_week_money = 0;
    sr_day_money = 0;
    sr_year_money = 0;
    used_money = 0;
    sr_money = 0;
    jy_money = 0;

    lineChartMoney_zc.clear();
    lineChartMoney_zc = new ArrayList<Double>(Collections.<Double>nCopies(31, 0.0));
    lineChartMoney_sr.clear();
    lineChartMoney_sr = new ArrayList<Double>(Collections.<Double>nCopies(31, 0.0));

    List<AccDetails> accDetails = LitePal.where("user_id = ?", String.valueOf(LoginActivity.mid))
            .find(AccDetails.class);
    for(AccDetails accDetails1 : accDetails){
        String[] date = accDetails1.getDet_date().split("-");
        /*获取本年收支*/
        if(Integer.valueOf(date[0]) == year && accDetails1.getDet_type_int() == 0){
            if(MyUtils.getTypeInt(accDetails1.getDet_type()) != -1){
                zc_year_money += accDetails1.getDet_money();
                /*获取本月支出*/
                if(Integer.valueOf(date[1]) == mmonth){
                    used_money += accDetails1.getDet_money();
                    lineChartMoney_zc.set(Integer.valueOf(date[2])-1, accDetails1.getDet_money()+lineChartMoney_zc.get(Integer.valueOf(date[2])-1));
                    if(Integer.valueOf(date[2]) == day){
                        zc_day_money += accDetails1.getDet_money();
                    }
                }
                /*获取本周支出*/
                for(int i = 0; i<7;i++){
                    if(String.valueOf(Integer.valueOf(date[1])+"-"+Integer.valueOf(date[2])).equals(MyUtils.weekDay.get(i))){
                        zc_week_money += accDetails1.getDet_money();
                    }
                }
            }
        } else if(Integer.valueOf(date[0]) == year && accDetails1.getDet_type_int() == 1){
            if(MyUtils.getTypeIncomeInt(accDetails1.getDet_type()) != -1){
                sr_year_money += accDetails1.getDet_money();
                /*获取本月收入*/
                if(Integer.valueOf(date[1]) == mmonth){
                    sr_money += accDetails1.getDet_money();
                    lineChartMoney_sr.set(Integer.valueOf(date[2])-1, accDetails1.getDet_money()+lineChartMoney_sr.get(Integer.valueOf(date[2])-1));
                    if(Integer.valueOf(date[2]) == day){
                        sr_day_money += accDetails1.getDet_money();
                    }
                }
                /*获取本周收入*/
                for(int i = 0; i<7;i++){
                    if(String.valueOf(Integer.valueOf(date[1])+"-"+Integer.valueOf(date[2])).equals(MyUtils.weekDay.get(i))){
                        sr_week_money += accDetails1.getDet_money();
                    }
                }
            }
        }
    }
    jy_money = sr_money - used_money;//本月结余
    if(ys_money != -1){

        used_per = (int) Math.round(used_money / ys_money*100);//四舍五入取整
        if(ys_money > used_money){
            ky_money = ys_money - used_money;
        } else {
            ky_money = used_money - ys_money;
        }
    }
    if(used_money == 0){
        ys_used_text.setText("已用 0.00");
        main_zc_money.setText("0.00");
    } else {
        ys_used_text.setText("已用 "+df.format(used_money));
        main_zc_money.setText(df.format(used_money));
    }
    if(sr_money == 0){
        main_sr_money.setText("0.00");
    } else {
        main_sr_money.setText(df.format(sr_money));
    }
    if(jy_money == 0){
        main_jy_money.setText("0.00");
    } else {
        main_jy_money.setText(df.format(jy_money));
    }
    if(ys_money != -1){
        ys_text.setText("总支出预算 "+df.format(ys_money));
        ys_used_per.setText(used_per+"%");
        if(ky_money == 0){
            ys_ky_text.setText("可用 0.00");
        } else {
            if(used_per >= 80 && used_per <= 100){
                ys_ky_text.setText("可用 "+df.format(ky_money));
                ys_ky_text.setTextColor(Color.parseColor("#e8b004"));
                ys_used_per.setTextColor(Color.parseColor("#e8b004"));
            } else if(used_per > 100){
                ys_ky_text.setText("已超出预算 "+df.format(ky_money));
                ys_ky_text.setTextColor(Color.parseColor("#ee3f4d"));
                ys_used_per.setTextColor(Color.parseColor("#ee3f4d"));
            } else {
                ys_ky_text.setText("可用 "+df.format(ky_money));
                ys_ky_text.setTextColor(Color.parseColor("#666666"));
                ys_used_per.setTextColor(Color.parseColor("#666666"));
            }
        }
    }

}

预算功能的实现

首先需要自定义一个进度条控件。

自定义进度条java文件:

package com.example.xiaohaaccounting.myView;

import android.animation.ValueAnimator;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.Typeface;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.animation.DecelerateInterpolator;

import com.example.xiaohaaccounting.R;


public class CircleProgressBar extends View {
   private Context mContext;
   private Paint mPaint;
   private int mProgress = 0;
   private static int MAX_PROGRESS = 100;
   /**
    * 弧度
    */
   private int mAngle;
   /**
    * 中间的文字
    */
   private String mText;
   /**
    * 外圆颜色
    */
   private int outRoundColor;
   /**
    * 内圆的颜色
    */
   private int inRoundColor;
   /**
    * 线的宽度
    */
   private int roundWidth;
   private int style;
   /**
    * 字体颜色
    */
   private int textColor;
   /**
    * 字体大小
    */
   private float textSize;
   /**
    * 字体是否加粗
    */
   private boolean isBold;

   /**
    * 进度条颜色
    */
   private int progressBarColor;

   public CircleProgressBar(Context context) {
      this(context, null);
   }

   public CircleProgressBar(Context context, AttributeSet attrs) {
      this(context, attrs, 0);
   }

   public CircleProgressBar(Context context, AttributeSet attrs, int defStyleAttr) {
      super(context, attrs, defStyleAttr);
      mContext = context;
      init(attrs);
   }

   @TargetApi(21)
   public CircleProgressBar(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
      super(context, attrs, defStyleAttr, defStyleRes);
      mContext = context;
      init(attrs);
   }

   /**
    * 解析自定义属性
    *
    * @param attrs
    */
   public void init(AttributeSet attrs) {
      mPaint = new Paint();
      TypedArray typedArray = mContext.obtainStyledAttributes(attrs, R.styleable.CircleProgressBar);
      outRoundColor = typedArray.getColor(R.styleable.CircleProgressBar_outCircleColor, getResources().getColor(R.color.grey_e));
      inRoundColor = typedArray.getColor(R.styleable.CircleProgressBar_inCircleColor, getResources().getColor(R.color.white));
      progressBarColor = typedArray.getColor(R.styleable.CircleProgressBar_progressColor, getResources().getColor(R.color.xiaoha));
      isBold = typedArray.getBoolean(R.styleable.CircleProgressBar_textBold, false);
      textColor = typedArray.getColor(R.styleable.CircleProgressBar_textColor, Color.BLACK);
      roundWidth = typedArray.getDimensionPixelOffset(R.styleable.CircleProgressBar_lineWidth, 20);
      typedArray.recycle();
   }

   @Override
   protected void onDraw(Canvas canvas) {
      /**
       * 画外圆
       */
      super.onDraw(canvas);
      int center = getWidth() / 2;        //圆心
      int radius = (center - roundWidth / 2);  //半径
      mPaint.setColor(outRoundColor);      //外圆颜色
      mPaint.setStrokeWidth(roundWidth);     //线的宽度
      mPaint.setStyle(Paint.Style.STROKE);    //空心圆
      mPaint.setAntiAlias(true);        //消除锯齿
      canvas.drawCircle(center, center, radius, mPaint);
      //内圆
      mPaint.setColor(inRoundColor);
      radius = radius - roundWidth;
      canvas.drawCircle(center, center, radius, mPaint);

      //画进度是一个弧线
      mPaint.setColor(progressBarColor);
      RectF rectF = new RectF(center - radius, center - radius, center + radius, center + radius);//圆弧范围的外接矩形
      canvas.drawArc(rectF, -90, mAngle, false, mPaint);
      canvas.save(); //平移画布之前保存之前画的

      //画进度终点的小球,旋转画布的方式实现
      mPaint.setStyle(Paint.Style.FILL);
      //将画布坐标原点移动至圆心
      canvas.translate(center, center);
      //旋转和进度相同的角度,因为进度是从-90度开始的所以-90度
      canvas.rotate(mAngle - 90);
      //同理从圆心出发直接将原点平移至要画小球的位置
      canvas.translate(radius, 0);
      canvas.drawCircle(0, 0, roundWidth, mPaint);
      //画完之后恢复画布坐标
      canvas.restore();

      //画文字将坐标平移至圆心
      canvas.translate(center, center);
      mPaint.setStrokeWidth(0);
      mPaint.setColor(textColor);
      if (isBold) {
         //字体加粗
         mPaint.setTypeface(Typeface.DEFAULT_BOLD);
      }
      if (TextUtils.isEmpty(mText)) {
         mText = mProgress + "%";
      }
      //动态设置文字长为圆半径,计算字体大小
      float textLength = mText.length();
      textSize = radius / textLength*2;
      mPaint.setTextSize(textSize);
      //将文字画到中间
      float textWidth = mPaint.measureText(mText);
      canvas.drawText(mText, -textWidth / 2, textSize / 2, mPaint);
   }


   public int getmProgress() {
      return mProgress;
   }

   /**
    * 设置进度
    *
    * @return
    */
   public void setmProgress(int p) {
      if (p > MAX_PROGRESS) {
         mProgress = MAX_PROGRESS;
         mAngle = 360;
      } else {
         mProgress = p;
         mAngle = 360 * p / MAX_PROGRESS;
      }
   }


   public String getmText() {
      return mText;
   }

   /**
    * 设置文本
    *
    * @param mText
    */
   public void setmText(String mText) {
      this.mText = mText;
   }

   /**
    * 设置带动画的进度
    * @param p
    */
   public void setAnimProgress(int p) {
      if (p > MAX_PROGRESS) {
         mProgress = MAX_PROGRESS;
      } else {
         mProgress = p;
      }
      //设置属性动画
      ValueAnimator valueAnimator = new ValueAnimator().ofInt(0, p);
      //动画从快到慢
      valueAnimator.setInterpolator(new DecelerateInterpolator());
      valueAnimator.setDuration(1200);
      //监听值的变化
      valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
         @Override
         public void onAnimationUpdate(ValueAnimator animation) {
            int currentV = (Integer) animation.getAnimatedValue();
            Log.e("fwc", "current" + currentV);
            mAngle = 360 * currentV / MAX_PROGRESS;
            mText = currentV + "%";
            invalidate();
         }
      });
      valueAnimator.start();
   }
}

arrts.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="CircleProgressBar">
        <attr name="outCircleColor" format="color"></attr>
        <attr name="inCircleColor" format="color"></attr>
        <attr name="progressColor" format="color"></attr>
        <attr name="textColor" format="color"></attr>
        <attr name="textBold" format="boolean"></attr>
        <attr name="lineWidth" format="dimension"></attr>
    </declare-styleable>
</resources>

整体样式xml如下

<!--本月预算-->
<LinearLayout
    android:id="@+id/ys_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="15sp"
    android:layout_marginTop="165sp"
    android:layout_marginRight="15sp"
    android:background="@drawable/bg_white_radius_10"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingStart="10sp"
        android:text="本月支出预算"
        android:textColor="@color/grey_3"
        android:textSize="18sp"
        tools:ignore="HardcodedText,RtlSymmetry" />

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10sp"
        android:orientation="horizontal">
        <!--支出进度条-->
        <com.example.xiaohaaccounting.myView.CircleProgressBar
            android:id="@+id/progress_bar_ys"
            android:layout_width="50sp"
            android:layout_height="50sp"
            android:layout_centerVertical="true"
            android:layout_marginStart="10sp"
            app:inCircleColor="@color/white"
            app:lineWidth="4sp"
            app:outCircleColor="@color/grey_e"
            app:progressColor="@color/xiaoha"
            app:textBold="true"
            app:textColor="@color/xiaoha" />

        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="50sp"
            android:layout_marginStart="50sp"
            android:orientation="vertical">

            <TextView
                android:id="@+id/ys_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingStart="20sp"
                android:text="未设置预算"
                android:textColor="@color/grey_3"
                android:textSize="16sp"
                tools:ignore="HardcodedText,RtlSymmetry" />

            <TextView
                android:id="@+id/ys_ky_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_marginBottom="2sp"
                android:paddingStart="20sp"
                android:text="点击设置预算"
                android:textColor="@color/grey_6"
                android:textSize="12sp"
                tools:ignore="HardcodedText,RtlSymmetry" />
        </RelativeLayout>

        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="50sp"
            android:layout_alignParentEnd="true"
            android:layout_marginEnd="10sp"
            android:orientation="vertical"
            tools:ignore="RelativeOverlap">

            <TextView
                android:id="@+id/ys_used_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentEnd="true"
                android:text="已用 "
                android:textColor="@color/grey_3"
                android:textSize="14sp"
                tools:ignore="HardcodedText" />

            <TextView
                android:id="@+id/ys_used_per"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentEnd="true"
                android:layout_alignParentBottom="true"
                android:layout_marginBottom="2sp"
                android:text=""
                android:textColor="@color/grey_6"
                android:textSize="12sp" />
        </RelativeLayout>
    </RelativeLayout>

</LinearLayout>

设置预算功能

/*设置预算*/
ys_layout.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        //点击弹出对话框
        final EditDialog editDialog = new EditDialog(MainActivity.this);
        editDialog.setTitle("请输入每月预算");
        editDialog.setYesOnclickListener("确定", new EditDialog.onYesOnclickListener() {
            @Override
            public void onYesClick(String ys) {
                if (TextUtils.isEmpty(ys)) {
                    Toast.makeText(MainActivity.this, "请输入每月预算", Toast.LENGTH_SHORT).show();
                } else if(Double.parseDouble(ys) <= 0){
                    Toast.makeText(MainActivity.this, "预算必须大于0", Toast.LENGTH_SHORT).show();
                } else {
                    Message msg = new Message();
                    ys_text.setText(ys);
                    ys_money = Double.parseDouble(ys);
                    save_User(ys_money);
                    sum_ThisMonth(month);
                    handlerProgress.sendEmptyMessageDelayed(1,0);
                    editDialog.dismiss();
            /*//让软键盘隐藏
            InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(getView().getApplicationWindowToken(), 0);*/
                }
            }
        });
        editDialog.setNoOnclickListener("取消", new EditDialog.onNoOnclickListener() {
            @Override
            public void onNoClick() {
                editDialog.dismiss();
            }
        });
        editDialog.show();
    }
});

今日、本周、本年模块

本部分也比较简单,和第一部分思路相同,直接上代码

xml代码

<!--收支情况-->
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="230sp"
    android:layout_marginLeft="15sp"
    android:layout_marginTop="546sp"
    android:layout_marginRight="15sp"
    android:background="@drawable/bg_white_radius_10"
    android:orientation="vertical">
    <!--今日-->
    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="68sp"
        android:layout_gravity="center"
        android:layout_marginStart="10sp"
        android:layout_marginTop="5sp">

        <ImageView
            android:layout_width="36sp"
            android:layout_height="36sp"
            android:layout_centerVertical="true"
            android:src="@drawable/main_day"
            tools:ignore="ContentDescription" />
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="70sp"
            android:layout_marginStart="46sp"
            android:orientation="vertical">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="10sp"
                android:text="今日"
                android:textColor="@color/grey_3"
                android:textSize="16sp"
                tools:ignore="HardcodedText" />

            <TextView
                android:id="@+id/this_day"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="10sp"
                android:text="20xx年xx月xx日"
                android:textColor="@color/grey_6"
                android:textSize="12sp"
                tools:ignore="HardcodedText" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="70sp"
            android:layout_alignParentEnd="true"
            android:layout_marginEnd="15sp"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="10sp"
                android:orientation="horizontal">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="总收入"
                    android:textColor="@color/grey_6"
                    android:textSize="12sp"
                    tools:ignore="HardcodedText" />

                <TextView
                    android:id="@+id/day_sr"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:layout_marginStart="6sp"
                    android:text="0.00"
                    android:textColor="@color/chahua_red"
                    android:textSize="16sp"
                    tools:ignore="HardcodedText" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="6sp"
                android:orientation="horizontal">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="总支出"
                    android:textColor="@color/grey_6"
                    android:textSize="12sp"
                    tools:ignore="HardcodedText" />

                <TextView
                    android:id="@+id/day_zc"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:layout_marginStart="6sp"
                    android:text="0.00"
                    android:textColor="@color/cui_green"
                    android:textSize="16sp"
                    tools:ignore="HardcodedText" />
            </LinearLayout>
        </LinearLayout>
    </RelativeLayout>
    <View
        android:layout_width="match_parent"
        android:layout_height="1sp"
        android:layout_marginLeft="10sp"
        android:layout_marginRight="10sp"
        android:background="@color/grey_9"
        tools:ignore="SmallSp" />
    <!--本周-->
    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="68sp"
        android:layout_gravity="center"
        android:layout_marginStart="10sp"
        android:layout_marginTop="5sp">

        <ImageView
            android:layout_width="36sp"
            android:layout_height="36sp"
            android:layout_centerVertical="true"
            android:src="@drawable/main_week"
            tools:ignore="ContentDescription" />

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="70sp"
            android:layout_marginStart="46sp"
            android:orientation="vertical">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="10sp"
                android:text="本周"
                android:textColor="@color/grey_3"
                android:textSize="16sp"
                tools:ignore="HardcodedText" />

            <TextView
                android:id="@+id/this_week"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="10sp"
                android:text="xx月xx日-xx月xx日"
                android:textColor="@color/grey_6"
                android:textSize="12sp"
                tools:ignore="HardcodedText" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="70sp"
            android:layout_alignParentEnd="true"
            android:layout_marginEnd="15sp"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="10sp"
                android:orientation="horizontal">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="总收入"
                    android:textColor="@color/grey_6"
                    android:textSize="12sp"
                    tools:ignore="HardcodedText" />

                <TextView
                    android:id="@+id/week_sr"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:layout_marginStart="6sp"
                    android:text="0.00"
                    android:textColor="@color/chahua_red"
                    android:textSize="16sp"
                    tools:ignore="HardcodedText" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="6sp"
                android:orientation="horizontal">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="总支出"
                    android:textColor="@color/grey_6"
                    android:textSize="12sp"
                    tools:ignore="HardcodedText" />

                <TextView
                    android:id="@+id/week_zc"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:layout_marginStart="6sp"
                    android:text="0.00"
                    android:textColor="@color/cui_green"
                    android:textSize="16sp"
                    tools:ignore="HardcodedText" />
            </LinearLayout>
        </LinearLayout>
    </RelativeLayout>
    <View
        android:layout_width="match_parent"
        android:layout_height="1sp"
        android:layout_marginLeft="10sp"
        android:layout_marginRight="10sp"
        android:background="@color/grey_9"
        tools:ignore="SmallSp" />
    <!--本年-->
    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="68sp"
        android:layout_gravity="center"
        android:layout_marginStart="10sp"
        android:layout_marginTop="5sp">

        <ImageView
            android:layout_width="36sp"
            android:layout_height="36sp"
            android:layout_centerVertical="true"
            android:src="@drawable/main_year"
            tools:ignore="ContentDescription" />

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="70sp"
            android:layout_marginStart="46sp"
            android:orientation="vertical">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="10sp"
                android:text="本年"
                android:textColor="@color/grey_3"
                android:textSize="16sp"
                tools:ignore="HardcodedText" />

            <TextView
                android:id="@+id/this_year"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="10sp"
                android:text="20xx年"
                android:textColor="@color/grey_6"
                android:textSize="12sp"
                tools:ignore="HardcodedText" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="70sp"
            android:layout_alignParentEnd="true"
            android:layout_marginEnd="15sp"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="10sp"
                android:orientation="horizontal">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="总收入"
                    android:textColor="@color/grey_6"
                    android:textSize="12sp"
                    tools:ignore="HardcodedText" />

                <TextView
                    android:id="@+id/year_sr"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:layout_marginLeft="6sp"
                    android:text="0.00"
                    android:textColor="@color/chahua_red"
                    android:textSize="16sp"
                    tools:ignore="HardcodedText,RtlHardcoded,TooManyViews" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="6sp"
                android:orientation="horizontal">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="总支出"
                    android:textColor="@color/grey_6"
                    android:textSize="12sp"
                    tools:ignore="HardcodedText" />

                <TextView
                    android:id="@+id/year_zc"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:layout_marginStart="6sp"
                    android:text="0.00"
                    android:textColor="@color/cui_green"
                    android:textSize="16sp"
                    tools:ignore="HardcodedText" />
            </LinearLayout>
        </LinearLayout>
    </RelativeLayout>
</LinearLayout>

java代码同第一部分。

        本文介绍了首页的三个模块的代码,下一篇(记账APP:小哈记账5——记账首页页面的制作(2))将介绍首页中的收支趋势图的制作,使用MPAndroidChat技术实现。首页完整代码也将在下一篇文章中给出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/699090.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2. MongoDB分片集群架构实战-----MongoDB分片集群和多文档事务详解

分布式技术MongoDB 1. 分片简介2. MongoDB分片集群架构3. 环境搭建3.1 分片集群搭建3.2 使用mtools搭建分片集群 4 使用分片集群5. 分片策略5.1 什么是chunk5.2 分片算法5.3 哈希分片5.4 分片标签5.4 分片键(ShardKey)的选择5.5 分片键(ShardKey)的约束 6. 数据均衡6.1 均衡的方…

【JAVAWEB】JavaScript基础知识

目录 1.认识JavaScript 1.1JavaScript是什么 1.2JavaScript和html,css的关系 1.3JavaScript的组成 2.JavaScript的前置知识 2.1JavaScript的书写形式 行内式 内嵌式 外部式 2.2注释 2.3输入输出 3.JavaScript的语法知识 3.1变量的使用 创建变量 使用变量 3.2动态…

echarts柱状图查找数据

controller层&#xff1a; /*** 查询最近一周每天的行为识别总人数* return*/ApiOperation("查询最近一周每天的行为识别总人数") // RequiresPermissions("zhgd:aialarmdata:selectShu")GetMapping("/selectShu")public List<List> se…

UE5 Motion Warping功能学习

MotionWarping&#xff08;运动扭曲&#xff09;可对角色根运动进行修改&#xff0c;从而让角色根运动动画结束时准确停在某一点&#xff0c;如图&#xff1a; 此外UE5还提供移动步幅、转向的Warping功能&#xff08;防滑步&#xff09;&#xff0c;之前写过一个简单的介绍可…

9.2 IO多路复用select函数

目录 I/O多路复用模型 多路复用的实现方式 select函数 fd_set结构体 I/O多路复用模型 多路复用的实现方式 select函数 int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout);poll函数 int poll(struct pollfd *fds, nfds_…

Git 安装 配置初始化

1. Git 下载 1.1 git 官网下载 Git 官网 https://git-scm.com/download/win 根据自己的电脑系统下载对应的版本 1.2 百度网盘下载 百度网盘&#xff1a;https://pan.baidu.com/s/17Thcov7VKfIc_hINcQimrw 提取码&#xff1a;13142. 安装git 2.1 双击安装包 2.2 点击next …

新应用爆发,开启5G的鱼龙之变

鱼龙变化&#xff0c;是中国自古以来就有的吉祥寓意与美好期盼。早在商代出土的玉雕中&#xff0c;就出现了由鱼化为龙的形象。晋代民间的歌谣中&#xff0c;已经有了“东海大鱼化为龙”的说法。在此之后&#xff0c;“鱼跃龙门”成为了考试中第的代名词&#xff0c;也被引申为…

台灯选用什么类型好?分享好用的护眼台灯

建议是选择护眼台灯比较好一点&#xff0c;不管是大人还是孩子使用&#xff0c;都会比普通台灯护眼一些。主要是普通台灯在交流电状态下正常工作的时候&#xff0c;每秒钟会发生闪烁100次左右&#xff0c;这样的频率人眼是看不出来的。但是在台灯下时间一长&#xff0c;极其容易…

sonarqube安装指南

sonarQube安装的指导文章说起来有很多&#xff0c;其他步骤本文不再赘述&#xff0c;可以参考其他文章。 在这里讲一下对JDK版本的事情。 SonarQube Server对系统的JDK、和研发写代码所使用的JDK版本有要求&#xff0c;要求大版本统一&#xff0c;比如大家基本上都在用JDK8&a…

景联文科技高质量教育GPT题库:引领教育行业的技术革命

ChatGPT拉开了大语言题库和生成式AI产业蓬勃发展的序幕。全世界教育科技公司扎堆接入GPT-4&#xff0c;涵盖美国、欧洲、日韩、中东和北非地区等。大语言题库在教育领域中势必将获得更加广阔的应用前景和丰富的应用场景。 杭州景联文科技是AI基础数据行业的头部企业&#xff0c…

实用技巧之拼接

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于拼接的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.什么时候会用到拼接 二.使用什么方式进…

React V6实现父子组件双向绑定传值

功能背景 之前在写vue的时候用到一个很好用的东西&#xff0c;比如控制一个dialog的显示隐藏&#xff0c;那么可以由父组件控制它显示&#xff0c;子组件&#xff08;即这个dialog&#xff09;自己可以关闭自己&#xff0c;那么他们之间只维护一个visible的状态&#xff0c;就需…

预约时间列表 带标签 上午下午 今天明天

/*** 时间列表* $interval 间隔X分钟* */ function timeList($day7,$time108:00,$time222:00,$interval60){$date_list [];//日期列表$today_date strtotime(date(Y-m-d,time()));for($i0;$i<$day;$i){$date_title date(Y-m-d,$today_date($i*86400));$buff array();for…

win7下如何开启远程桌面服务?让别人连接的方法

当某台计算机开启了远程桌面连接功能后就可以在网络的另一端控制这台计算机了&#xff0c;通过远程桌面功能可以实时地操作这台计算机&#xff0c;在上面安装软件&#xff0c;运行程序&#xff0c;所有的一切都好像是直接在该计算机上操作一样。这就是远程桌面的最大功能&#…

基于Python所写的图片批量处理器设计

点击以下链接获取源码资源&#xff1a; https://download.csdn.net/download/qq_64505944/87964231 《图片批量处理器》程序使用说明 在PyCharm中运行《图片批量处理器》即可进入如图1所示的系统主界面。在该界面中&#xff0c;通过顶部的菜单栏可以选择所要进行的操作。 图…

2023上半年软考系统分析师科目一整理-06

2023上半年软考系统分析师科目一整理-06 在数据库设计的需求分析、概念结构设计、逻辑结构设计和物理结构设计的四个阶段中&#xff0c;基本E-R图是( D )。 A.需求分析阶段形成的文档&#xff0c;并作为概念结构设计阶段的设计依据 B.逻辑结构设计阶段形成的文档&#xff0c;…

python获取目标主机的MAC地址

下载插件&#xff1a;WinPcap Download 下载后直接安装&#xff08;虽然已停止更新&#xff0c;但还能正常使用&#xff09; python代码&#xff1a;安装 scapy 包 from scapy.all import Ether, ARP, srpdef get_mac_address(ip):# 创建一个ARP请求数据包arp Ether(dst"…

独家!同比增长超两倍,空气悬架前装市场「爆表」

接近20万套&#xff08;19.56万辆&#xff09;、同比增长超2倍&#xff08;222.88%&#xff09;&#xff0c;这是空气悬架系统在今年1-5月中国乘用车市场交出的答卷。同时&#xff0c;更多的供应商正在进入这个爆发式增长的细分市场。 高工智能汽车研究院监测数据显示&#xf…

第三方apple pencil哪个好?ipad第三方电容笔了解下

要知道&#xff0c;苹果原装的Pencil虽然性能很好&#xff0c;但是价格不菲&#xff0c;普通用户根本用不起。所以&#xff0c;是否有一种和Apple Pencil一样具有同样功能的电容笔吗&#xff1f;的确是这样。国内生产的平替电容笔跟苹果Pencil书写上并没有太大的区别&#xff0…

运行teb_local_planner/TebLocalPlannerROS时报错

在navigation时&#xff0c;运行pnc导航&#xff0c;报了Failed to create the teb_local_planner/TebLocalPlannerROS的错误。 解决办法&#xff1a; 在你的工作空间catkin_ws/src下进行teb源码安装 git clone https://github.com/rst-tu-dortmund/teb_local_planner完成后…