排程重做

This commit is contained in:
fengjignqi
2026-05-28 12:00:18 +08:00
parent 47769d1003
commit 401d1892bb
13 changed files with 621 additions and 3 deletions

View File

@@ -159,7 +159,7 @@ dependencies {
//鲁班图片压缩 //鲁班图片压缩
implementation 'top.zibin:Luban:1.1.8' implementation 'top.zibin:Luban:1.1.8'
//带有侧滑功能的recyclerview //带有侧滑功能的recyclerview
// implementation 'com.yanzhenjie.recyclerview:x:1.3.2' implementation 'com.yanzhenjie.recyclerview:x:1.3.2'
implementation 'com.github.luqiming666:SwipeRecyclerView:1.4.8' implementation 'com.github.luqiming666:SwipeRecyclerView:1.4.8'
//Activity与Fragmen实现沉浸式状态栏 //Activity与Fragmen实现沉浸式状态栏
implementation 'com.github.tangguna:immersion:1.0.1' implementation 'com.github.tangguna:immersion:1.0.1'

View File

@@ -129,7 +129,6 @@ public class AddWaterPlanActivity extends BaseActivity<AddWaterPlanLayoutBinding
"取消", "保存", new BaseFragment.OnDialogClick() { "取消", "保存", new BaseFragment.OnDialogClick() {
@Override @Override
public void onCancelClick() { public void onCancelClick() {
selectTabBind(mEditEntity);
} }
@Override @Override
@@ -156,7 +155,7 @@ public class AddWaterPlanActivity extends BaseActivity<AddWaterPlanLayoutBinding
} }
}); });
} else { } else {
selectTabBind(null); selectTabBind(mNewAddEntity);
} }
} }
break; break;
@@ -166,6 +165,13 @@ public class AddWaterPlanActivity extends BaseActivity<AddWaterPlanLayoutBinding
} }
private void selectTabBind(WaterPlanWeekEntity entity) { private void selectTabBind(WaterPlanWeekEntity entity) {
if (entity == null) {
entity = mIsEditMode ? mEditEntity : mNewAddEntity;
}
if (entity == null) {
ToastUtil.showShort(mContext, "请先保存排程");
return;
}
viewBinding.tvConfig.setSelected(false); viewBinding.tvConfig.setSelected(false);
viewBinding.tvBind.setSelected(true); viewBinding.tvBind.setSelected(true);
viewBinding.viewpage.setCurrentItem(1); viewBinding.viewpage.setCurrentItem(1);
@@ -176,6 +182,7 @@ public class AddWaterPlanActivity extends BaseActivity<AddWaterPlanLayoutBinding
} }
public void onConfigSaved(WaterPlanWeekEntity entity) { public void onConfigSaved(WaterPlanWeekEntity entity) {
mNewAddEntity = entity;
selectTabBind(entity); selectTabBind(entity);
} }

View File

