修复列表项宽度初始化问题

This commit is contained in:
ZhanGSKen 2025-04-05 10:52:24 +08:00
parent 5cb4f6c409
commit 4b9f34b946
13 changed files with 782 additions and 125 deletions

View File

@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
#Fri Apr 04 05:21:19 GMT 2025
#Sat Apr 05 02:50:45 GMT 2025
stageCount=0
libraryProject=
baseVersion=1.0
publishVersion=1.0.0
buildCount=412
buildCount=438
baseBetaVersion=1.0.1

View File

@ -0,0 +1,247 @@
package cc.winboll.studio.positions.adapters;
/**
* @Author ZhanGSKen@AliYun.Com
* @Date 2025/04/04 13:38:13
*/
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.dialogs.YesNoAlertDialog;
import cc.winboll.studio.libappbase.utils.ToastUtils;
import cc.winboll.studio.positions.R;
import cc.winboll.studio.positions.models.PostionModel;
import cc.winboll.studio.positions.utils.PostionUtils;
import cc.winboll.studio.positions.views.LeftScrollView;
import java.util.ArrayList;
public class PostionModelAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
public static final String TAG = "PostionModelAdapter";
private static final int VIEW_TYPE_SIMPLE = 0;
private static final int VIEW_TYPE_EDIT = 1;
private Context context;
private ArrayList<PostionModel> mPostionList;
public PostionModelAdapter(Context context, ArrayList<PostionModel> postionList) {
this.context = context;
this.mPostionList = postionList;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(context);
if (viewType == VIEW_TYPE_SIMPLE) {
View view = inflater.inflate(R.layout.view_position_simple, parent, false);
return new SimpleViewHolder(parent, view);
} else {
View view = inflater.inflate(R.layout.view_position, parent, false);
return new EditViewHolder(parent, view);
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) {
final PostionModel model = mPostionList.get(position);
if (holder instanceof SimpleViewHolder) {
final SimpleViewHolder simpleViewHolder = (SimpleViewHolder) holder;
String szView = model.getComments().trim().equals("") ?"[NULL]": model.getComments();
simpleViewHolder.tvComments.setText(szView);
simpleViewHolder.scrollView.setOnActionListener(new LeftScrollView.OnActionListener(){
@Override
public void onUp() {
ArrayList<PostionModel> list = mPostionList;
if (position > 0) {
ToastUtils.show("onUp");
simpleViewHolder.scrollView.smoothScrollTo(0, 0);
// PhoneConnectRuleModel newBean = new PhoneConnectRuleModel();
// newBean.setRuleText(list.get(position).getRuleText());
// newBean.setIsAllowConnection(list.get(position).isAllowConnection());
// newBean.setIsEnable(list.get(position).isEnable());
// newBean.setIsSimpleView(list.get(position).isSimpleView());
list.add(position - 1, list.get(position));
list.remove(position + 1);
PostionUtils.getInstance(context).savePostionModelList();
notifyDataSetChanged();
}
}
@Override
public void onDown() {
ArrayList<PostionModel> list = mPostionList;
if (position < list.size() - 1) {
ToastUtils.show("onDown");
simpleViewHolder.scrollView.smoothScrollTo(0, 0);
// PhoneConnectRuleModel newBean = new PhoneConnectRuleModel();
// newBean.setRuleText(list.get(position).getRuleText());
// newBean.setIsAllowConnection(list.get(position).isAllowConnection());
// newBean.setIsEnable(list.get(position).isEnable());
// newBean.setIsSimpleView(list.get(position).isSimpleView());
list.add(position + 2, list.get(position));
list.remove(position);
PostionUtils.getInstance(context).savePostionModelList();
notifyDataSetChanged();
}
}
@Override
public void onEdit() {
simpleViewHolder.scrollView.smoothScrollTo(0, 0);
model.setIsSimpleView(false);
notifyDataSetChanged();
//notifyItemChanged(position);
}
@Override
public void onDelete() {
YesNoAlertDialog.show(simpleViewHolder.scrollView.getContext(), "删除确认", "是否删除该通话规则?", new YesNoAlertDialog.OnDialogResultListener(){
@Override
public void onYes() {
simpleViewHolder.scrollView.smoothScrollTo(0, 0);
model.setIsSimpleView(true);
ArrayList<PostionModel> list = mPostionList;
list.remove(position);
PostionUtils.getInstance(context).savePostionModelList();
notifyDataSetChanged();
//notifyItemChanged(position);
}
@Override
public void onNo() {
}
});
}
});
// simpleViewHolder.editButton.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// model.setIsSimpleView(false);
// notifyItemChanged(position);
// }
// });
// simpleViewHolder.deleteButton.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// model.setIsSimpleView(false);
// ArrayList<PhoneConnectRuleModel> list = Rules.getInstance(context).getPhoneBlacRuleBeanList();
// list.remove(position);
// Rules.getInstance(context).saveRules();
// notifyItemChanged(position);
// }
// });
// // 触摸事件处理
// simpleViewHolder.contentLayout.setOnTouchListener(new View.OnTouchListener() {
// @Override
// public boolean onTouch(View v, MotionEvent event) {
// switch (event.getAction()) {
// case MotionEvent.ACTION_DOWN:
// simpleViewHolder.startX = event.getX();
// simpleViewHolder.isSwiping = true;
// break;
// case MotionEvent.ACTION_MOVE:
// if (simpleViewHolder.isSwiping) {
// float deltaX = simpleViewHolder.startX - event.getX();
// if (deltaX > 0) { // 左滑
// float translationX = Math.max(-simpleViewHolder.actionLayout.getWidth(), -deltaX);
// simpleViewHolder.contentLayout.setTranslationX(translationX);
// simpleViewHolder.actionLayout.setVisibility(View.VISIBLE);
// }
// }
// break;
// case MotionEvent.ACTION_UP:
// simpleViewHolder.isSwiping = false;
// if (simpleViewHolder.contentLayout.getTranslationX() < -simpleViewHolder.actionLayout.getWidth() / 2) {
// // 保持按钮显示
// simpleViewHolder.contentLayout.setTranslationX(-actionLayout.getWidth());
// } else {
// // 恢复原状
// simpleViewHolder.contentLayout.animate().translationX(0).setDuration(200).start();
// simpleViewHolder.actionLayout.setVisibility(View.INVISIBLE);
// }
// break;
// }
// return true;
// }
// });
} else if (holder instanceof EditViewHolder) {
final EditViewHolder editViewHolder = (EditViewHolder) holder;
editViewHolder.etComments.setText(model.getComments());
editViewHolder.swEnable.setChecked(model.isEnable());
editViewHolder.btnConfirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
model.setComments(editViewHolder.etComments.getText().toString());
model.setIsEnable(editViewHolder.swEnable.isChecked());
model.setIsSimpleView(true);
PostionUtils.getInstance(context).savePostionModelList();
notifyItemChanged(position);
Toast.makeText(context, "保存成功", Toast.LENGTH_SHORT).show();
}
});
}
}
@Override
public int getItemCount() {
return mPostionList.size();
}
@Override
public int getItemViewType(int position) {
PostionModel model = mPostionList.get(position);
// 这里可以根据模型的状态来决定视图类型简单起见假设点击按钮后进入编辑视图
return model.isSimpleView() ? VIEW_TYPE_SIMPLE : VIEW_TYPE_EDIT;
}
static class SimpleViewHolder extends RecyclerView.ViewHolder {
private final LeftScrollView scrollView;
private final TextView tvComments;
public SimpleViewHolder(@NonNull ViewGroup parent, @NonNull View itemView) {
super(itemView);
scrollView = itemView.findViewById(R.id.scrollView);
//tvRuleText = itemView.findViewById(R.id.ruletext_tv);
tvComments = new TextView(itemView.getContext());
//tvComments.setBackgroundColor(Color.GRAY);
LogUtils.d(TAG, String.format("getWidth() %d", parent.getWidth()));
scrollView.setContentWidth(parent.getWidth());
//scrollView.setContentWidth(600);
scrollView.addContentLayout(tvComments);
}
}
static class EditViewHolder extends RecyclerView.ViewHolder {
EditText etComments;
Switch swEnable;
Button btnMoveCarema;
Button btnConfirm;
public EditViewHolder(@NonNull ViewGroup parent, @NonNull View itemView) {
super(itemView);
etComments = itemView.findViewById(R.id.comments_et);
swEnable = itemView.findViewById(R.id.enable_sw);
btnMoveCarema = itemView.findViewById(R.id.movecarema_btn);
btnConfirm = itemView.findViewById(R.id.confirm_btn);
}
}
}

View File

@ -21,6 +21,8 @@ public class LogFragment extends Fragment {
private static final String ARG_PAGE = "ARG_PAGE";
private int mPage;
LogView mLogView;
// public static LogFragment newInstance(int page) {
// Bundle args = new Bundle();
@ -43,8 +45,16 @@ public class LogFragment extends Fragment {
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_log, container, false);
// LogView logView = view.findViewById(R.id.logview);
// logView.start();
mLogView = view.findViewById(R.id.logview);
mLogView.start();
return view;
}
@Override
public void onResume() {
super.onResume();
mLogView.start();
}
}

View File

@ -6,13 +6,16 @@ package cc.winboll.studio.positions.fragments;
* @Describe 联系人
*/
import android.Manifest;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.IBinder;
import android.os.SystemClock;
import android.view.LayoutInflater;
import android.view.Menu;
@ -21,28 +24,26 @@ import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Switch;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.utils.ToastUtils;
import cc.winboll.studio.positions.R;
import cc.winboll.studio.positions.models.PostionFixModel;
import cc.winboll.studio.positions.utils.LocationFusion;
import cc.winboll.studio.positions.utils.TimeUtils;
import android.widget.EditText;
import android.widget.Switch;
import android.content.Intent;
import cc.winboll.studio.positions.services.GPSService;
import android.content.Context;
import android.content.ServiceConnection;
import android.content.ComponentName;
import android.os.IBinder;
import cc.winboll.studio.positions.listeners.OnGPSRTLocationListener;
import cc.winboll.studio.positions.MainActivity;
import cc.winboll.studio.positions.views.PostionUtils;
import cc.winboll.studio.positions.R;
import cc.winboll.studio.positions.adapters.PostionModelAdapter;
import cc.winboll.studio.positions.listeners.OnGPSRTLocationListener;
import cc.winboll.studio.positions.models.PostionFixModel;
import cc.winboll.studio.positions.models.PostionModel;
import cc.winboll.studio.positions.services.GPSService;
import cc.winboll.studio.positions.utils.LocationFusion;
import cc.winboll.studio.positions.utils.PostionUtils;
import java.util.ArrayList;
public class PositionsFragment extends Fragment {
@ -52,6 +53,7 @@ public class PositionsFragment extends Fragment {
private int mPage;
private LocationManager locationManager;
//MyHandler mMyHandler;
@ -63,6 +65,9 @@ public class PositionsFragment extends Fragment {
Button mbtnAdd;
Location mLocationTX;
Location mLocationPhoneGPS;
private RecyclerView recyclerView;
private PostionModelAdapter adapter;
private ArrayList<PostionModel> mPostionList;
TextView mtvPostionFixModelInfo;
TextView mtvLockPostionInfo;
@ -135,6 +140,15 @@ public class PositionsFragment extends Fragment {
postionUtils.addPostion(mLocationPhoneGPS);
}
});
recyclerView = viewMain.findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
mPostionList = PostionUtils.getInstance(getActivity()).getPostionModelList();
adapter = new PostionModelAdapter(getActivity(), mPostionList);
recyclerView.setAdapter(adapter);
// metLockLatitude = viewMain.findViewById(R.id.locklatitude_et);
// metLockLongitude = viewMain.findViewById(R.id.locklongitude_et);
@ -174,7 +188,6 @@ public class PositionsFragment extends Fragment {
//showLocationPhoneGPS();
//showPostionFixModelInfo();
return viewMain;
}

View File

@ -27,6 +27,9 @@ public class PostionModel extends BaseBean {
// 精确度
private double accuracy;
private String provider;
private String comments;
private boolean isEnable;
private boolean isSimpleView;
public PostionModel() {
this.uuid = UUID.randomUUID().toString();
@ -35,6 +38,9 @@ public class PostionModel extends BaseBean {
this.timestamp = 0L;
this.accuracy = 0.0f;
this.provider = "";
this.comments = "";
this.isEnable = false;
this.isSimpleView = true;
}
public PostionModel(Location location) {
@ -44,6 +50,33 @@ public class PostionModel extends BaseBean {
this.timestamp = location.getTime();
this.accuracy = location.getAccuracy();
this.provider = location.getProvider();
this.comments = "";
this.isEnable = false;
this.isSimpleView = true;
}
public void setIsEnable(boolean isEnable) {
this.isEnable = isEnable;
}
public boolean isEnable() {
return isEnable;
}
public void setComments(String comments) {
this.comments = comments;
}
public String getComments() {
return comments;
}
public void setIsSimpleView(boolean isSimpleView) {
this.isSimpleView = isSimpleView;
}
public boolean isSimpleView() {
return isSimpleView;
}
public void setUuid(String uuid) {
@ -109,6 +142,9 @@ public class PostionModel extends BaseBean {
jsonWriter.name("timestamp").value(getTimestamp());
jsonWriter.name("accuracy").value(getAccuracy());
jsonWriter.name("provider").value(getProvider());
jsonWriter.name("comments").value(getComments());
jsonWriter.name("isEnable").value(isEnable());
jsonWriter.name("isSimpleView").value(isSimpleView());
}
@ -127,6 +163,12 @@ public class PostionModel extends BaseBean {
setAccuracy(jsonReader.nextDouble());
} else if (name.equals("provider")) {
setProvider(jsonReader.nextString());
} else if (name.equals("comments")) {
setComments(jsonReader.nextString());
} else if (name.equals("isEnable")) {
setIsEnable(jsonReader.nextBoolean());
} else if (name.equals("isSimpleView")) {
setIsSimpleView(jsonReader.nextBoolean());
} else {
return false;
}

View File

@ -1,4 +1,4 @@
package cc.winboll.studio.positions.views;
package cc.winboll.studio.positions.utils;
/**
* @Author ZhanGSKen@AliYun.Com
@ -23,7 +23,7 @@ public class PostionUtils {
mContext = context;
PostionModel.loadBeanList(mContext, mPostionModelList, PostionModel.class);
}
public synchronized static PostionUtils getInstance(Context context) {
if (_PostionUtils == null) {
_PostionUtils = new PostionUtils(context);
@ -31,11 +31,19 @@ public class PostionUtils {
return _PostionUtils;
}
public ArrayList<PostionModel> getPostionModelList() {
return mPostionModelList;
}
public void savePostionModelList() {
PostionModel.saveBeanList(mContext, mPostionModelList, PostionModel.class);
}
public void addPostion(PostionModel item) {
mPostionModelList.add(item);
PostionModel.saveBeanList(mContext, mPostionModelList, PostionModel.class);
}
public void addPostion(Location location) {
PostionModel item = new PostionModel();
item.setLatitude(location.getLatitude());
@ -43,7 +51,7 @@ public class PostionUtils {
item.setTimestamp(location.getTime());
item.setAccuracy(location.getAccuracy());
item.setProvider(location.getProvider());
mPostionModelList.add(item);
PostionModel.saveBeanList(mContext, mPostionModelList, PostionModel.class);
}

View File

@ -0,0 +1,219 @@
package cc.winboll.studio.positions.views;
/**
* @Author ZhanGSKen@AliYun.Com
* @Date 2025/03/04 10:51:50
* @Describe CustomHorizontalScrollView
*/
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;
import android.widget.TextView;
import cc.winboll.studio.positions.R;
import cc.winboll.studio.libappbase.LogUtils;
public class LeftScrollView extends HorizontalScrollView {
public static final String TAG = "LeftScrollView";
private LinearLayout contentLayout;
private LinearLayout toolLayout;
private TextView textView;
private Button editButton;
private Button deleteButton;
private Button upButton;
private Button downButton;
private float mStartX;
private float mEndX;
private boolean isScrolling = false;
private int nScrollAcceptSize;
public LeftScrollView(Context context) {
super(context);
init();
}
public LeftScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public LeftScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
public void addContentLayout(TextView textView) {
contentLayout.addView(textView, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
}
public void setContentWidth(int contentWidth) {
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) contentLayout.getLayoutParams();
layoutParams.width = contentWidth;
contentLayout.setLayoutParams(layoutParams);
}
private void init() {
View viewMain = inflate(getContext(), R.layout.view_left_scroll, null);
// 创建内容布局
contentLayout = viewMain.findViewById(R.id.content_layout);
toolLayout = viewMain.findViewById(R.id.action_layout);
//LogUtils.d(TAG, String.format("getWidth() %d", getWidth()));
addView(viewMain);
// 创建编辑按钮
editButton = viewMain.findViewById(R.id.edit_btn);
// 创建删除按钮
deleteButton = viewMain.findViewById(R.id.delete_btn);
// 向上按钮
upButton = viewMain.findViewById(R.id.up_btn);
// 向下按钮
downButton = viewMain.findViewById(R.id.down_btn);
// 编辑按钮点击事件
editButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (onActionListener != null) {
onActionListener.onEdit();
}
}
});
// 删除按钮点击事件
deleteButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (onActionListener != null) {
onActionListener.onDelete();
}
}
});
// 编辑按钮点击事件
upButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (onActionListener != null) {
onActionListener.onUp();
}
}
});
// 删除按钮点击事件
downButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (onActionListener != null) {
onActionListener.onDown();
}
}
});
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
LogUtils.d(TAG, "ACTION_DOWN");
mStartX = event.getX();
// isScrolling = false;
break;
case MotionEvent.ACTION_MOVE:
//LogUtils.d(TAG, "ACTION_MOVE");
// float currentX = event.getX();
// float deltaX = mStartX - currentX;
// //mLastX = currentX;
// if (Math.abs(deltaX) > 0) {
// isScrolling = true;
// }
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
if (getScrollX() > 0) {
LogUtils.d(TAG, "ACTION_UP");
mEndX = event.getX();
LogUtils.d(TAG, String.format("mStartX %f, mEndX %f", mStartX, mEndX));
if (mEndX < mStartX) {
LogUtils.d(TAG, String.format("mEndX >= mStartX \ngetScrollX() %d", getScrollX()));
//if (getScrollX() > editButton.getWidth()) {
if (Math.abs(mStartX - mEndX) > editButton.getWidth()) {
smoothScrollToRight();
} else {
smoothScrollToLeft();
}
} else {
LogUtils.d(TAG, String.format("mEndX >= mStartX \ngetScrollX() %d", getScrollX()));
//if (getScrollX() > deleteButton.getWidth()) {
if (Math.abs(mEndX - mStartX) > deleteButton.getWidth()) {
smoothScrollToLeft();
} else {
smoothScrollToRight();
}
}
}
break;
}
return super.onTouchEvent(event);
}
void smoothScrollToRight() {
mEndX = 0;
mStartX = 0;
View childView = getChildAt(0);
if (childView != null) {
// 计算需要滑动到最右边的距离
int scrollToX = childView.getWidth() - getWidth();
// 确保滑动距离不小于0
final int scrollToX2 = Math.max(0, scrollToX);
// 平滑滑动到最右边
post(new Runnable() {
@Override
public void run() {
smoothScrollTo(scrollToX2, 0);
LogUtils.d(TAG, "smoothScrollTo(0, 0);");
}
});
LogUtils.d(TAG, "smoothScrollTo(scrollToX, 0);");
}
}
void smoothScrollToLeft() {
mEndX = 0;
mStartX = 0;
// 在手指抬起时使用 post 方法调用 smoothScrollTo(0, 0)
post(new Runnable() {
@Override
public void run() {
smoothScrollTo(0, 0);
LogUtils.d(TAG, "smoothScrollTo(0, 0);");
}
});
}
// 设置文本内容
public void setText(CharSequence text) {
textView.setText(text);
}
// 定义回调接口
public interface OnActionListener {
void onEdit();
void onDelete();
void onUp();
void onDown();
}
private OnActionListener onActionListener;
public void setOnActionListener(OnActionListener listener) {
this.onActionListener = listener;
}
}

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke
android:width="1dp"
android:color="#000000" /> <!-- 设置边框宽度和颜色,这里是黑色 1dp 边框 -->
<solid android:color="#ffffff" /> <!-- 设置背景颜色,这里是白色 -->
</shape>

View File

@ -9,113 +9,77 @@
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="80dp"
android:padding="10dp"
android:gravity="center_vertical">
<LinearLayout
android:orientation="vertical"
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="match_parent">
<LinearLayout
android:orientation="horizontal"
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:gravity="center_vertical">
android:text="Text"
android:id="@+id/txmylocationinfo_tv"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Text"
android:id="@+id/txmylocationinfo_tv"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Text"
android:id="@+id/phonegpsinfo_tv"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="right">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="۞"
android:id="@+id/txrt_btn"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+"
android:id="@+id/add_btn"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Latitude:"/>
<EditText
android:layout_width="0dp"
android:ems="10"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:id="@+id/locklatitude_et"
android:singleLine="true"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Longitude:"/>
<EditText
android:layout_width="0dp"
android:ems="10"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:id="@+id/locklongitude_et"
android:singleLine="true"/>
</LinearLayout>
<Switch
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="启用提醒服务"
android:id="@+id/taskservice_sw"/>
</LinearLayout>
</ScrollView>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="80dp"
android:padding="10dp">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Text"
android:id="@+id/phonegpsinfo_tv"/>
</ScrollView>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="right|center_vertical">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="۞"
android:id="@+id/txrt_btn"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+"
android:id="@+id/add_btn"/>
<Switch
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="提醒服务总开关"
android:id="@+id/taskservice_sw"/>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="@drawable/recycler_view_border"
android:layout_margin="5dp"
android:layout_weight="1.0"/>
</LinearLayout>

