From 7efd933416e8cf199cc9b84c6de73de1784aefad Mon Sep 17 00:00:00 2001 From: userGyl Date: Thu, 9 Apr 2026 14:05:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/lnkj/ln_jq_app/NativeMapView.java | 106 +++++++++++++----- .../app/src/main/res/drawable/ic_fuel.png | Bin 1150 -> 1099 bytes .../app/src/main/res/drawable/ic_mileage.png | Bin 1102 -> 781 bytes .../app/src/main/res/drawable/ic_person.png | Bin 0 -> 762 bytes .../app/src/main/res/drawable/ic_phone.png | Bin 0 -> 865 bytes .../app/src/main/res/drawable/ic_price.png | Bin 0 -> 1215 bytes .../app/src/main/res/drawable/ic_time.png | Bin 810 -> 1121 bytes .../app/src/main/res/drawable/ic_toll.png | Bin 924 -> 791 bytes .../lib/pages/c_page/base_widgets/view.dart | 3 +- 9 files changed, 81 insertions(+), 28 deletions(-) create mode 100644 ln_jq_app/android/app/src/main/res/drawable/ic_person.png create mode 100644 ln_jq_app/android/app/src/main/res/drawable/ic_phone.png create mode 100644 ln_jq_app/android/app/src/main/res/drawable/ic_price.png diff --git a/ln_jq_app/android/app/src/main/java/com/lnkj/ln_jq_app/NativeMapView.java b/ln_jq_app/android/app/src/main/java/com/lnkj/ln_jq_app/NativeMapView.java index 487fe4f..07a23de 100644 --- a/ln_jq_app/android/app/src/main/java/com/lnkj/ln_jq_app/NativeMapView.java +++ b/ln_jq_app/android/app/src/main/java/com/lnkj/ln_jq_app/NativeMapView.java @@ -125,12 +125,12 @@ public class NativeMapView implements PlatformView, LocationSource, AMapLocation private LinearLayout detailPanel; // 详情面板 private View modeMenu; //模式选择 - private TextView tvStationName, tvStationAddr, planToggleBtn; + private TextView tvStationName, tvStationAddr, planToggleBtn, tvBusinessHours; private ListView suggestionList; // 输入提示列表 private ArrayAdapter suggestionAdapter; // 提示列表适配器 private List currentTipList; // 当前提示列表 //时间 费用 里程 路费 - private TextView tvDuration, tvDistance, tvTolls, tvTollsFuel; + private TextView tvDuration, tvDistance, tvTolls, tvTollsFuel, tvPerson, tvPrice, tvPhone; private LatLng currentLatLng; private String startName = "我的位置"; @@ -154,6 +154,7 @@ public class NativeMapView implements PlatformView, LocationSource, AMapLocation private TruckRouteData truckRouteData; //当前定位信息 private AMapLocation mLoc; + private ImageButton mLocBtn; public NativeMapView(Context context, int id, Object args) { @@ -388,59 +389,78 @@ public class NativeMapView implements PlatformView, LocationSource, AMapLocation container.addView(planToggleBtn, toggleParams); // --- 右下角定位按钮 --- - ImageButton locBtn = new ImageButton(context); - locBtn.setImageResource(R.drawable.ic_location); + mLocBtn = new ImageButton(context); + mLocBtn.setImageResource(R.drawable.ic_location); // 设置自定义的白色圆形背景 - locBtn.setBackgroundColor(Color.TRANSPARENT); + mLocBtn.setBackgroundColor(Color.TRANSPARENT); // 设置投影(仅在 API 21+ 有效,能产生干净的阴影而非黑块) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - locBtn.setElevation(dp2px(4)); + mLocBtn.setElevation(dp2px(4)); } - locBtn.setScaleType(ImageView.ScaleType.FIT_CENTER); + mLocBtn.setScaleType(ImageView.ScaleType.FIT_CENTER); int padding = dp2px(2); - locBtn.setPadding(padding, padding, padding, padding); - locBtn.setOnClickListener(v -> { + mLocBtn.setPadding(padding, padding, padding, padding); + mLocBtn.setOnClickListener(v -> { if (currentLatLng != null) aMap.animateCamera(CameraUpdateFactory.newLatLngZoom(currentLatLng, 15f)); }); FrameLayout.LayoutParams locParams = new FrameLayout.LayoutParams(layoutSize, layoutSize); locParams.setMargins(0, 0, dp2px(15), dp2px(285)); // 调高一点,避开底部的面板 locParams.gravity = Gravity.BOTTOM | Gravity.END; - container.addView(locBtn, locParams); + container.addView(mLocBtn, locParams); //最后调用监听函数 addKeyboardListener(); } + private int lastKeypadHeight = -1; // 记录上次高度,避免重复刷新 + private void addKeyboardListener() { container.getViewTreeObserver().addOnGlobalLayoutListener(() -> { Rect r = new Rect(); - // 获取当前窗口可视区域 + // 获取当前容器在屏幕上的可视区域 container.getWindowVisibleDisplayFrame(r); - // screenHeight - 可视区域高度 = 键盘高度 - int screenHeight = container.getRootView().getHeight(); - int keypadHeight = screenHeight - r.bottom; + // 获取容器在屏幕上的绝对位置 + int[] location = new int[2]; + container.getLocationOnScreen(location); - // 如果键盘高度大于屏幕的 15%,说明键盘弹出了 - if (keypadHeight > screenHeight * 0.15) { - // 键盘弹出:增加底部 Margin - updateBottomMargin(keypadHeight); + // 容器底部的绝对屏幕坐标 + int containerBottomOnScreen = location[1] + container.getHeight(); + + // 键盘顶部的绝对屏幕坐标就是 r.bottom + // 计算键盘遮挡了容器多少高度 + int keypadHeight = containerBottomOnScreen - r.bottom; + + // 设置一个阈值(比如 100 像素),过滤掉系统导航栏高度的变化 + if (keypadHeight > 100) { + // 键盘弹出:此时 keypadHeight 是键盘相对于容器底部的真实高度 + if (lastKeypadHeight != keypadHeight) { + lastKeypadHeight = keypadHeight; + updateBottomMargin(keypadHeight); + } } else { - // 键盘收起:恢复原有 Margin (你代码中设置的是 dp2px(65)) - updateBottomMargin(dp2px(65)); + // 键盘收起:恢复原有间距 dp2px(65) + if (lastKeypadHeight != 0) { + lastKeypadHeight = 0; + updateBottomMargin(dp2px(65)); + } } }); } private void updateBottomMargin(int bottomPx) { if (bottomContainer != null) { - FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) bottomContainer.getLayoutParams(); - if (params != null) { - // 动态设置底部间距 - params.setMargins(dp2px(12), 0, dp2px(12), bottomPx); - bottomContainer.setLayoutParams(params); - } + // 使用 post 确保在布局请求之后执行,避免某些机型上的 requestLayout 冲突 + bottomContainer.post(() -> { + FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) bottomContainer.getLayoutParams(); + if (params != null) { + // 如果键盘弹出,我们通常不需要额外的 12dp 左右边距(看你 UI 需求) + // 这里的重点是 bottomPx + params.setMargins(dp2px(12), 0, dp2px(12), bottomPx); + bottomContainer.setLayoutParams(params); + } + }); } } @@ -473,6 +493,7 @@ public class NativeMapView implements PlatformView, LocationSource, AMapLocation detailPanel.setVisibility(View.GONE); searchArea.setVisibility(View.VISIBLE); planToggleBtn.setVisibility(View.VISIBLE); + mLocBtn.setVisibility(View.VISIBLE); }); LinearLayout.LayoutParams closeParams = new LinearLayout.LayoutParams(dp2px(28), dp2px(28)); @@ -480,6 +501,13 @@ public class NativeMapView implements PlatformView, LocationSource, AMapLocation panel.addView(titleLayout); + //营业时间和地址 + tvBusinessHours = new TextView(context); + tvBusinessHours.setTextSize(13); + tvBusinessHours.setPadding(0, dp2px(4), 0, 0); + tvBusinessHours.setTextColor(Color.GRAY); + panel.addView(tvBusinessHours); + tvStationAddr = new TextView(context); tvStationAddr.setTextSize(13); tvStationAddr.setPadding(0, dp2px(4), 0, 0); @@ -510,8 +538,25 @@ public class NativeMapView implements PlatformView, LocationSource, AMapLocation tvDistance = createInfoItem(row2, R.drawable.ic_mileage, "行驶里程:", "", 1.0f); // 过路费 tvTolls = createInfoItem(row2, R.drawable.ic_toll, "过路费:", "", 1.0f); - routeInfoLayout.addView(row2); + + //第三行 + LinearLayout row3 = new LinearLayout(context); + row3.setOrientation(LinearLayout.HORIZONTAL); + row3.setGravity(Gravity.CENTER_VERTICAL); + row3.setPadding(0, dp2px(8), 0, 0); // 增加行间距 + tvPerson = createInfoItem(row3, R.drawable.ic_person, "站联系人:", "", 1.0f); + tvPrice = createInfoItem(row3, R.drawable.ic_price, "加氢价格:", "", 1.0f); + routeInfoLayout.addView(row3); + + LinearLayout row4 = new LinearLayout(context); + row4.setOrientation(LinearLayout.HORIZONTAL); + row4.setGravity(Gravity.CENTER_VERTICAL); + row4.setPadding(0, dp2px(8), 0, 0); // 增加行间距 + tvPhone = createInfoItem(row4, R.drawable.ic_phone, "联系方式:", "", 1.0f); + routeInfoLayout.addView(row4); + + panel.addView(routeInfoLayout); Button startNaviBtn = new Button(context); @@ -612,11 +657,15 @@ public class NativeMapView implements PlatformView, LocationSource, AMapLocation detailPanel.setVisibility(View.VISIBLE); if (planToggleBtn != null) planToggleBtn.setVisibility(View.GONE); + if (mLocBtn != null) + mLocBtn.setVisibility(View.GONE); if (modeMenu != null) modeMenu.setVisibility(View.GONE); tvStationName.setText(endName); tvStationAddr.setText(endAddress); + tvBusinessHours.setText("营业时间:" + truckRouteData.destinationSite.startBusiness + "-" + + truckRouteData.destinationSite.endBusiness); double distanceKm = truckRouteData.pathDto.distance / 1000f; long durationMin = truckRouteData.pathDto.duration / 60; @@ -636,6 +685,9 @@ public class NativeMapView implements PlatformView, LocationSource, AMapLocation tvDistance.setText("行驶里程:" + String.format("%.1f", distanceKm) + "公里"); tvTolls.setText("过路费:" + tolls + "元"); tvTollsFuel.setText("加氢费用:" + (isGetInputtips ? "--" : hydrogenCost) + "元"); + tvPerson.setText("站联系人:"); + tvPrice.setText("加氢价格:"); + tvPhone.setText("联系方式:"); isGetInputtips = false; diff --git a/ln_jq_app/android/app/src/main/res/drawable/ic_fuel.png b/ln_jq_app/android/app/src/main/res/drawable/ic_fuel.png index ec69d9c4355dc599311c8f76b9f6f39d2736387b..745a2ab5b608c031f820650ce0f0e91b5bb0f3e1 100644 GIT binary patch delta 1078 zcmV-61j+mU2+IhNB!2)&L_t(|0hCo+Xk1kkUHjadX3|*G#C{Zw+7H260wPT_N%SKM z7D_1+Yd?evEwm{J35mvtHqj|If@zbC7HjlFLW}qj6(6)}KQsuMhlScN{R)vrL@RB` zLz3ps*{*YE=5}V%*6CsId-hp-?Y-`~501g@jMfKA(XzGVc7IBW7kFvgM&sS}I?DZS zw8pE86)8@jqoK+KW>5v40=#NG?FX@9ME+lZjSTF&3hbmGRhTzaWQW6w5xKQMd;KOO zI>g4Vc@HYe`cP5Yr;67cW;8Vfa&EPgn+tSqFK4n#Rh!xD2%Eo;#OPA!>&u2z}~`r&2Tl@e9nAh zfw^xV7nQd~%qO_E_IM6IKlHtRaz1xlESzo1Po`I^1-M;N`zF(~)}j|DM;Fkxtr4v| zN{OY-#SZKHao&o&1<0JFfJc;=ibxpEl$ znqo*a#f*2g$6@G*Z%6;wZwh$@z=H;{r@$V_8TkU2>ncg!1;s`9{ud!H=3f+%4^?r{ zRQ|iq%q{I#(L)YHi9Z%{g7u$5a6y4)%x|pW#w(O!Q*mi=K>yM8Aj{}BBfWI6WZ+D#i6TBe+UG_8dnPhZkhE$f%AaWU@53TX7FD)$CrA}qZ0r`&G+{h+RM4aTrX*)2Ua1O}d&Ry&r%pp6h?qaxs z^?zqLM^+%PG$pEEis2vJQCEvSd%TFrKmN8B)Oxh+ewyXC5kh8C3~V zr%d(lNwn40aGh^$jWuSi_mQX_W}-~R?0*Go8Ryw*fsv6E2FE59W{X0;p+6&@Hz^(Q zDf;))9zV-@M!ev>iZm+lnM!GstAVS{Ymb6Ql$#tJyTU`JMFq{u!$lxxMDZsd!y@0q z2(fP7#M9(FkAWX9<(B5gt9Ou_P4EO8m>5TL{DciEJM9|(kS+!X>_X6mPoJ2LJ#7 delta 1129 zcmV-v1eW{D2>u9=B!4qWL_t(|0gO~zXk1kkUHjb0w5g_Qs*o79NkPb$3c(~pRq9WI zl8Ud0Xc6;kX`M_4!F)8yhe6ty2d#oFMEz(f4PuI=#TN_;HfAWPASgvesKshT6Vo)0 znR~YDoJpcLk0yt`@7-sewfDMb-*d0QMu$Ssnke~@eWjajBD%d zWNiUusfx>wis%UdrSxId_%qI3OfU6o;NRg!u!$x)o;#y zOw6r$4!KxktbZ=>+RhRK+XKjb0J0jG7hPe-1*4D#Tc6}43zY{b@(xc|G3P66r9kJd z&B*236?mTPF}2}K==u5&#!>6}blR^8E`To{YLn>P6^oL9l>$>U4-4=zfWH*l4P!%- zta}~l+A3lNOFvTOvA9esq{0DfHtz9Wh5TOTNi%ttiz+~(o_`jrCme>*cCkHwdM?5_D3}ZP)fXUM zmkHn>wqgt7LBKVjwWdr0dz8hUNSXz1A-+{bQVx^A97nRgk{GZ_-A-?1>~_mr!J+~x z-$7(M!ufj(%Ox{>c^^VB3?KtwcEK|aV~d6eO%Ma-gB`@~fcg{XA$N%gu-Hk0F@Z_L zjeq_OlTC-(xfT{XKpK8EP5%Wj?$^$+U{QfB#aH?A-saLZ5p)>Xc8XMR z4)mSBqGt26T9kWX>Ba7?-DW0d(<<6V&VMykc>`DOE}TFD&Y}XH86Lyn1HQx_F5awy zw7`C8Qv4U~tGypnQbV)Nb^tLgwC)okfcjGNH^O%HcDgJol-z#?H_^o+*rV=D5hC}IW) zX8;{5I5G}nYm%zLQ|KE#i#5jD0xscD_9}Wuj@j$^eVUIyr$t3g-WfX#y`%5)segoU vua3Wp{|f*B|No^QBy9iy00v1!K~w_(@WaiT&0~g%00000NkvXXu0mjfcxfK& diff --git a/ln_jq_app/android/app/src/main/res/drawable/ic_mileage.png b/ln_jq_app/android/app/src/main/res/drawable/ic_mileage.png index 2b1d25dc44b389c681ed80721b9b55b48e78aa1b..45b8f64eb9c9abdd16bbae82d021b9b9ebed98fd 100644 GIT binary patch delta 758 zcmVA~KBnAG&wR zOP4ax67uH3Q;3URIz;pbNT<5gsY7IT3<`sa2x~Ws$b;yv`@LyqW8Z%7`@UUL@MC6Y z<~K9%_r15XZw;akgD^4L8ilLz%#6YHbD63i{TLt0Mj?&k1b3lCXDro^?J!rwY;AunX7VC*$tmjMAB^B$Kd%h|5|77l!5by@HSJw!2 z`2-!g9GJS9`F~TW#<^_qM2_#F1Hul`Dl_^8Iw0!AC$QWq3&;`CM^_Pc7FMQ_f0GYG zHJ>f5ir;~DWW+j&5bWrvb%Bs{{;nz6;SXT$K{=fZ=Y4{T(PS4ae+?Jad^0&RYbGyD z*J95aUIkGP($zIw$|o??E}28H^iFI{nCS{LuEr7y5Py9Z(+NViSSLOKa9T1&WO+;M z?u4p61=wI9+~^Y!AC+VgmF%|I-AN_bmI*9?=w!GtLV#lc6_Mjc1b+bjg`|gCN+4bb zLtoNWcmxCt6WJn4@;0ud?r?y+GLE&0p;A9Vr=_Cxla;4c6G o0RR6qAJql`000I_L_t&o0Ew!8|hzLl$6kb+BOY~iy(zW61uI>QoF9M zyUol!efQ0qnfG=T)W-vpXg1SVdPPe|6?mB+YM}y()v6d2*kQcY)#+h3(HN+%QNcTWcO`YPLwJ7Zm!OUM|Ok%M-wF zH!u$c{OdLi7k|6Cku4l`dv1Q|JjDakYZ+~e7W-+r7<=RJ@P3`Z2Fl)sO8$bC1my22?BuB42v}zY&q=s|6g8 z8=r=lEu^iZXGui%bNLS9&>?sDpavaG3s9P#;of+Iqn#<96X-9rynOaf?rjusZf5i^ zHPR=7?Y4Bs+YYL$Rn8K@B>B4cFDde#Gy9H*{ z#R^W*2@yd=hR_$^fbEaA;NQ7Tyaiqe5qwfQg)VWy7N4Ar8VNPjPOotUjb;R5NgDXriG2HoiuK<-pXuT=6mM>g@Sr{rD=O{Ko@dG(M?;u}!OWMu8?RC~J z8(_{ibf#5g0Ikin*%PYD(gF@o|5VgS`6XU}FDf@ofwO=vsF=MjT-V&ONtN=e8Z$)< zmrDDP%9rag-}oN@0RR8R4(QJS000I_L_t&o05nHq%wYT}A^-pY07*qoM6N<$g5hBZ AJOBUy diff --git a/ln_jq_app/android/app/src/main/res/drawable/ic_person.png b/ln_jq_app/android/app/src/main/res/drawable/ic_person.png new file mode 100644 index 0000000000000000000000000000000000000000..ffe92bf8f8fc20bd55abc759b36edf8cdde89340 GIT binary patch literal 762 zcmVZTGAS+s90Kyi2KUJZgJ0jFpiAH&W(f(#)^^OS-H4qT=GSOp#ehMTh?6?c)#&uc!27zv&?dK(!{WcJvh;A^`26R$tiixukcY%q8 z1d|F$alH`Ekk?wwfM`ZmzaO^bCcY;mU((zK%(TeTIzye7t2qmhoCkTBc$UfI!{n0d z>LIPXfD|FR6h~xvnA3-R28hIl5&81Vq{^W(fh^19rz8xr;|lshfiM)td@Ts}4kFb1 zNR9Yk(};iG4WCT?F-l zsO|$2pD!Y>&GV20cB&dQBk;3I#LaS#mWwt20UgdkJW=8sU1ugl?pw+##PaiWJ|mg5XpvXi{|}#Smilk1X>6l# zqjriwr%-)H`WbLovxgy+HBNn(EL*jc0_|Y+8R;j$mnVQEgx23NeiXfzDs8s_PNVva zWYVH@o8Jg{0)okiMrH(aKU`WEn5fR$)# z8%&sL9Ug1wZA7eOkhZ(DE`KO03wi~cuE=gJ|I?(b){)8ZLQ(xSO{8olu|(|K^H>|s zN3>{^TBTU$hR{3;UVF4)5-N&wG_O-V1N>=`>q71qBWpmG0s{^cQVxhGA)FN9d9^AL zoE4&mL_~}^ZNzRux6(VH_EOSjxjQxXtS+<-lH7n$`!PDsB9f~K93ew9?5CVE+n(A& zdUJI{rxX-LtZ=mE1?nB(Py0u;C$U%;+pqUgCN}3NI&2<>3_OF{#3sa>Zerhs4>-`= zf%vtDBIcr|S$N1(AL#dhAVjNBaw{P*5EBIUw0WQ0j>_VQ&iqk*1MIr>5l=@PBxO2* zIua{{_PB|L>rfskz^Z%~T4-&qIu|KvS0AWv06(<8-b4IyiylpkCRMB#dx3(fVr+v9 zavD$(-bIm84ZVZCiQDP}^&Jp|f3Ng0+IV6qY3Grw5>np`^{+)9)5DtYQGxqAK#;0c z{OV0S8(C{TDW&VqW45y#|0kMsrc?a`_{;c5w>R+~HI2`)<6Fo|^w0 r@D%_6|NnN#6yX2>00v1!K~w_((BLmXT@-t&00000NkvXXu0mjfGY*Lu literal 0 HcmV?d00001 diff --git a/ln_jq_app/android/app/src/main/res/drawable/ic_price.png b/ln_jq_app/android/app/src/main/res/drawable/ic_price.png new file mode 100644 index 0000000000000000000000000000000000000000..1232875722be12e51893cc63106716ad8396206a GIT binary patch literal 1215 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 delta 902 zcmV;119|+H2Al_wBYy)?Nkl+H49K94Jy=uog&iir{Yyr9}^jejpfV&1GMk_i#Wq$h1o zv5wT;Xlr<-5Q*TI`O~B&zJrOn(`<$`EuAI_3$@V zq*e|=q5tOxhJW((8&z<8%Q+5MdwM}Vh1%M_&_7BD3Eq5_>JySmJR+S5Yn?DW$ z-hq>&s4RPj&aDM>Dl^%3CgS@dk?!0}x;X^?L`(el5-SL52;jZ}(Ew!^gfmV4q6mU_ z?W)b1Y6Bb%88Iy-_o zIj|H0Y5PR?rYhzHe!&YGJXAqNX)}y~RnvoP&TlTvq;fwMn_-n9YA8OZ>Je+9wF(ea zR@_zbzSbD(MgwNYOBHu5Y?tNh#9-oE3VvS%%b&;fD9|SC?LSDDy+$8b#vrh#`_G~8 zX@8ehbqRx`2gy_0BcbkaE=;x83hWS4Zjjs-36V3{(Cs^Vhb(53JsGQW38Mb!owvAc zDzeq?PFn1{+EfZ46gOWz { @@ -33,7 +34,7 @@ class BaseWidgetsPage extends GetView { } List _buildPages() { - return [ReservationPage(), NativePageIOS(), CarInfoPage(), MinePage()]; + return [ReservationPage(), NativePageIOS(), MallPage(), CarInfoPage(), MinePage()]; } // 自定义导航栏 (悬浮胶囊样式)