@@ -64,6 +64,10 @@ public class BindDeviceFragment extends BaseFragment<PlanBindDeviceLayoutBinding
public void onClick(View v){ public void onClick(View v){
switch (v.getId()){ switch (v.getId()){
case R.id.tv_commit: case R.id.tv_commit:
if (mPlanEntity == null) {
ToastUtil.showShort(mContext, "请先保存排程");
return;
}
boolean isSelected = false; boolean isSelected = false;
List<String> selected = new ArrayList<>(); List<String> selected = new ArrayList<>();
for(WaterDeviceEntity.DeviceListBean bean : mDeviceList){ for(WaterDeviceEntity.DeviceListBean bean : mDeviceList){

View File

@@ -2,6 +2,7 @@ package com.ckkj.water.plan;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.view.MotionEvent;
import android.view.View; import android.view.View;
import com.ckkj.water.R; import com.ckkj.water.R;
@@ -73,6 +74,22 @@ public class PlanDetailActivity extends BaseActivity<WaterPlanDetailLayoutBindin
setClick(viewBinding.btnEdit); setClick(viewBinding.btnEdit);
setClick(viewBinding.btnDelete); setClick(viewBinding.btnDelete);
setClick(viewBinding.switchButton); setClick(viewBinding.switchButton);
// viewBinding.switchButton.setOnTouchListener(new View.OnTouchListener() {
// @Override
// public boolean onTouch(View v, MotionEvent event) {
// if (event.getAction() == MotionEvent.ACTION_DOWN) {
// if (viewBinding.switchButton.isChecked()) {
// // 当前是开启状态,下一步将是关闭 -> 屏蔽动画时长设为0
// viewBinding.switchButton.setAnimationDuration(0);
// } else {
// // 当前是关闭状态,下一步将是开启 -> 开启动画(恢复默认的 250ms 或你想要的时长)
// viewBinding.switchButton.setAnimationDuration(250);
// }
// }
// // 返回 false 以便将触摸事件继续传递给 SwitchButton 内部的点击/滑动逻辑
// return false;
// }
// });
} }
private void setClick(View view) { private void setClick(View view) {
@@ -136,6 +153,8 @@ public class PlanDetailActivity extends BaseActivity<WaterPlanDetailLayoutBindin
} }
} }
/** /**
* 获取配成详情成功 * 获取配成详情成功
* @param entity * @param entity

View File

@@ -0,0 +1,195 @@
package com.ckkj.water.plan;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.View;
import com.bigkoo.pickerview.builder.TimePickerBuilder;
import com.bigkoo.pickerview.listener.OnTimeSelectListener;
import com.bigkoo.pickerview.view.TimePickerView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.ckkj.water.R;
import com.ckkj.water.base.BaseFragment;
import com.ckkj.water.databinding.WaterConfigFragmentLayoutBinding;
import com.ckkj.water.databinding.WaterConfigFragmentLayoutCopyBinding;
import com.ckkj.water.index.entity.WaterDeviceEntity;
import com.ckkj.water.network.BaseBean;
import com.ckkj.water.plan.adapter.WaterPlanTimeDataAdapter;
import com.ckkj.water.plan.adapter.WaterPlanWeekAdapter;
import com.ckkj.water.plan.adapter.WaterPlanWeekAdapter_copy;
import com.ckkj.water.plan.entity.WaterPlanWeekEntity;
import com.ckkj.water.plan.mvp.WaterPlanContract;
import com.ckkj.water.plan.mvp.WaterPlanImpl;
import com.ckkj.water.plan.mvp.WaterPlanPresenter;
import com.ckkj.water.utils.time.ZYTimeUtils;
import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class WaterConfigFragment_copy extends BaseFragment<WaterConfigFragmentLayoutCopyBinding, WaterPlanPresenter>
implements WaterPlanContract.WaterPlanView {
private List<WaterPlanWeekEntity.DetailsBean> weekList = new ArrayList<>();
private List<WaterPlanWeekEntity.TimeDataBean> timeList = new ArrayList<>();
private WaterPlanWeekAdapter_copy mWeekAdapter;
private WaterPlanTimeDataAdapter mTimeAdapter;
@Override
public void initData(Bundle state) {
List<WaterPlanWeekEntity.DetailsBean> list = new ArrayList<>();
for(int i = 0; i < 7; i++){
WaterPlanWeekEntity.DetailsBean bean = new WaterPlanWeekEntity.DetailsBean();
WaterPlanWeekEntity.TimeDataBean timeData = new WaterPlanWeekEntity.TimeDataBean();
List<WaterPlanWeekEntity.TimeDataBean> timeDataList = new ArrayList<>();
timeDataList.add(timeData);
bean.setTimeData(timeDataList);
bean.setWeekday(i + 1);
bean.setStatus("0");
bean.setWeekName(ZYTimeUtils.getWeekName(i));
list.add(bean);
}
weekList = list;
//顶部周一、周二。。。。。
mWeekAdapter = new WaterPlanWeekAdapter_copy(mContext, R.layout.plan_period_item,list);
viewBinding.rvWeek.setAdapter(mWeekAdapter);
//周期对应的 时间配置
mTimeAdapter = new WaterPlanTimeDataAdapter(mContext,R.layout.include_plan_time_item_layout,timeList);
viewBinding.rvTimes.setAdapter(mTimeAdapter);
initListener();
}
private void initListener() {
setClick(viewBinding.tvCommit);
// viewBinding.etPlanTime.addTextChangedListener(new TextWatcher() {
// @Override
// public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// }
//
// @Override
// public void onTextChanged(CharSequence s, int start, int before, int count) {
// }
//
// @Override
// public void afterTextChanged(Editable s) {
// if(weekList != null){
// String time = s.toString();
// if(TextUtils.isEmpty(time)){
// weekList.get(0).getWashCycleList().get(mWeekAdapter.getmPos()).setDuration("");
// }else{
// weekList.get(0).getWashCycleList().get(mWeekAdapter.getmPos()).setDuration(time);
// }
// }
// }
// });
mWeekAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
mWeekAdapter.setSelPos(position);
}
});
}
private void setClick(View view) {
view.setOnClickListener(this::onClick);
}
public void onClick(View v){
switch (v.getId()){
case R.id.tv_select_time:
boolean times[] = {false, false, false, true, true, false};
//时间选择器
// TimePickerView pvTime = new TimePickerBuilder(mContext, new OnTimeSelectListener() {
// @Override
// public void onTimeSelect(Date date, View v) {
// viewBinding.tvSelectTime.setText(ZYTimeUtils.getStrTimeData_H_M(date));
// if(weekList != null){
// String startTime = ZYTimeUtils.getStrTimeData_H_M(date).trim();
// weekList.get(0).getWashCycleList().get(mWeekAdapter.getmPos()).setTime(startTime);
// }
// }
// }).setType(times)
// .setCancelColor(mContext.getColor(R.color.color_999999))
// .setSubmitColor(mContext.getColor(R.color.color_zhu))
// .setTextColorCenter(mContext.getColor(R.color.color_zhu))
// .build();
// pvTime.show();
break;
case R.id.tv_commit:
break;
}
}
// private List<WaterPlanWeekEntity.DeviceEntity> getSelectedDevices() {
// if (getActivity() instanceof AddWaterPlanActivity) {
// return ((AddWaterPlanActivity) getActivity()).getSelectedDevices();
// }
// return new ArrayList<>();
// }
@Override
public WaterPlanPresenter createPresenter() {
return new WaterPlanPresenter(new WaterPlanImpl());
}
@Override
public void onNetChange(int netModel) {
}
@Override
public void showError(String message) {
}
@Override
public void logOut(BaseBean bean) {
}
@Override
public void getWaterConfigListSuccess(List<WaterPlanWeekEntity> list, int total) {
}
@Override
public void saveConfigSuccess(WaterPlanWeekEntity entity) {
}
@Override
public void updateConfigSuccess(WaterPlanWeekEntity entity) {
}
@Override
public void updatePlanStatusSuccess(BaseBean bean, String status) {
}
@Override
public void getPlanDetailInfo(WaterPlanWeekEntity entity) {
}
@Override
public void getPlanBindDeviceList(WaterDeviceEntity bean) {
}
@Override
public void planBindDeviceSuccess(BaseBean bean) {
}
@Override
public void deletePlanSuccess(BaseBean bean) {
}
}

View File

@@ -0,0 +1,47 @@
package com.ckkj.water.plan.adapter;
import android.content.Context;
import android.text.TextUtils;
import android.widget.CheckBox;
import android.widget.TextView;
import androidx.annotation.Nullable;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.ckkj.water.R;
import com.ckkj.water.plan.entity.WaterPlanWeekEntity;
import java.util.List;
/**
* @author fengxiaoyang
* @date 2026/5/28
* @description TODO: 描述该类的作用
*/
public class WaterPlanTimeDataAdapter extends BaseQuickAdapter<WaterPlanWeekEntity.TimeDataBean, BaseViewHolder> {
private Context mContext;
public WaterPlanTimeDataAdapter(Context context,int layoutResId, @Nullable List<WaterPlanWeekEntity.TimeDataBean> data) {
super(layoutResId, data);
mContext = context;
}
@Override
protected void convert(BaseViewHolder helper, WaterPlanWeekEntity.TimeDataBean item) {
TextView tvStartTime = helper.getView(R.id.tv_select_time);
TextView tvPlanDuration = helper.getView(R.id.tv_plan_duration);
if(!TextUtils.isEmpty(item.getStartTime())){
helper.setText(R.id.tv_select_time, item.getStartTime());
}else{
helper.setText(R.id.tv_select_time,"");
tvStartTime.setHint(mContext.getString(R.string.select_water_time));
}
if(item.getDurationMin() != 0){
helper.setText(R.id.tv_plan_duration,item.getDurationMin() + "");
}else{
helper.setText(R.id.tv_plan_duration,"");
tvPlanDuration.setHint(mContext.getString(R.string.input_water_plan_time));
}
}
}

View File

@@ -0,0 +1,88 @@
package com.ckkj.water.plan.adapter;
import android.content.Context;
import android.text.TextUtils;
import android.widget.CheckBox;
import android.widget.TextView;
import androidx.annotation.Nullable;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.ckkj.water.R;
import com.ckkj.water.plan.entity.WaterPlanWeekEntity;
import java.util.ArrayList;
import java.util.List;
public class WaterPlanWeekAdapter_copy extends BaseQuickAdapter<WaterPlanWeekEntity.DetailsBean, BaseViewHolder> {
private List<WaterPlanWeekEntity.DetailsBean> mList = new ArrayList<>();
private Context mContext;
private int mPos = 0;
public WaterPlanWeekAdapter_copy(Context context, int layoutResId, @Nullable List<WaterPlanWeekEntity.DetailsBean> data) {
super(layoutResId, data);
this.mContext = context;
this.mList = data;
}
@Override
protected void convert(BaseViewHolder helper, WaterPlanWeekEntity.DetailsBean item) {
TextView tvStartTime = helper.getView(R.id.tv_select_time);
CheckBox checkBox = helper.getView(R.id.checkbox);
TextView tvPlanDuration = helper.getView(R.id.tv_plan_duration);
helper.setText(R.id.tv_week_name,item.getWeekName());
if(!TextUtils.isEmpty(item.getStartTime())){
helper.setText(R.id.tv_select_time, item.getStartTime());
}else{
helper.setText(R.id.tv_select_time,"");
tvStartTime.setHint(mContext.getString(R.string.select_water_time));
}
if(item.getDurationMin() != 0){
helper.setText(R.id.tv_plan_duration,item.getDurationMin() + "");
}else{
helper.setText(R.id.tv_plan_duration,"");
tvPlanDuration.setHint(mContext.getString(R.string.input_water_plan_time));
}
if(item.getStatus().equals("1")){
checkBox.setChecked(true);
}else{
checkBox.setChecked(false);
}
helper.addOnClickListener(R.id.linear_week);
helper.addOnClickListener(R.id.checkbox);
helper.addOnClickListener(R.id.tv_select_time);
helper.addOnClickListener(R.id.tv_plan_duration);
// LinearLayout linearItem = helper.getView(R.id.linear_item);
// View viewStatus = helper.getView(R.id.view_status);
// if(helper.getLayoutPosition() == mPos){
// linearItem.setBackground(mContext.getResources().getDrawable(R.drawable.shape_water_period_sel_bg));
// viewStatus.setVisibility(VISIBLE);
// viewStatus.setBackground(mContext.getResources().getDrawable(R.drawable.shape_green_circle));
// }else{
// linearItem.setBackground(null);
// if(!TextUtils.isEmpty(item.getTime()) && !TextUtils.isEmpty(item.getDuration())){
// viewStatus.setVisibility(VISIBLE);
// viewStatus.setBackground(mContext.getResources().getDrawable(R.drawable.shape_yellow_circle));
// }else{
// viewStatus.setVisibility(INVISIBLE);
// viewStatus.setBackground(null);
// }
// }
}
public void setSelPos(int position) {
this.mPos = position;
notifyDataSetChanged();
}
public int getmPos() {
return mPos;
}
}

View File

@@ -29,6 +29,8 @@ public class WaterPlanWeekEntity implements Serializable {
private String status = "1"; private String status = "1";
private List<DetailsBean> details; private List<DetailsBean> details;
@NoArgsConstructor @NoArgsConstructor
@Data @Data
public static class DetailsBean implements Serializable{ public static class DetailsBean implements Serializable{
@@ -62,5 +64,13 @@ public class WaterPlanWeekEntity implements Serializable {
private Object zones; private Object zones;
private String triggerType = "0"; private String triggerType = "0";
private String status = "1"; private String status = "1";
private List<TimeDataBean> timeData;
}
@NoArgsConstructor
@Data
public static class TimeDataBean implements Serializable{
private String startTime = "";
private int durationMin = 0;
} }
} }

View File

@@ -0,0 +1,103 @@
<?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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_15"
android:layout_marginHorizontal="@dimen/dp_20"
android:paddingHorizontal="@dimen/dp_20"
android:orientation="vertical"
android:background="@drawable/shape_water_plan_time_bg">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp"
android:textColor="@color/red"
android:text="*"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_4"
android:textSize="14sp"
android:textColor="@color/color_222222"
android:text="@string/plan_start_time"
android:layout_marginVertical="@dimen/dp_13"/>
<TextView
android:id="@+id/tv_select_time"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="9"
android:gravity="center_vertical"
android:textSize="14sp"
android:textColor="@color/color_222222"
android:layout_marginLeft="@dimen/dp_10"
android:hint="@string/select_water_time"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_24"
android:layout_weight="0.5"
android:src="@mipmap/icon_point_right_wt"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/color_d9d9d9"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp"
android:textColor="@color/red"
android:text="*"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_4"
android:textSize="14sp"
android:textColor="@color/color_222222"
android:text="@string/plan_time"
android:layout_marginVertical="@dimen/dp_13"/>
<EditText
android:id="@+id/et_plan_time"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="9"
android:gravity="center_vertical"
android:textSize="14sp"
android:textColor="@color/color_222222"
android:background="@null"
android:layout_marginLeft="@dimen/dp_10"
android:hint="@string/input_water_plan_time"
android:imeOptions="actionDone"
android:inputType="number"/>
<TextView
android:id="@+id/tv_time_unit"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:gravity="center_vertical|right"
android:textSize="14sp"
android:textColor="@color/color_222222"
android:layout_marginLeft="@dimen/dp_10"
android:hint="min"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>

View File

@@ -0,0 +1,145 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView 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="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:paddingHorizontal="@dimen/dp_30">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp"
android:textColor="@color/red"
android:text="*"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_4"
android:textSize="14sp"
android:textColor="@color/color_222222"
android:text="@string/plan_name_text"
android:layout_marginVertical="@dimen/dp_13"/>
<EditText
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:textSize="14sp"
android:textColor="@color/color_222222"
android:background="@null"
android:layout_marginLeft="@dimen/dp_10"
android:hint="@string/input_plan_name"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/dp_1"
android:background="@color/color_f5f5f5"
android:layout_marginHorizontal="@dimen/dp_30"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:paddingHorizontal="@dimen/dp_30">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp"
android:textColor="@color/red"
android:text="*"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_4"
android:textSize="14sp"
android:textColor="@color/color_222222"
android:text="@string/plan_period"
android:layout_marginVertical="@dimen/dp_13"/>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_week"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_12"
android:layout_gravity="center"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
tools:listitem="@layout/plan_period_item"
tools:itemCount="7"
app:spanCount="7"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:paddingHorizontal="@dimen/dp_20">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_4"
android:textSize="14sp"
android:textColor="@color/color_222222"
android:text="@string/device_control_start"
android:layout_marginVertical="@dimen/dp_13"/>
<View
android:layout_width="0dp"
android:layout_height="2dp"
android:layout_weight="1"/>
<com.kyleduo.switchbutton.SwitchButton
android:id="@+id/switch_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
app:kswThumbColor="@android:color/white"
android:checked="true"
app:kswBackDrawable="@drawable/switch_bg"
app:kswFadeBack="true"/>
</LinearLayout>
<com.yanzhenjie.recyclerview.SwipeRecyclerView
android:id="@+id/rv_times"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:listitem="@layout/include_plan_time_item_layout"
tools:itemCount="3"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"/>
<ImageView
android:layout_width="@dimen/dp_45"
android:layout_height="@dimen/dp_45"
android:src="@mipmap/icon_add_time"
android:layout_marginTop="@dimen/dp_10"/>
<TextView
android:id="@+id/tv_commit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="14sp"
android:textColor="@color/white"
android:text="@string/button_save"
android:background="@drawable/shape_green_button_bg"
android:paddingVertical="@dimen/dp_10"
android:layout_marginHorizontal="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_40"
android:gravity="center"/>
</LinearLayout>
</androidx.core.widget.NestedScrollView>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB