.idea/deploymentTargetDropDown.xml
File was deleted app/build.gradle
@@ -8,8 +8,8 @@ applicationId "com.application.zhangshi_app_android" minSdk 24 targetSdk 33 versionCode 7 versionName "1.0.6" versionCode 8 versionName "1.0.7" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" ndk { //APP的build.gradle设置支持的SO库架构 @@ -48,6 +48,13 @@ dataBinding = true viewBinding true } android.applicationVariants.all { variant -> variant.outputs.all { def createTime = new Date().format("YYYYMMdd", TimeZone.getTimeZone("GMT+08:00")) def fileName = "Bendudu${createTime}.apk" outputFileName = fileName } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 app/src/main/java/com/application/zhangshi_app_android/bean/TourismBean.java
@@ -38,6 +38,8 @@ private double groupTotal; //总金额 private double totalPrice; //感言 private String spee; public String getId() { return id; @@ -150,4 +152,12 @@ public void setTotalPrice(double totalPrice) { this.totalPrice = totalPrice; } public String getSpee() { return spee; } public void setSpee(String spee) { this.spee = spee; } } app/src/main/java/com/application/zhangshi_app_android/bean/TourismExperienceBean.java
@@ -28,6 +28,10 @@ private double eat; //交通费 private double travel; //其他费用 private double otherCost; //备注 private String backInfo; //电子文件 private String url; //出行方式 @@ -148,4 +152,20 @@ public void setScenic(String scenic) { this.scenic = scenic; } public double getOtherCost() { return otherCost; } public void setOtherCost(double otherCost) { this.otherCost = otherCost; } public String getBackInfo() { return backInfo; } public void setBackInfo(String backInfo) { this.backInfo = backInfo; } } app/src/main/java/com/application/zhangshi_app_android/ui/function/HomeDevicesDetailActivity.java
@@ -278,8 +278,11 @@ @Override public void initData() { // 新增不需要获取备忘录 if (type != 1){ viewModel.getMemos(); } } @Override public void initLiveDataObserve() { app/src/main/java/com/application/zhangshi_app_android/ui/function/HomeDevicesDetailActivityViewModel.java
@@ -7,6 +7,7 @@ import androidx.annotation.NonNull; import androidx.lifecycle.MutableLiveData; import com.android.app_base.base.BaseConfig; import com.android.app_base.base.StateViewEnum; import com.android.app_base.base.viewmodel.BaseViewModel; import com.android.app_base.http.ResultData; @@ -335,7 +336,7 @@ if (beanLiveData.getValue() == null) { return; } model.getMemos("2017", String.valueOf(beanLiveData.getValue().getId())) model.getMemos(BaseConfig.MEMO_FID_HOME_DEVICES+"", String.valueOf(beanLiveData.getValue().getId())) .compose(RxUtils.schedulersTransformer()) .subscribe(new Observer<ResultData<List<MemoBean>>>() { @Override app/src/main/java/com/application/zhangshi_app_android/widget/Node.java
@@ -96,7 +96,7 @@ if (this.parent!=null){ throw new RuntimeException("只能初始化根节点"); } //根据可见性找到最后一个第一子节点,即最上边的节点 //根据可见性找到最后一个第一子节点,即最右上边的节点 setViewPositionRecursion(getVisibleTopNode(), this,x,y); } @@ -116,12 +116,17 @@ } //因为 y 是整颗节点树的y坐标,正常情况下,y都会是 顶部节点topNode 的y坐标 //但是 有一种情况,就是顶部节点topNode刚好是根节点rootNode的唯一子节点,且topNode没有配偶,此时topNode的高度比rootNode的高度小,所以此时的y是rootNode的y坐标 int centerY; if (rootNode.height >= topNode.height && rootNode == topNode.parent && rootNode.children.size() == 1){ centerY = y + rootNode.getAllVisibleHeight()/2; }else { centerY = y + topNode.getAllVisibleHeight()/2; int centerY = y + topNode.getAllVisibleHeight()/2; //但是 有一种情况,就是顶部节点topNode没有配偶,如果topNode的祖先节点有配偶,且没有多子孙,此时topNode的高度比有配偶的祖先节点的高度小,所以此时的y是高度最高的祖先节点的y坐标 if (topNode instanceof SimpleNode){ Node tempNode = topNode.parent; while (tempNode.children.size() == 1){ if (tempNode.height > topNode.height){ centerY = y + tempNode.getAllVisibleHeight()/2; break; } tempNode = tempNode.parent; } } topNode.setViewPosition(x + topNode.getToSpecifyNodeWidth(rootNode) - topNode.width, centerY); // 根据topNode的位置,递归设置所有节点的位置 @@ -133,7 +138,7 @@ for (Node child : parentNode.children) { if (child == node) { centerYList.add(child.centerY); currentBottom = currentBottom + node.getVisibleTopNode().top + node.getAllVisibleHeight(); currentBottom = currentBottom + child.getVisibleTop() + child.getAllVisibleHeight(); continue; } if (!child.isVisible){ @@ -148,7 +153,7 @@ //取最大值、最小值 和 的中间 int totalCenterY = 0; if (centerYList.size() > 0) { if (centerYList.size() > 1) { int min = centerYList.get(0); int max = centerYList.get(0); for (int i = 1; i < centerYList.size(); i++) { @@ -161,6 +166,8 @@ } } totalCenterY = (min + max) / 2; }else{ totalCenterY = centerYList.get(0); } if (parentNode.children.size() > 1) { @@ -174,7 +181,21 @@ node = parentNode; } } //获取 以当前节点为根节点的树 的最顶部的y坐标 public int getVisibleTop(){ if (!isVisible){ return 0; } if (!isExpand){ return top; } if (children.size() > 0){ return Math.min(top,children.get(0).getVisibleTop()); } return top; } //获取 以当前节点为根节点的树 的最深一节点 public Node getVisibleTopNode(){ Node topNode; if (!isVisible){ @@ -420,10 +441,12 @@ }else { int heightSum = 0; for (Node child : node.children) { if (getNodeTreeHeightRecursion(child,considerVisible)!=0){ int childHeight = getNodeTreeHeightRecursion(child,considerVisible); //如果有多个子节点且子节点有高度,那么子节点之间还有竖直间隔 if (node.children.size() > 1 && childHeight > 0){ heightSum += verticalMargin; } heightSum += getNodeTreeHeightRecursion(child,considerVisible); heightSum += childHeight; } //子节点每两个之间还有竖直间隔 return Math.max(node.height,heightSum); app/src/main/res/layout/acitivity_tourism_experience_detail.xml
@@ -267,6 +267,69 @@ </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="12dp" > <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="其他费用" android:textColor="#767375" android:textSize="12sp" /> <EditText android:id="@+id/et_other" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="numberDecimal" android:textColorHint="#6b000000" android:textColor="#DE000000" android:text="@={viewModel.beanLiveData.otherCost}" android:hint="0" app:need_modify_null="@{true}" android:textSize="16sp" android:maxLines="1" android:enabled="@{viewModel.typeLiveData}" /> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical" android:layout_marginStart="40dp" > </LinearLayout> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_marginTop="10dp" android:layout_height="wrap_content" android:text="备注" android:textColor="#767375" android:textSize="12sp" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:inputType="text" android:textColorHint="#6b000000" android:hint="@{viewModel.typeLiveData?`请输入备注`:``}" android:textColor="#DE000000" android:text="@={viewModel.beanLiveData.backInfo}" android:textSize="16sp" android:enabled="@{viewModel.typeLiveData}" /> <TextView android:layout_width="wrap_content" android:layout_marginTop="10dp" app/src/main/res/layout/activity_tourism_detail.xml
@@ -425,6 +425,35 @@ </LinearLayout> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_marginTop="10dp" android:layout_height="wrap_content" android:text="感言" android:textColor="#767375" android:textSize="12sp" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/shape_6b0000_stroke" android:padding="10dp" > <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:autofillHints="creditCardNumber" android:hint="@{viewModel.typeLiveData?`请输入感言`:``}" android:textColorHint="#6b000000" android:textColor="#DE000000" android:textSize="16sp" android:text="@={viewModel.beanLiveData.spee}" android:enabled="@{viewModel.typeLiveData}" android:inputType="textMultiLine" android:background="@null" /> </RelativeLayout> </LinearLayout> </ScrollView> app/src/main/res/layout/item_tourism_experience.xml
@@ -270,6 +270,31 @@ android:textSize="12sp" /> </LinearLayout> <LinearLayout android:id="@+id/layout_6" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintTop_toBottomOf="@id/layout_4" app:layout_constraintStart_toStartOf="@id/layout_4" android:layout_marginTop="6dp" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="其他费用:" android:textColor="@color/black" android:textSize="12sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{bean.otherCost}" android:textColor="@color/black" android:textSize="12sp" /> </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout> <TextView app/zhangshiappwithca.keystore.jksBinary files differ
gradle.properties
@@ -24,7 +24,7 @@ android.injected.testOnly=false KEY_PATH=zhangshiapp.keystore.jks KEY_PATH=zhangshiappwithca.keystore.jks KEY_PASS=123456 ALIAS_NAME=alias ALIAS_PASS=123456