View File

@ -0,0 +1,57 @@
<?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"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="@drawable/recycler_view_border">
<LinearLayout
android:id="@+id/content_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
android:background="@color/white">
</LinearLayout>
<LinearLayout
android:id="@+id/action_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="@color/lightgray">
<Button
android:id="@+id/edit_btn"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:text="编辑"
android:background="@color/blue"/>
<Button
android:id="@+id/up_btn"
android:layout_width="40dp"
android:layout_height="wrap_content"
android:text="△"
android:background="@color/green"/>
<Button
android:id="@+id/down_btn"
android:layout_width="40dp"
android:layout_height="wrap_content"
android:text="▽"
android:background="@color/green"/>
<Button
android:id="@+id/delete_btn"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:text="删除"
android:background="@color/red"/>
</LinearLayout>
</LinearLayout>

View File

@ -0,0 +1,68 @@
<?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"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="备注:"
android:id="@+id/comments_tv"/>
<EditText
android:layout_width="0dp"
android:ems="10"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:id="@+id/comments_et"/>
<Switch
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/enable_sw"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="UUID :"/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Text"
android:id="@+id/uuid_tv"
android:layout_weight="1.0"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="۞"
android:id="@+id/movecarema_btn"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="√"
android:id="@+id/confirm_btn"/>
</LinearLayout>
</LinearLayout>

View File

@ -0,0 +1,15 @@
<?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"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="2dp">
<cc.winboll.studio.positions.views.LeftScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/scrollView"/>
</LinearLayout>

View File

@ -5,4 +5,10 @@
<color name="colorAccent">#FF4081</color>
<color name="style">#4ddad589</color>
<color name="color_C71585">#C71585</color>
<color name="blue">#FF379AFF</color>
<color name="green">#FF69E551</color>
<color name="red">#FFE55151</color>
<color name="white">#FFFFFFFF</color>
<color name="lightgray">#FFE0E0E0</color>
</resources>