修复列表项宽度初始化问题
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
| @@ -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); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -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(); | ||||
|     } | ||||
|      | ||||
|      | ||||
| } | ||||
|   | ||||
| @@ -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; | ||||
|     } | ||||
|      | ||||
|   | ||||
| @@ -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; | ||||
|             } | ||||
|   | ||||
| @@ -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); | ||||
|     } | ||||
| @@ -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; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										8
									
								
								positions/src/main/res/drawable/recycler_view_border.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								positions/src/main/res/drawable/recycler_view_border.xml
									
									
									
									
									
										Normal 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> | ||||
| @@ -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> | ||||
|  | ||||
|   | ||||
							
								
								
									
										57
									
								
								positions/src/main/res/layout/view_left_scroll.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								positions/src/main/res/layout/view_left_scroll.xml
									
									
									
									
									
										Normal 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> | ||||
|  | ||||
							
								
								
									
										68
									
								
								positions/src/main/res/layout/view_position.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								positions/src/main/res/layout/view_position.xml
									
									
									
									
									
										Normal 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> | ||||
|  | ||||
							
								
								
									
										15
									
								
								positions/src/main/res/layout/view_position_simple.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								positions/src/main/res/layout/view_position_simple.xml
									
									
									
									
									
										Normal 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> | ||||
| @@ -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> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 ZhanGSKen
					ZhanGSKen