From 5479c528b0ce8f210ef71898a026f662f4275f08 Mon Sep 17 00:00:00 2001 From: nilupeng <qingingrunt2010@qq.com> Date: Thu, 11 Aug 2022 12:15:39 +0000 Subject: [PATCH] 签到 金币账户设置 --- app/src/main/res/values/styles.xml | 3 app/src/main/res/layout/activity_setting_coin.xml | 92 ++++ app/src/main/java/com/runt/open/mvvm/util/DatesUtil.java | 379 ++++++++++++++++++ app/src/main/AndroidManifest.xml | 3 app/src/main/java/com/runt/open/mvvm/ui/sign/SignInViewModel.java | 28 + app/src/main/java/com/runt/open/mvvm/ui/coin/CoinSettingActivity.java | 99 ++++ app/src/main/java/com/runt/open/mvvm/ui/main/mine/MineFragment.java | 10 app/src/main/res/drawable/bg_gold_circle.xml | 11 app/src/main/java/com/runt/open/mvvm/data/Results.java | 42 ++ app/src/main/java/com/runt/open/mvvm/ui/sign/SignInActivity.java | 166 +++++++ app/src/main/res/layout/activity_signs.xml | 245 +++++++++++ app/src/main/res/layout/item_calendar_day.xml | 19 app/src/main/java/com/runt/open/mvvm/retrofit/api/CommonApiCenter.java | 30 app/src/main/java/com/runt/open/mvvm/ui/adapter/CalendarAdapter.java | 58 ++ app/src/main/java/com/runt/open/mvvm/ui/coin/CoinSettingViewModel.java | 19 15 files changed, 1,186 insertions(+), 18 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b3b79ce..81610f4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,6 +48,9 @@ <activity android:name=".ui.SettingActivity" /> <activity android:name=".ui.AboutActivity" /> <activity android:name=".ui.msg.MsgDetailActivity" /> + <activity android:name=".ui.sign.SignInActivity" /> + <activity android:name=".ui.coin.CoinSettingActivity" /> + <activity android:name=".ui.loadpage.PageActivitys$CoinRecordActivity" tools:ignore="Instantiatable"/> </application> diff --git a/app/src/main/java/com/runt/open/mvvm/data/Results.java b/app/src/main/java/com/runt/open/mvvm/data/Results.java index a5a5143..791f53b 100644 --- a/app/src/main/java/com/runt/open/mvvm/data/Results.java +++ b/app/src/main/java/com/runt/open/mvvm/data/Results.java @@ -2,6 +2,7 @@ import com.runt.open.mvvm.ui.login.UserBean; +import java.text.SimpleDateFormat; import java.util.Date; /** @@ -38,4 +39,45 @@ **/ public Object remark; } + + + public static class Mycalendar { + + String day; + int style; + long dateTime; + public String getDay() { + return day; + } + + public void setDay(String day) { + this.day = day; + } + + public int getStyle() { + return style; + } + + public void setStyle(int style) { + this.style = style; + } + + public long getDateTime() { + return dateTime; + } + + public void setDateTime(long dateTime) { + this.dateTime = dateTime; + } + + SimpleDateFormat datesdf = new SimpleDateFormat("yyyy-MM-dd"); + @Override + public String toString() { + return "Mycalendar{" + + "day='" + day + '\'' + + ", style=" + style + + ", dateTime=" + datesdf.format(new Date(dateTime)) + + '}'; + } + } } diff --git a/app/src/main/java/com/runt/open/mvvm/retrofit/api/CommonApiCenter.java b/app/src/main/java/com/runt/open/mvvm/retrofit/api/CommonApiCenter.java index 22ddc5f..7c0e28d 100644 --- a/app/src/main/java/com/runt/open/mvvm/retrofit/api/CommonApiCenter.java +++ b/app/src/main/java/com/runt/open/mvvm/retrofit/api/CommonApiCenter.java @@ -8,6 +8,7 @@ import okhttp3.MultipartBody; import retrofit2.http.*; +import java.util.List; import java.util.Map; /** @@ -63,16 +64,6 @@ @POST("updatehead") Observable<Results.StringApiResult> updateHead(@Part MultipartBody.Part file); - - /** - * 获取咨询列表 - * @param pageNum 页数 - * @param pageSize 每页数量 - * @return - */ - @GET("getMsgList") - Observable<HttpApiResult<PageResult<Results.Message>>> getMsgList(@Query("page") int pageNum, @Query("size") int pageSize); - /** * app更新 * @return @@ -80,12 +71,21 @@ @GET("getMsgDetail") Observable<HttpApiResult<Results.Message>> getMsgDetail(@Query("id") String id); + @POST("updateAlipay") + Observable<Results.StringApiResult> updateAlipay(@Field("account") String account,@Field("paypass") String paypass); + + @POST("updateRealname") + Observable<Results.StringApiResult> updateRealname(@Field("account") String account,@Field("paypass") String paypass); + /** - * 获取金币记录 - * @param pageNum 页数 - * @param pageSize 每页数量 + * 获取签到列表 + * @param month * @return */ - @GET("coinRecord") - Observable<HttpApiResult<PageResult<Results.CustomCoin>>> getCoinRecord(@Query("page") int pageNum, @Query("size") int pageSize, @Query("inOrOut") int inOrOut); + @GET("getSignsByMonth") + Observable<HttpApiResult<List<String>>> getSignsByMonth(@Query("month") String month); + + @POST("signIn") + Observable<Results.StringApiResult> signIn(); + } diff --git a/app/src/main/java/com/runt/open/mvvm/ui/adapter/CalendarAdapter.java b/app/src/main/java/com/runt/open/mvvm/ui/adapter/CalendarAdapter.java new file mode 100644 index 0000000..22722d8 --- /dev/null +++ b/app/src/main/java/com/runt/open/mvvm/ui/adapter/CalendarAdapter.java @@ -0,0 +1,58 @@ +package com.runt.open.mvvm.ui.adapter; + +import android.widget.TextView; +import com.runt.open.mvvm.R; +import com.runt.open.mvvm.base.adapter.BaseAdapter; +import com.runt.open.mvvm.data.Results; +import com.runt.open.mvvm.databinding.ItemCalendarDayBinding; + +import java.util.List; + +/** + * @purpose Created by Runt (qingingrunt2010@qq.com) on 2019-3-26. + */ +public class CalendarAdapter extends BaseAdapter<Results.Mycalendar, ItemCalendarDayBinding> { + + public CalendarAdapter(List<Results.Mycalendar> list) { + this.dataList = list; + } + + @Override + protected void onBindView(ItemCalendarDayBinding binding, int position, Results.Mycalendar mycalendar) { + + TextView txt = binding.txtDay; + txt.setTextColor(binding.getRoot().getContext().getResources().getColor(R.color.white)); + switch (mycalendar.getStyle()){ + case 0://已签到 + txt.setBackground(binding.getRoot().getContext().getResources().getDrawable(R.drawable.bg_blue_circle)); + break; + + case 1://当月未签到 + txt.setBackground(binding.getRoot().getContext().getResources().getDrawable(R.drawable.bg_enable_circle)); + break; + + case 2://今日 + txt.setBackground(binding.getRoot().getContext().getResources().getDrawable(R.drawable.bg_red_border_circle)); + txt.setTextColor(binding.getRoot().getContext().getResources().getColor(R.color.txt_normal)); + break; + + case 3://还未到 + txt.setBackgroundColor(binding.getRoot().getContext().getResources().getColor(R.color.white)); + txt.setTextColor(binding.getRoot().getContext().getResources().getColor(R.color.txt_normal)); + break; + case 4://不是本月 + txt.setBackgroundColor(binding.getRoot().getContext().getResources().getColor(R.color.white)); + txt.setTextColor(binding.getRoot().getContext().getResources().getColor(R.color.txt_enable)); + break; + case 5://领取金币 + txt.setBackground(binding.getRoot().getContext().getResources().getDrawable(R.drawable.bg_gold_circle)); + break; + case 6://今日已签到 + txt.setBackground(binding.getRoot().getContext().getResources().getDrawable(R.drawable.bg_red_circle)); + //txt.setBackground(binding.getRoot().getContext().getResources().getDrawable(R.drawable.bg_blue_circle)); + break; + + } + txt.setText(mycalendar.getDay()); + } +} diff --git a/app/src/main/java/com/runt/open/mvvm/ui/coin/CoinSettingActivity.java b/app/src/main/java/com/runt/open/mvvm/ui/coin/CoinSettingActivity.java new file mode 100644 index 0000000..1123633 --- /dev/null +++ b/app/src/main/java/com/runt/open/mvvm/ui/coin/CoinSettingActivity.java @@ -0,0 +1,99 @@ +package com.runt.open.mvvm.ui.coin; + +import android.content.Intent; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import com.runt.open.mvvm.base.activities.BaseActivity; +import com.runt.open.mvvm.data.HttpApiResult; +import com.runt.open.mvvm.databinding.ActivitySettingCoinBinding; +import com.runt.open.mvvm.listener.ResPonse; +import com.runt.open.mvvm.retrofit.observable.HttpObserver; +import com.runt.open.mvvm.ui.login.UserBean; + +/** + * My father is Object, ites purpose of 金币交易设置 + * + * @purpose Created by Runt (qingingrunt2010@qq.com) on 2020-10-30. + */ +public class CoinSettingActivity extends BaseActivity<ActivitySettingCoinBinding,CoinSettingViewModel> { + + private int requestCode = 0; + + @Override + public void initViews() { + ActivityResultLauncher<Intent> launcher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { + if( result.getResultCode() == RESULT_OK){ + String pass = result.getData().getStringExtra("paypass"); + HttpObserver<String> observer = new HttpObserver<String>() { + @Override + protected void onSuccess(String data) { + if(REQUEST_CODE_PAYPASS_FOR_ALIPAY == requestCode ){ + showToast("支付宝修改成功"); + UserBean.getUser().setAlipay(mBinding.txtAlipay.getText().toString()); + }else if(REQUEST_CODE_PAYPASS_FOR_REALNAME == requestCode ){ + showToast("修改成功"); + UserBean.getUser().setRealname(mBinding.txtRealname.getText().toString()); + } + } + + @Override + protected void onFailed(HttpApiResult error) { + super.onFailed(error); + loadData(); + if(error.code == 621){ + showDialog("设置支付密码", "当前账号还没有设置支付密码", "设置", "取消", new ResPonse() { + @Override + public void doSuccess(Object obj) { + //startActivity(new Intent(mContext, PaypassActivity.class).putExtra("type", 1));//去设置密码 + } + }); + } + + } + }; + if(REQUEST_CODE_PAYPASS_FOR_ALIPAY == requestCode ){ + mViewModel.updateAlipay(mBinding.txtAlipay.getText().toString(),pass,observer); + }else if(REQUEST_CODE_PAYPASS_FOR_REALNAME == requestCode ){ + mViewModel.updateName(mBinding.txtRealname.getText().toString(),pass,observer); + } + } + }); + mBinding.linAlipay.setOnClickListener(v->{ + showInputDialog("修改支付宝账号", UserBean.getUser().getAlipay(), "请输入支付宝账号用于提现", new ResPonse() { + @Override + public void doSuccess(Object obj) { + mBinding.txtAlipay.setText(obj.toString()); + requestCode = REQUEST_CODE_PAYPASS_FOR_ALIPAY; + //launcher.launch(new Intent(mContext, PaypassActivity.class)); + } + }); + }); + mBinding.linRealname.setOnClickListener(v->{ + showInputDialog("修改真实姓名", UserBean.getUser().getRealname(), "请输入真实姓名用于提现", new ResPonse() { + @Override + public void doSuccess(Object obj) { + requestCode = REQUEST_CODE_PAYPASS_FOR_REALNAME; + mBinding.txtRealname.setText(obj.toString()); + //launcher.launch(new Intent(mContext, PaypassActivity.class)); + } + }); + }); + mBinding.linPass.setOnClickListener(v->{ + //startActivity(new Intent(mContext,PaypassActivity.class).putExtra("type",1)); + }); + } + + @Override + public void loadData() { + if(UserBean.getUser().getAlipay()!=null){ + mBinding.txtAlipay.setText(UserBean.getUser().getAlipay()); + }else{ + mBinding.txtAlipay.setText(""); + } + if(UserBean.getUser().getRealname() != null){ + mBinding.txtRealname.setText(UserBean.getUser().getRealname()); + }else{ + mBinding.txtRealname.setText(""); + } + } +} diff --git a/app/src/main/java/com/runt/open/mvvm/ui/coin/CoinSettingViewModel.java b/app/src/main/java/com/runt/open/mvvm/ui/coin/CoinSettingViewModel.java new file mode 100644 index 0000000..466f798 --- /dev/null +++ b/app/src/main/java/com/runt/open/mvvm/ui/coin/CoinSettingViewModel.java @@ -0,0 +1,19 @@ +package com.runt.open.mvvm.ui.coin; + +import com.runt.open.mvvm.base.model.BaseViewModel; +import com.runt.open.mvvm.retrofit.observable.HttpObserver; + +/** + * @purpose Created by Runt (qingingrunt2010@qq.com) on 2019-3-26. + */ +public class CoinSettingViewModel extends BaseViewModel { + + public void updateName(String name,String pass, HttpObserver<String> httpObserver){ + httpObserverOnLoading(commonApi.updateRealname(name,pass),httpObserver); + } + + public void updateAlipay(String alipay,String pass, HttpObserver<String> httpObserver){ + httpObserverOnLoading(commonApi.updateAlipay(alipay,pass),httpObserver); + } + +} diff --git a/app/src/main/java/com/runt/open/mvvm/ui/main/mine/MineFragment.java b/app/src/main/java/com/runt/open/mvvm/ui/main/mine/MineFragment.java index 428d272..4eeb5fb 100644 --- a/app/src/main/java/com/runt/open/mvvm/ui/main/mine/MineFragment.java +++ b/app/src/main/java/com/runt/open/mvvm/ui/main/mine/MineFragment.java @@ -5,6 +5,8 @@ import android.content.pm.ActivityInfo; import android.view.View; import android.widget.TextView; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; import com.luck.picture.lib.PictureSelector; @@ -17,8 +19,10 @@ import com.runt.open.mvvm.databinding.FragmentMineBinding; import com.runt.open.mvvm.listener.ResPonse; import com.runt.open.mvvm.retrofit.observable.HttpObserver; +import com.runt.open.mvvm.ui.coin.CoinSettingActivity; import com.runt.open.mvvm.ui.loadpage.PageActivitys; import com.runt.open.mvvm.ui.login.UserBean; +import com.runt.open.mvvm.ui.sign.SignInActivity; import com.runt.open.mvvm.util.GlideEngine; import com.runt.open.mvvm.util.MyLog; import sakura.bottommenulibrary.bottompopfragmentmenu.BottomMenuFragment; @@ -36,7 +40,9 @@ public class MineFragment extends BaseFragment<FragmentMineBinding,MineViewModel> implements View.OnClickListener { private final String TAG = "MineFragment"; + ActivityResultLauncher<Intent> signLaunch = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { + }); @Override public void initViews() { } @@ -103,7 +109,7 @@ } }); }else{ - startActivityForResult(new Intent(mActivity, WithDrawActivity.class),REQUEST_CODE_WITHDRAW ); + //startActivityForResult(new Intent(mActivity, WithDrawActivity.class),REQUEST_CODE_WITHDRAW ); } } } @@ -111,7 +117,7 @@ .show(); break; case R.id.lin_sign://签到 - startActivityForResult(new Intent(getContext(), SignInActivity.class),REQUEST_CODE_SIGN); + signLaunch.launch(new Intent(getContext(), SignInActivity.class)); break; } } diff --git a/app/src/main/java/com/runt/open/mvvm/ui/sign/SignInActivity.java b/app/src/main/java/com/runt/open/mvvm/ui/sign/SignInActivity.java new file mode 100644 index 0000000..a752121 --- /dev/null +++ b/app/src/main/java/com/runt/open/mvvm/ui/sign/SignInActivity.java @@ -0,0 +1,166 @@ +package com.runt.open.mvvm.ui.sign; + +import android.util.Log; +import androidx.recyclerview.widget.GridLayoutManager; +import com.runt.open.mvvm.base.activities.BaseActivity; +import com.runt.open.mvvm.data.HttpApiResult; +import com.runt.open.mvvm.data.Results; +import com.runt.open.mvvm.databinding.ActivitySignsBinding; +import com.runt.open.mvvm.retrofit.observable.HttpObserver; +import com.runt.open.mvvm.ui.adapter.CalendarAdapter; +import com.runt.open.mvvm.ui.login.UserBean; +import com.runt.open.mvvm.util.DatesUtil; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.TimeZone; + +/** + * @purpose Created by Runt (qingingrunt2010@qq.com) on 2019-3-26. + */ +public class SignInActivity extends BaseActivity<ActivitySignsBinding,SignInViewModel> { + + List<Results.Mycalendar> list = new ArrayList<>(); + CalendarAdapter adapter = new CalendarAdapter(list); + SimpleDateFormat datesdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat monthdf = new SimpleDateFormat("yyyy/MM"); + SimpleDateFormat secondsdf = new SimpleDateFormat("dd"); + int last = 0 ; + + HttpObserver<List<String>> observer = new HttpObserver<List<String>>() { + @Override + protected void onSuccess(List<String> data) { + last = (int) mBinding.txtCalendarTitle.getTag(); + String today = datesdf.format(new Date()); + if(data.contains(today)){ + mBinding.btnSign.setText("已签到"); + mBinding.btnSign.setEnabled(false); + } + initCalendar(data); + loadMothBtn(getStartDate()); + } + + @Override + protected void onFailed(HttpApiResult error) { + super.onFailed(error); + loadMothBtn(getStartDate()); + } + }; + @Override + public void initViews() { + mBinding.lastMonth.setOnClickListener(v->{ + v.setEnabled(false); + mBinding.txtCalendarTitle.setTag(last - 1); + mViewModel.getSigns(last-1,observer); + }); + mBinding.nextMonth.setOnClickListener(v->{ + v.setEnabled(false); + mBinding.txtCalendarTitle.setTag(last+ 1); + mViewModel.getSigns(last+1,observer);;}); + mBinding.btnSign.setOnClickListener(v->{mViewModel.signIn(new HttpObserver<String>(this) { + @Override + protected void onSuccess(String data) { + showToast("赠送金币"+data+"个"); + UserBean.getUser().setCoin(UserBean.getUser().getCoin()+Integer.parseInt(data.toString())); + UserBean.getUser().setSign(UserBean.getUser().getSign()+1); + mBinding.txtSigns.setText(UserBean.getUser().getSign()+"天"); + mBinding.btnSign.setEnabled(false); + mBinding.btnSign.setText("已签到"); + setResult(RESULT_OK); + mViewModel.getSigns(last,observer); + } + + @Override + protected void onFailed(HttpApiResult error) { + super.onFailed(error); + if(error.code == 610){ + mBinding.btnSign.setEnabled(false); + mBinding.btnSign.setText("已签到"); + } + } + });}); + mBinding.recycler.setLayoutManager(new GridLayoutManager(mContext,7)); + mBinding.recycler.setAdapter(adapter); + } + + @Override + public void loadData() { + initCalendar(new ArrayList<>()); + mBinding.txtCalendarTitle.setTag(last); + mViewModel.getSigns(last,observer); + } + + /** + * 加载🗓 + * @param signList + */ + private void initCalendar(List<String> signList ){ + list.clear(); + Date startDate = getStartDate(); + Date endDate = DatesUtil.getEndDayOfMonth(DatesUtil.getNowMonth()+last); + int days = (int) ((endDate.getTime() - startDate.getTime())/(60000*60*24)); + int week = DatesUtil.getWeekOfDate(startDate); + long starttime = startDate.getTime()-((60000*60*24*week-1)); + int lastWeek = DatesUtil.getWeekOfDate(endDate); + long endtime = endDate.getTime()+((60000*60*24*(6-lastWeek))); + days+=week+1; + days+=(6-lastWeek); + int newDays = (int) ((endtime- starttime)/(60000*60*24)); + //Log.e(TAG,"days:"+days +" newDays:"+newDays+" month:"+(DatesUtil.getNowMonth()+last)+" endDate:"+datesdf.format(endDate)); + for(int i = 0 ; i < days ; i ++ ){ + Results.Mycalendar calendar = new Results.Mycalendar(); + long dateTime = starttime+(i*(60000l*60*24)); + calendar.setDateTime(dateTime); + calendar.setDay(secondsdf.format(new Date(dateTime))); + /*if(coinList.contains(datesdf.format(new Date(dateTime)))){//是否赠送了金币 + calendar.setStyle(5); + }else */if(dateTime < startDate.getTime() || dateTime > endDate.getTime()){//不是本月的日期 + calendar.setStyle(4); + }else if(datesdf.format(new Date()).equals(datesdf.format(new Date(dateTime)))&& !signList.contains(datesdf.format(new Date(dateTime)))){//今天 + Log.e(TAG,"今天"+datesdf.format(new Date())); + calendar.setStyle(2); + }else if(datesdf.format(new Date()).equals(datesdf.format(new Date(dateTime)))&& signList.contains(datesdf.format(new Date(dateTime)))){//今天 + calendar.setStyle(6); + }else if(new Date().getTime()<dateTime){//还没到的日期 + calendar.setStyle(3); + }else if(signList.contains(datesdf.format(new Date(dateTime)))){//是否签到 + calendar.setStyle(0); + }else{ + calendar.setStyle(1); + } + //Log.e(TAG,"day:"+datesdf.format(new Date(dateTime)) + " sign:"+signs.contains(datesdf.format(new Date(dateTime)))); + list.add(calendar); + } + adapter.notifyDataSetChanged(); + mBinding.txtCalendarTitle.setText(monthdf.format(startDate)); + loadMothBtn(startDate); + + } + + private Date getStartDate(){ + secondsdf.setTimeZone(TimeZone.getTimeZone("GMT+08:00")); + datesdf.setTimeZone(TimeZone.getTimeZone("GMT+08:00")); + return DatesUtil.getBeginDayOfMonth(DatesUtil.getNowMonth()+last); + } + + private void loadMothBtn(Date startDate){ + + try { + if(monthdf.format(startDate).equals(monthdf.format(new Date()))|| new Date().getTime()<startDate.getTime()) {//超过指定日期禁止点击 + mBinding.nextMonth.setEnabled(false); + }else{ + mBinding.nextMonth.setEnabled(true); + } + if(monthdf.format(startDate).equals("2021/09") || monthdf.parse("2021/09").getTime()>startDate.getTime()){//超过指定日期禁止点击 + mBinding.lastMonth.setEnabled(false); + }else{ + mBinding.lastMonth.setEnabled(true); + } + } catch (ParseException e) { + e.printStackTrace(); + } + } +} diff --git a/app/src/main/java/com/runt/open/mvvm/ui/sign/SignInViewModel.java b/app/src/main/java/com/runt/open/mvvm/ui/sign/SignInViewModel.java new file mode 100644 index 0000000..405efe0 --- /dev/null +++ b/app/src/main/java/com/runt/open/mvvm/ui/sign/SignInViewModel.java @@ -0,0 +1,28 @@ +package com.runt.open.mvvm.ui.sign; + +import com.runt.open.mvvm.base.model.BaseViewModel; +import com.runt.open.mvvm.retrofit.observable.HttpObserver; +import com.runt.open.mvvm.util.DatesUtil; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +/** + * @purpose Created by Runt (qingingrunt2010@qq.com) on 2019-3-26. + */ +public class SignInViewModel extends BaseViewModel { + + + + public void signIn(HttpObserver<String> observer){ + httpObserverOn(commonApi.signIn(),observer); + } + + public void getSigns(int month,HttpObserver<List<String>> observer){ + SimpleDateFormat monthdf = new SimpleDateFormat("yyyy-MM"); + Date startDate = DatesUtil.getBeginDayOfMonth(DatesUtil.getNowMonth()+month); + httpObserverOn(commonApi.getSignsByMonth(monthdf.format(startDate)),observer); + } + +} diff --git a/app/src/main/java/com/runt/open/mvvm/util/DatesUtil.java b/app/src/main/java/com/runt/open/mvvm/util/DatesUtil.java new file mode 100644 index 0000000..83a5819 --- /dev/null +++ b/app/src/main/java/com/runt/open/mvvm/util/DatesUtil.java @@ -0,0 +1,379 @@ +package com.runt.open.mvvm.util; + +import android.annotation.SuppressLint; + +import java.sql.Timestamp; +import java.util.*; + +/** + * My father is Object, ites purpose of + * + * @purpose Created by Runt (qingingrunt2010@qq.com) on 2019-3-26. + */ + +public class DatesUtil { + /** + * 获取当前日期是星期几<br> + * + * @param date + * @return 当前日期是星期几 首日为星期日 + */ + public static int getWeekOfDate(Date date) { + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + int w = cal.get(Calendar.DAY_OF_WEEK) - 1; + if (w < 0) + w = 0; + return w; + } + + // 获取当天的开始时间 + public static Date getDayBegin() { + Calendar cal = new GregorianCalendar(); + cal.set(Calendar.HOUR_OF_DAY, 0); + cal.set(Calendar.MINUTE, 0); + cal.set(Calendar.SECOND, 0); + cal.set(Calendar.MILLISECOND, 0); + return cal.getTime(); + } + + // 获取当天的结束时间 + public static Date getDayEnd() { + Calendar cal = new GregorianCalendar(); + cal.set(Calendar.HOUR_OF_DAY, 23); + cal.set(Calendar.MINUTE, 59); + cal.set(Calendar.SECOND, 59); + return cal.getTime(); + } + + // 获取昨天的开始时间 + public static Date getBeginDayOfYesterday() { + Calendar cal = new GregorianCalendar(); + cal.setTime(getDayBegin()); + cal.add(Calendar.DAY_OF_MONTH, -1); + return cal.getTime(); + } + + // 获取昨天的结束时间 + public static Date getEndDayOfYesterDay() { + Calendar cal = new GregorianCalendar(); + cal.setTime(getDayEnd()); + cal.add(Calendar.DAY_OF_MONTH, -1); + return cal.getTime(); + } + + // 获取明天的开始时间 + public static Date getBeginDayOfTomorrow() { + Calendar cal = new GregorianCalendar(); + cal.setTime(getDayBegin()); + cal.add(Calendar.DAY_OF_MONTH, 1); + return cal.getTime(); + } + + // 获取明天的结束时间 + public static Date getEndDayOfTomorrow() { + Calendar cal = new GregorianCalendar(); + cal.setTime(getDayEnd()); + cal.add(Calendar.DAY_OF_MONTH, 1); + return cal.getTime(); + } + + // 获取本周的开始时间 + @SuppressWarnings("unused") + public static Date getBeginDayOfWeek() { + Date date = new Date(); + if (date == null) { + return null; + } + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + int dayofweek = cal.get(Calendar.DAY_OF_WEEK); + if (dayofweek == 1) { + dayofweek += 7; + } + cal.add(Calendar.DATE, 2 - dayofweek); + return getDayStartTime(cal.getTime()); + } + + // 获取本周的结束时间 + public static Date getEndDayOfWeek() { + Calendar cal = Calendar.getInstance(); + cal.setTime(getBeginDayOfWeek()); + cal.add(Calendar.DAY_OF_WEEK, 6); + Date weekEndSta = cal.getTime(); + return getDayEndTime(weekEndSta); + } + + // 获取上周的开始时间 + @SuppressWarnings("unused") + public static Date getBeginDayOfLastWeek() { + Date date = new Date(); + if (date == null) { + return null; + } + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + int dayofweek = cal.get(Calendar.DAY_OF_WEEK); + if (dayofweek == 1) { + dayofweek += 7; + } + cal.add(Calendar.DATE, 2 - dayofweek - 7); + return getDayStartTime(cal.getTime()); + } + + // 获取上周的结束时间 + public static Date getEndDayOfLastWeek() { + Calendar cal = Calendar.getInstance(); + cal.setTime(getBeginDayOfLastWeek()); + cal.add(Calendar.DAY_OF_WEEK, 6); + Date weekEndSta = cal.getTime(); + return getDayEndTime(weekEndSta); + } + + + // 获取本月的结束时间 + @SuppressLint("WrongConstant") + public static Date getEndDayOfMonth() { + Calendar calendar = Calendar.getInstance(); + calendar.set(getNowYear(), getNowMonth() - 1, 1); + int day = calendar.getActualMaximum(5); + calendar.set(getNowYear(), getNowMonth() - 1, day); + return getDayEndTime(calendar.getTime()); + } + + // 获取当年某月的结束时间 + @SuppressLint("WrongConstant") + public static Date getEndDayOfMonth(int month) { + return getEndDayOfMonth(getNowYear(),month); + } + + // 获取某年某月的结束时间 + @SuppressLint("WrongConstant") + public static Date getEndDayOfMonth(int year,int month) { + Calendar calendar = Calendar.getInstance(); + if(month <= 0){ + year-=(1+((Math.abs(month))/12)); + month = 12-(Math.abs(month)%12); + }else if( month > 12){ + year +=(1+((Math.abs(month))/12)); + month = (Math.abs(month)%12); + } + calendar.set(year, month - 1, 1); + int day = calendar.getActualMaximum(5); + calendar.set(year, month - 1, day); + return getDayEndTime(calendar.getTime()); + } + // 获取某月的开始时间 + public static Date getBeginDayOfMonth(int month) { + return getBeginDayOfMonth(getNowYear(),month); + } + + // 获取某年某月的开始时间 + public static Date getBeginDayOfMonth(int year, int month) { + Calendar calendar = Calendar.getInstance(); + if(month <= 0){ + year-=(1+((Math.abs(month))/12)); + month = 12-(Math.abs(month)%12); + }else if( month > 12){ + year +=(1+((Math.abs(month))/12)); + month = (Math.abs(month)%12); + } + calendar.set(year, month-1, 1); + return getDayStartTime(calendar.getTime()); + } + + // 获取上月的结束时间 + @SuppressLint("WrongConstant") + public static Date getEndDayOfLastMonth() { + Calendar calendar = Calendar.getInstance(); + calendar.set(getNowYear(), getNowMonth() - 2, 1); + int day = calendar.getActualMaximum(5); + calendar.set(getNowYear(), getNowMonth() - 2, day); + return getDayEndTime(calendar.getTime()); + } + + /** + * 获取当月多少天 + * @param year + * @param month + * @return + */ + public static int getDaysOfMonth(int year,int month){ + Calendar c = Calendar.getInstance(); + c.set(year, month, 0); //输入类型为int类型 + return c.get(Calendar.DAY_OF_MONTH); + } + + // 获取本年的开始时间 + public static Date getBeginDayOfYear() { + Calendar cal = Calendar.getInstance(); + cal.set(Calendar.YEAR, getNowYear()); + cal.set(Calendar.MONTH, Calendar.JANUARY); + cal.set(Calendar.DATE, 1); + return getDayStartTime(cal.getTime()); + } + + // 获取本年的结束时间 + public static Date getEndDayOfYear() { + Calendar cal = Calendar.getInstance(); + cal.set(Calendar.YEAR, getNowYear()); + cal.set(Calendar.MONTH, Calendar.DECEMBER); + cal.set(Calendar.DATE, 31); + return getDayEndTime(cal.getTime()); + } + + // 获取某个日期的开始时间 + public static Timestamp getDayStartTime(Date d) { + Calendar calendar = Calendar.getInstance(); + if (null != d) + calendar.setTime(d); + calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), + calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0); + calendar.set(Calendar.MILLISECOND, 0); + return new Timestamp(calendar.getTimeInMillis()); + } + + // 获取某个日期的结束时间 + public static Timestamp getDayEndTime(Date d) { + Calendar calendar = Calendar.getInstance(); + if (null != d) + calendar.setTime(d); + calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), + calendar.get(Calendar.DAY_OF_MONTH), 23, 59, 59); + calendar.set(Calendar.MILLISECOND, 999); + return new Timestamp(calendar.getTimeInMillis()); + } + + // 获取今年是哪一年 + @SuppressLint("WrongConstant") + public static Integer getNowYear() { + Date date = new Date(); + GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance(); + gc.setTime(date); + return Integer.valueOf(gc.get(1)); + } + + // 获取本月是哪一月 + @SuppressLint("WrongConstant") + public static int getNowMonth() { + Date date = new Date(); + GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance(); + gc.setTime(date); + return gc.get(2) + 1; + } + + // 两个日期相减得到的天数 + public static int getDiffDays(Date beginDate, Date endDate) { + if (beginDate == null || endDate == null) { + throw new IllegalArgumentException("getDiffDays param is null!"); + } + long diff = (endDate.getTime() - beginDate.getTime()) + / (1000 * 60 * 60 * 24); + int days = new Long(diff).intValue(); + return days; + } + + // 两个日期相减得到的毫秒数 + public static long dateDiff(Date beginDate, Date endDate) { + long date1ms = beginDate.getTime(); + long date2ms = endDate.getTime(); + return date2ms - date1ms; + } + + // 获取两个日期中的最大日期 + public static Date max(Date beginDate, Date endDate) { + if (beginDate == null) { + return endDate; + } + if (endDate == null) { + return beginDate; + } + if (beginDate.after(endDate)) { + return beginDate; + } + return endDate; + } + + // 获取两个日期中的最小日期 + public static Date min(Date beginDate, Date endDate) { + if (beginDate == null) { + return endDate; + } + if (endDate == null) { + return beginDate; + } + if (beginDate.after(endDate)) { + return endDate; + } + return beginDate; + } + + // 返回某月该季度的第一个月 + public static Date getFirstSeasonDate(Date date) { + final int[] SEASON = { 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4 }; + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + int sean = SEASON[cal.get(Calendar.MONTH)]; + cal.set(Calendar.MONTH, sean * 3 - 3); + return cal.getTime(); + } + + // 返回某个日期下几天的日期 + public static Date getNextDay(Date date, int i) { + Calendar cal = new GregorianCalendar(); + cal.setTime(date); + cal.set(Calendar.DATE, cal.get(Calendar.DATE) + i); + return cal.getTime(); + } + + // 返回某个日期前几天的日期 + public static Date getFrontDay(Date date, int i) { + Calendar cal = new GregorianCalendar(); + cal.setTime(date); + cal.set(Calendar.DATE, cal.get(Calendar.DATE) - i); + return cal.getTime(); + } + + // 获取某年某月到某年某月按天的切片日期集合(间隔天数的集合) + @SuppressWarnings({ "rawtypes", "unchecked" }) + public static List getTimeList(int beginYear, int beginMonth, int endYear, + int endMonth, int k) { + List list = new ArrayList(); + if (beginYear == endYear) { + for (int j = beginMonth; j <= endMonth; j++) { + list.add(getTimeList(beginYear, j, k)); + } + } else { + { + for (int j = beginMonth; j < 12; j++) { + list.add(getTimeList(beginYear, j, k)); + } + for (int i = beginYear + 1; i < endYear; i++) { + for (int j = 0; j < 12; j++) { + list.add(getTimeList(i, j, k)); + } + } + for (int j = 0; j <= endMonth; j++) { + list.add(getTimeList(endYear, j, k)); + } + } + } + return list; + } + + // 获取某年某月按天切片日期集合(某个月间隔多少天的日期集合) + @SuppressWarnings({ "unchecked", "rawtypes" }) + public static List getTimeList(int beginYear, int beginMonth, int k) { + List list = new ArrayList(); + Calendar begincal = new GregorianCalendar(beginYear, beginMonth, 1); + int max = begincal.getActualMaximum(Calendar.DATE); + for (int i = 1; i < max; i = i + k) { + list.add(begincal.getTime()); + begincal.add(Calendar.DATE, k); + } + begincal = new GregorianCalendar(beginYear, beginMonth, max); + list.add(begincal.getTime()); + return list; + } + +} diff --git a/app/src/main/res/drawable/bg_gold_circle.xml b/app/src/main/res/drawable/bg_gold_circle.xml new file mode 100644 index 0000000..520f868 --- /dev/null +++ b/app/src/main/res/drawable/bg_gold_circle.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + + <item> + <shape android:shape="rectangle"> + <corners android:radius="@dimen/circle" /> + <solid android:color="@color/gold" /> + </shape> + </item> + +</selector> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_setting_coin.xml b/app/src/main/res/layout/activity_setting_coin.xml new file mode 100644 index 0000000..a6ff8fc --- /dev/null +++ b/app/src/main/res/layout/activity_setting_coin.xml @@ -0,0 +1,92 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:background="@color/white" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + + <com.runt.open.mvvm.widgets.TitleBarView + android:id="@+id/title_bar" + style="@style/titlebar" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:leftDrawable="@mipmap/icon_white_back" + app:leftTint="@color/black" + app:titleText="财务设置" + /> + + <TextView + android:id="@+id/lin_realname" + style="@style/lin_txt" + app:layout_constraintTop_toBottomOf="@id/title_bar" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + android:text="真实姓名" /> + <TextView + android:id="@+id/txt_realname" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginRight="@dimen/default_margin_lr" + android:textSize="14sp" + android:textColor="@color/txt_enable" + app:layout_constraintTop_toTopOf="@id/lin_realname" + app:layout_constraintBottom_toBottomOf="@id/lin_realname" + app:layout_constraintRight_toRightOf="parent" /> + <TextView + android:id="@+id/lin_pass" + style="@style/lin_txt" + app:layout_constraintTop_toBottomOf="@id/lin_realname" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + android:drawableRight="@mipmap/arrow_right" + android:text="支付密码" /> + <TextView + android:id="@+id/lin_alipay" + style="@style/lin_txt" + app:layout_constraintTop_toBottomOf="@id/lin_pass" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + android:text="支付宝账号" /> + <TextView + android:id="@+id/txt_alipay" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginRight="@dimen/default_margin_lr" + android:textSize="14sp" + android:textColor="@color/txt_enable" + app:layout_constraintTop_toTopOf="@id/lin_alipay" + app:layout_constraintBottom_toBottomOf="@id/lin_alipay" + app:layout_constraintRight_toRightOf="parent" /> + <View + app:layout_constraintTop_toBottomOf="@id/title_bar" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + android:layout_width="match_parent" + android:layout_height="0.5dp" + android:background="@color/color_gray8" /> + <View + app:layout_constraintTop_toBottomOf="@id/lin_realname" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + android:layout_width="match_parent" + android:layout_height="0.5dp" + android:background="@color/color_gray8" /> + <View + app:layout_constraintTop_toBottomOf="@id/lin_pass" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + android:layout_width="match_parent" + android:layout_height="0.5dp" + android:background="@color/color_gray8" /> + <View + app:layout_constraintTop_toBottomOf="@id/lin_alipay" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + android:layout_width="match_parent" + android:layout_height="0.5dp" + android:background="@color/color_gray8" /> + +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_signs.xml b/app/src/main/res/layout/activity_signs.xml new file mode 100644 index 0000000..ffc5697 --- /dev/null +++ b/app/src/main/res/layout/activity_signs.xml @@ -0,0 +1,245 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:orientation="vertical" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@android:color/white"> + + <com.runt.open.mvvm.widgets.TitleBarView + android:id="@+id/title_bar" + style="@style/titlebar" + android:background="@color/transparent" + app:leftDrawable="@mipmap/icon_white_back" + app:leftTint="@color/black" + app:titleText="签到" + /> + + <ScrollView + android:layout_width="match_parent" + android:layout_height="match_parent" + android:scrollbars="vertical"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> + + + <LinearLayout + android:layout_width="match_parent" + android:background="@color/theme" + android:gravity="center_horizontal" + android:orientation="vertical" + android:paddingTop="30dp" + android:layout_height="210dp"> + + <TextView + android:id="@+id/txt_signs" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="天数" + android:textColor="@color/white" + android:textStyle="bold" + android:textSize="26sp"/> + <TextView + android:id="@+id/txt_tip" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="连续签到赠送金币丰厚" + android:layout_marginTop="10dp" + android:textColor="@color/cut_off_line" + android:textSize="16sp"/> + + </LinearLayout> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="-80dp" + android:layout_marginLeft="15dp" + android:layout_marginRight="15dp" + android:background="@drawable/bg_white_corner" + android:orientation="vertical" + android:elevation="5dp"> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:padding="10dp" + android:layout_gravity="center" + android:layout_marginTop="10dp" + android:gravity="center_vertical" + android:orientation="horizontal"> + + <ImageView + android:id="@+id/last_month" + android:layout_width="wrap_content" + android:layout_height="16dp" + android:adjustViewBounds="true" + android:src="@drawable/calender_last"/> + + <TextView + android:id="@+id/txt_calendar_title" + android:layout_width="130dp" + android:layout_height="wrap_content" + android:text="2017年7月" + android:textColor="@color/txt_normal" + android:textSize="20sp" + android:gravity="center" /> + <ImageView + android:id="@+id/next_month" + android:layout_width="wrap_content" + android:layout_height="16dp" + android:adjustViewBounds="true" + android:src="@drawable/calender_next"/> + </LinearLayout> + + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="10dp" + android:layout_marginBottom="10dp" + android:orientation="horizontal"> + + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center" + android:layout_weight="1" + android:textSize="@dimen/sign_text_size" + android:text="日"/> + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center" + android:layout_weight="1" + android:textSize="@dimen/sign_text_size" + android:text="一"/> + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center" + android:layout_weight="1" + android:textSize="@dimen/sign_text_size" + android:text="二"/> + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center" + android:layout_weight="1" + android:textSize="@dimen/sign_text_size" + android:text="三"/> + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center" + android:layout_weight="1" + android:textSize="@dimen/sign_text_size" + android:text="四"/> + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center" + android:layout_weight="1" + android:textSize="@dimen/sign_text_size" + android:text="五"/> + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center" + android:layout_weight="1" + android:textSize="@dimen/sign_text_size" + android:text="六"/> + + </LinearLayout> + + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/recycler" + android:layout_width="match_parent" + android:layout_height="wrap_content" + tools:listitem="@layout/item_calendar_day" + app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + app:spanCount="7" + tools:itemCount="24"> + + </androidx.recyclerview.widget.RecyclerView> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center_vertical" + android:padding="15dp" + android:orientation="horizontal"> + + + <View + android:layout_width="7dp" + android:layout_height="7dp" + android:background="@drawable/bg_blue_circle" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginLeft="5dp" + android:textSize="@dimen/sign_text_size" + android:text="已签到" + android:gravity="center" /> + <View + android:layout_width="7dp" + android:layout_height="7dp" + android:layout_marginLeft="@dimen/sign_text_margin" + android:background="@drawable/bg_enable_circle" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginLeft="5dp" + android:textSize="@dimen/sign_text_size" + android:text="未签到" + android:gravity="center" /> + <View + android:layout_width="7dp" + android:layout_height="7dp" + android:layout_marginLeft="@dimen/sign_text_margin" + android:background="@drawable/bg_red_border_circle" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginLeft="5dp" + android:textSize="@dimen/sign_text_size" + android:text="今日" + android:gravity="center" /> + <View + android:layout_width="7dp" + android:layout_height="7dp" + android:layout_marginLeft="@dimen/sign_text_margin" + android:background="@drawable/bg_red_circle" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginLeft="5dp" + android:textSize="@dimen/sign_text_size" + android:text="今日已签" + android:gravity="center" /> + </LinearLayout> + + </LinearLayout> + + <Button + android:id="@+id/btn_sign" + style="@style/btn_normal" + android:layout_marginTop="50dp" + android:layout_marginBottom="50dp" + android:layout_marginLeft="@dimen/default_margin_lr" + android:layout_marginRight="@dimen/default_margin_lr" + android:text="签到"/> + </LinearLayout> + + </ScrollView> + +</LinearLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/item_calendar_day.xml b/app/src/main/res/layout/item_calendar_day.xml new file mode 100644 index 0000000..0efb68f --- /dev/null +++ b/app/src/main/res/layout/item_calendar_day.xml @@ -0,0 +1,19 @@ +<?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:layout_marginTop="10dp" + android:gravity="center"> + + <TextView + android:id="@+id/txt_day" + android:background="@drawable/bg_red_border_circle" + android:layout_width="30dp" + android:layout_height="30dp" + android:textColor="@color/black" + android:gravity="center" + android:textSize="@dimen/sign_text_size" + android:text="11"/> + +</LinearLayout> diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index eadbfc9..14e8819 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<resources> +<resources xmlns:tools="http://schemas.android.com/tools"> <declare-styleable name="TitleBarView"> <attr name="leftDrawable" format="reference"/> @@ -67,6 +67,7 @@ </style> <style name="titlebar"> + <item name="android:id" tools:ignore="AaptCrash">@+id/title_bar</item> <item name="android:layout_width">match_parent</item> <item name="android:layout_height">?attr/actionBarSize</item> <item name="android:background">@color/white</item> -- Gitblit v1.9.1