Android13系統導航欄添加音量加減鍵按鈕功能

不知道為什么拿到芯片原廠發布給我們的Android13系統源碼編譯后,導航欄沒有音量加減鍵,客戶有反饋這個問題,所以特意加了一下,修改記錄如下:frameworks/base目錄下

commit 9cb2244d61a237cab03c540bfcca6e4fac2bea2c
Author: incar <chs@incartech.cn>
Date:   Fri Jun 21 19:05:47 2024 +0800導航欄添加音量加減鍵Change-Id: Ia1811c7a94aa2f9e175b7725f96370925c5055ebdiff --git a/packages/SystemUI/res/drawable/ic_sysbar_volume_add_button.xml b/packages/SystemUI/res/drawable/ic_sysbar_volume_add_button.xml
new file mode 100755
index 000000000000..76a145eff0cb
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_sysbar_volume_add_button.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="?attr/singleToneColor"
+        android:pathData="M3,9v6h4l5,5L12,4L7,9L3,9zM16.5,12c0,-1.77 -1.02,-3.29 -2.5,-4.03v8.05c1.48,-0.73 2.5,-2.25 2.5,-4.02zM14,3.23v2.06c2.89,0.86 5,3.54 5,6.71s-2.11,5.85 -5,6.71v2.06c4.01,-0.91 7,-4.49 7,-8.77s-2.99,-7.86 -7,-8.77z"/>
+</vector>
diff --git a/packages/SystemUI/res/drawable/ic_sysbar_volume_sub_button.xml b/packages/SystemUI/res/drawable/ic_sysbar_volume_sub_button.xml
new file mode 100755
index 000000000000..69d86071ce10
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_sysbar_volume_sub_button.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="28dp"
+        android:height="28dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="?attr/singleToneColor"
+        android:pathData="M18.5,12c0,-1.77 -1.02,-3.29 -2.5,-4.03v8.05c1.48,-0.73 2.5,-2.25 2.5,-4.02zM5,9v6h4l5,5V4L9,9H5z"/>
+</vector>
diff --git a/packages/SystemUI/res/layout/volume_add.xml b/packages/SystemUI/res/layout/volume_add.xml
new file mode 100755
index 000000000000..882c855a3a03
--- /dev/null
+++ b/packages/SystemUI/res/layout/volume_add.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<com.android.systemui.navigationbar.buttons.KeyButtonView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:systemui="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/volume_add"
+    android:layout_width="@dimen/navigation_key_width"
+    android:layout_height="match_parent"
+    android:layout_weight="0"
+    systemui:keyCode="24"
+    android:scaleType="center"
+    android:paddingStart="@dimen/navigation_key_padding"
+    android:paddingEnd="@dimen/navigation_key_padding"
+    />
+
diff --git a/packages/SystemUI/res/layout/volume_sub.xml b/packages/SystemUI/res/layout/volume_sub.xml
new file mode 100755
index 000000000000..4b687bd52079
--- /dev/null
+++ b/packages/SystemUI/res/layout/volume_sub.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<com.android.systemui.navigationbar.buttons.KeyButtonView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:systemui="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/volume_sub"
+    android:layout_width="@dimen/navigation_key_width"
+    android:layout_height="match_parent"
+    android:layout_weight="0"
+    systemui:keyCode="25"
+    android:scaleType="center"
+    android:paddingStart="@dimen/navigation_key_padding"
+    android:paddingEnd="@dimen/navigation_key_padding"
+    />
+
diff --git a/packages/SystemUI/res/values-sw400dp/config.xml b/packages/SystemUI/res/values-sw400dp/config.xml
new file mode 100755
index 000000000000..5c37bfb34f68
--- /dev/null
+++ b/packages/SystemUI/res/values-sw400dp/config.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<!-- These resources are around just to allow their values to be customized
+     for different hardware and product builds. -->
+<resources>
+
+    <!-- Nav bar button default ordering/layout -->
+    <string name="config_navBarLayout" translatable="false">left;volume_sub,back,home,recent,volume_add;right</string>
+
+</resources>
diff --git a/packages/SystemUI/res/values-sw400dp/dimens.xml b/packages/SystemUI/res/values-sw400dp/dimens.xml
old mode 100644
new mode 100755
index f19335bc6285..340697a37fcb
--- a/packages/SystemUI/res/values-sw400dp/dimens.xml
+++ b/packages/SystemUI/res/values-sw400dp/dimens.xml
@@ -17,7 +17,8 @@<resources><!-- The width of the view containing navigation buttons -->
-    <dimen name="navigation_key_width">80dip</dimen>
+    <dimen name="navigation_key_width">50dp</dimen>
+    <dimen name="navigation_key_padding">30dp</dimen><!-- The padding on the side of the navigation bar. Must be greater than or equal tonavigation_extra_key_width -->
diff --git a/packages/SystemUI/res/values-sw410dp/dimens.xml b/packages/SystemUI/res/values-sw410dp/dimens.xml
old mode 100644
new mode 100755
index 7da47e5089be..62285f56c45f
--- a/packages/SystemUI/res/values-sw410dp/dimens.xml
+++ b/packages/SystemUI/res/values-sw410dp/dimens.xml
@@ -26,5 +26,8 @@<dimen name="global_actions_grid_item_side_margin">12dp</dimen><dimen name="global_actions_grid_item_height">72dp</dimen>
+	
+	<dimen name="navigation_key_width">55dp</dimen>
+    <dimen name="navigation_key_padding">33dp</dimen></resources>
diff --git a/packages/SystemUI/res/values-sw600dp-land/dimens.xml b/packages/SystemUI/res/values-sw600dp-land/dimens.xml
old mode 100644
new mode 100755
index b24ce122208f..12973fe351a1
--- a/packages/SystemUI/res/values-sw600dp-land/dimens.xml
+++ b/packages/SystemUI/res/values-sw600dp-land/dimens.xml
@@ -77,4 +77,7 @@<dimen name="lockscreen_shade_keyguard_transition_vertical_offset">83dp</dimen><dimen name="notification_panel_margin_horizontal">24dp</dimen>
+	
+	<dimen name="navigation_key_width">120dp</dimen>
+    <dimen name="navigation_key_padding">50dp</dimen></resources>
diff --git a/packages/SystemUI/res/values-sw600dp/config.xml b/packages/SystemUI/res/values-sw600dp/config.xml
old mode 100644
new mode 100755
index 80628f903e76..9ea9eedb3cc5
--- a/packages/SystemUI/res/values-sw600dp/config.xml
+++ b/packages/SystemUI/res/values-sw600dp/config.xml
@@ -27,7 +27,7 @@<bool name="config_quickSettingsMediaLandscapeCollapsed">false</bool><!-- Nav bar button default ordering/layout -->
-    <string name="config_navBarLayout" translatable="false">left;back,home,recent;right</string>
+    <string name="config_navBarLayout" translatable="false">left;volume_sub,back,home,recent,volume_add;right</string><!-- orientation of the dead zone when touches have recently occurred elsewhere on screen --><integer name="navigation_bar_deadzone_orientation">0</integer>
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index df3c8bedf1bb..ccc2b8c6604f 100755
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -301,7 +301,7 @@</string-array><!-- Nav bar button default ordering/layout -->
-    <string name="config_navBarLayout" translatable="false">left[.5W],back[1WC];home;recent[1WC],right[.5W]</string>
+    <string name="config_navBarLayout" translatable="false">left[.5W];volume_sub,back,home,recent,volume_add;right[.5W]</string><string name="config_navBarLayoutQuickstep" translatable="false">back[1.7WC];home;contextual[1.7WC]</string><string name="config_navBarLayoutHandle" translatable="false">back[70AC];home_handle;ime_switcher[70AC]</string>diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java
index 1ef2b3c98859..bf152b112e86 100755
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java
@@ -1187,6 +1187,21 @@ public class NavigationBar extends ViewController<NavigationBarView> implementsaccessibilityButton.setOnClickListener(this::onAccessibilityClick);accessibilityButton.setOnLongClickListener(this::onAccessibilityLongClick);updateAccessibilityStateFlags();
+        ButtonDispatcher volumeAddButton=mView.getVolumeAddButton();
+        ButtonDispatcher volumeSubButton=mView.getVolumeSubButton();
+        //boolean isShowVolumeButton = "true".equals(SystemProperties.get("ro.rk.systembar.voiceicon","true"));
+        boolean isShowVolumeButton = true;
+        if(isShowVolumeButton){
+            volumeAddButton.setVisibility(View.VISIBLE);
+            volumeSubButton.setVisibility(View.VISIBLE);
+        }else{
+            volumeAddButton.setVisibility(View.GONE);
+            volumeSubButton.setVisibility(View.GONE);
+        }
+        if (mContext.getResources().getConfiguration().smallestScreenWidthDp < 400) {
+            volumeAddButton.setVisibility(View.GONE);
+            volumeSubButton.setVisibility(View.GONE);
+        }ButtonDispatcher imeSwitcherButton = mView.getImeSwitchButton();imeSwitcherButton.setOnClickListener(this::onImeSwitcherClick);
@@ -1699,6 +1714,10 @@ public class NavigationBar extends ViewController<NavigationBarView> implementsupdateButtonLocation(region, touchRegionCache, mView.getAccessibilityButton(), inScreenSpace,useNearestRegion);
+        updateButtonLocation(region, touchRegionCache, mView.getVolumeAddButton(), inScreenSpace,
+                useNearestRegion);
+        updateButtonLocation(region, touchRegionCache, mView.getVolumeSubButton(), inScreenSpace,
+                useNearestRegion);if (includeFloatingButtons && mView.getFloatingRotationButton().isVisible()) {// Note: this button is floating so the nearest region doesn't applyupdateButtonLocation(
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarInflaterView.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarInflaterView.java
old mode 100644
new mode 100755
index 59bb2278edfe..70fb8a920ca0
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarInflaterView.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarInflaterView.java
@@ -68,6 +68,8 @@ public class NavigationBarInflaterView extends FrameLayoutpublic static final String RIGHT = "right";public static final String CONTEXTUAL = "contextual";public static final String IME_SWITCHER = "ime_switcher";
+    public static final String VOLUME_ADD = "volume_add";
+    public static final String VOLUME_SUB = "volume_sub";public static final String GRAVITY_SEPARATOR = ";";public static final String BUTTON_SEPARATOR = ",";
@@ -99,11 +101,13 @@ public class NavigationBarInflaterView extends FrameLayoutprivate boolean mIsVertical;private boolean mAlternativeOrder;+    private int mDensity;private OverviewProxyService mOverviewProxyService;private int mNavBarMode = NAV_BAR_MODE_3BUTTON;public NavigationBarInflaterView(Context context, AttributeSet attrs) {super(context, attrs);
+        mDensity = context.getResources().getConfiguration().densityDpi;createInflaters();mOverviewProxyService = Dependency.get(OverviewProxyService.class);mNavBarMode = Dependency.get(NavigationModeController.class).addListener(this);
@@ -118,6 +122,16 @@ public class NavigationBarInflaterView extends FrameLayoutmLandscapeInflater = LayoutInflater.from(mContext.createConfigurationContext(landscape));}+    @Override
+    protected void onConfigurationChanged(Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+        if(mDensity != newConfig.densityDpi || mDensity < 600){
+            mDensity = newConfig.densityDpi;
+            clearViews();
+            inflateLayout(mCurrentLayout);
+        }
+    }
+@Overrideprotected void onFinishInflate() {super.onFinishInflate();
@@ -387,6 +401,10 @@ public class NavigationBarInflaterView extends FrameLayoutv = inflater.inflate(R.layout.home_handle, parent, false);} else if (IME_SWITCHER.equals(button)) {v = inflater.inflate(R.layout.ime_switcher, parent, false);
+        } else if (VOLUME_ADD.equals(button)) {
+            v = inflater.inflate(R.layout.volume_add, parent, false);
+        } else if (VOLUME_SUB.equals(button)) {
+            v = inflater.inflate(R.layout.volume_sub, parent, false);} else if (button.startsWith(KEY)) {String uri = extractImage(button);int code = extractKeycode(button);
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java
old mode 100644
new mode 100755
index 97024881ca62..8c5c589fdc22
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java
@@ -45,6 +45,7 @@ import android.util.Log;import android.util.SparseArray;import android.view.ContextThemeWrapper;import android.view.Display;
+import android.view.Display.Mode;import android.view.MotionEvent;import android.view.Surface;import android.view.View;
@@ -120,6 +121,8 @@ public class NavigationBarView extends FrameLayout {private KeyButtonDrawable mHomeDefaultIcon;private KeyButtonDrawable mRecentIcon;private KeyButtonDrawable mDockedIcon;
+    private KeyButtonDrawable mVolumeAddIcon;
+    private KeyButtonDrawable mVolumeSubIcon;private Context mLightContext;private int mLightIconColor;private int mDarkIconColor;
@@ -159,6 +162,7 @@ public class NavigationBarView extends FrameLayout {* fully locked mode we only show that unlocking is blocked.*/private ScreenPinningNotify mScreenPinningNotify;
+    private boolean mIsRot0Landscape = true;/*** {@code true} if the IME can render the back button and the IME switcher button.
@@ -311,6 +315,10 @@ public class NavigationBarView extends FrameLayout {mTmpLastConfiguration = new Configuration();mConfiguration.updateFrom(context.getResources().getConfiguration());+        Display display = ((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
+        Mode displayMode = display.getMode();
+        mIsRot0Landscape = displayMode.getPhysicalWidth() > displayMode.getPhysicalHeight();
+        Log.v(TAG, "PW=" + displayMode.getPhysicalWidth() + ", PH=" + displayMode.getPhysicalHeight());mScreenPinningNotify = new ScreenPinningNotify(mContext);mButtonDispatchers.put(R.id.back, new ButtonDispatcher(R.id.back));
@@ -320,6 +328,8 @@ public class NavigationBarView extends FrameLayout {mButtonDispatchers.put(R.id.ime_switcher, imeSwitcherButton);mButtonDispatchers.put(R.id.accessibility_button, accessibilityButton);mButtonDispatchers.put(R.id.menu_container, mContextualButtonGroup);
+        mButtonDispatchers.put(R.id.volume_add, new ButtonDispatcher(R.id.volume_add));
+        mButtonDispatchers.put(R.id.volume_sub, new ButtonDispatcher(R.id.volume_sub));mDeadZone = new DeadZone(this);}@@ -420,6 +430,13 @@ public class NavigationBarView extends FrameLayout {return mButtonDispatchers.get(R.id.accessibility_button);}+    public ButtonDispatcher getVolumeAddButton() {
+        return mButtonDispatchers.get(R.id.volume_add);
+    }
+
+    public ButtonDispatcher getVolumeSubButton() {
+        return mButtonDispatchers.get(R.id.volume_sub);
+    }public RotationContextButton getRotateSuggestionButton() {return (RotationContextButton) mButtonDispatchers.get(R.id.rotate_suggestion);}
@@ -464,6 +481,8 @@ public class NavigationBarView extends FrameLayout {if (orientationChange || densityChange || dirChange) {mBackIcon = getBackDrawable();}
+        mVolumeAddIcon = getDrawable(R.drawable.ic_sysbar_volume_add_button);
+        mVolumeSubIcon = getDrawable(R.drawable.ic_sysbar_volume_sub_button);}/**
@@ -607,6 +626,8 @@ public class NavigationBarView extends FrameLayout {}getHomeButton().setImageDrawable(homeIcon);getBackButton().setImageDrawable(backIcon);
+        getVolumeAddButton().setImageDrawable(mVolumeAddIcon);
+        getVolumeSubButton().setImageDrawable(mVolumeSubIcon);updateRecentsIcon();

涉及到修改的文件如下:注意別遺漏了

?packages/SystemUI/res/drawable/ic_sysbar_volume_add_button.xml? ??
?packages/SystemUI/res/drawable/ic_sysbar_volume_sub_button.xml? ? ?
?packages/SystemUI/res/layout/volume_add.xml? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?packages/SystemUI/res/layout/volume_sub.xml? ? ??
?packages/SystemUI/res/values-sw400dp/config.xml? ? ? ??
?packages/SystemUI/res/values-sw400dp/dimens.xml? ?
?packages/SystemUI/res/values-sw410dp/dimens.xml? ? ? ? ?
?packages/SystemUI/res/values-sw600dp-land/dimens.xml? ? ? ? ? ? ? ?
?packages/SystemUI/res/values-sw600dp/config.xml? ? ? ? ? ? ? ? ?
?packages/SystemUI/res/values/config.xml? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java? ? ?
?packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarInflaterView.java?
?packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java? ? ?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36356.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36356.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36356.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux OpenGrok搭建

文章目錄 一、目的二、環境三、相關概念3.1 OpenGrok3.2 CTags3.3 Tomcat 四、OpenGrok搭建4.1 安裝jdk4.2 安裝ctags依賴4.3 安裝universal-ctags4.3.1 下載universal-ctags4.3.2 編譯&&安裝universal-ctags 4.4 安裝Tomcat4.4.1 下載&&解壓Tomcat4.4.2 啟動T…

繼續撿錢,每天幾百塊!

每日操作計劃&#xff1a; 標普信息科技(161128)&#xff0c;溢價8.5%&#xff0c;限購100&#xff0c;一拖七&#xff0c;單戶每天700*8.5%59元 印度基金LOF(164824)&#xff0c;溢價2.6%&#xff0c;限購100&#xff0c;一拖七&#xff0c;單戶每天700*2.6%18元 美元債LOF(…

【leetcode系列】46.全排列

題目&#xff1a;給定一個不含重復數字的數組 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意順序 返回答案。 示例 1&#xff1a; 輸入&#xff1a;nums [1,2,3] 輸出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示例 2&#xff1a; 輸入&am…

算法力扣刷題記錄 二十【18題. 四數之和】

前言 哈希篇&#xff0c;繼續。 記錄 二十【18題. 四數之和】 一、題目閱讀 給你一個由 n 個整數組成的數組 nums &#xff0c;和一個目標值 target 。請你找出并返回滿足下述全部條件且不重復的四元組 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若兩個四元組元素一…

為什么要本地化您的多媒體內容?

當我們訪問網站、應用程序和社交媒體時&#xff0c;體驗不再局限于陳舊的文本和靜態圖像。現代處理能力和連接速度提高了快速加載視頻、音頻和動畫的可能性。 這一切都提供了更具沉浸感和互動性的用戶體驗。多媒體是數字營銷中最有效的內容之一&#xff0c;因為它對用戶更具吸…

vue-cli 項目打包優化-基礎篇

1、項目打包完運行空白 引用資源路徑問題&#xff0c;打包完的【index.html】文件引用其他文件的引用地址不對 參考配置&#xff1a;https://cli.vuejs.org/zh/config 修改vue.config.js &#xff0c;根據與 后端 或 運維 溝通修改 module.export {// 默認 publicPath: //…

使用API有效率地管理Dynadot域名,為文件夾中的域名設置域名轉發

關于Dynadot Dynadot是通過ICANN認證的域名注冊商&#xff0c;自2002年成立以來&#xff0c;服務于全球108個國家和地區的客戶&#xff0c;為數以萬計的客戶提供簡潔&#xff0c;優惠&#xff0c;安全的域名注冊以及管理服務。 Dynadot平臺操作教程索引&#xff08;包括域名郵…

全彩屏負氧離子監測站

TH-FZ5在追求綠色生態、健康出行的今天&#xff0c;景區不僅僅是人們休閑游玩的好去處&#xff0c;更是人們體驗大自然、感受清新空氣的重要場所。為了進一步提升游客的游覽體驗&#xff0c;許多景區紛紛引入了全彩屏負氧離子監測站&#xff0c;這一創新舉措不僅為景區增添了科…

【懷莊之醉白酒】懷莊之醉醬香白酒哪款好?

【懷莊之醉醬香白酒】在懷莊之醉醬香白酒的豐富系列中&#xff0c;懷莊之醉尊品、懷莊之醉三星和懷莊之醉匠心之作是三款受到廣泛歡迎的產品。 每一款酒都具備其獨特的風味和適合的飲用場合。以下是對這三款酒特性的分析&#xff1a; 懷莊之醉 尊品&#xff1a;懷莊之醉 尊品…

云通SIPX,您的碼號資源智能調度專家!

在數字化轉型的浪潮中&#xff0c;號碼資源作為企業與客戶溝通的重要橋梁&#xff0c;其管理效率直接關系到企業運營的成敗。隨著運營商對號碼資源管理的規范化和精細化&#xff0c;企業對高效、智能的號碼資源管理需求日益增長&#xff0c;以實現對外呼叫的降本增效。 一、什么…

學生成績管理系統帶8000字文檔學生選課管理系統java項目javaweb項目ssm項目jsp項目java課程設計java畢業設計

文章目錄 學生選課成績管理系統一、項目演示二、項目介紹三、8500字項目文檔四、部分功能截圖五、部分代碼展示六、底部獲取項目源碼帶8500字文檔&#xff08;9.9&#xffe5;帶走&#xff09; 學生選課成績管理系統 一、項目演示 選課成績管理系統 二、項目介紹 語言: Java …

php數據結構之鏈表

本文由 ChatMoney團隊出品 鏈表的基本概念 鏈表&#xff08;Linked List&#xff09;是一種常見的數據結構&#xff0c;它由一系列節點組成&#xff0c;每個節點除了存儲數據外&#xff0c;還包含指向下一個節點的指針。與數組相比&#xff0c;鏈表在插入和刪除操作上具有更高…

直播帶貨大模型,開啟自動賣貨的時代

Streamer-Sales是一個為直播帶貨主播量身定制的智能工具。 它能夠智能分析商品特性&#xff0c;自動創作出引人入勝的解說詞&#xff0c;從而有效增強商品的吸引力和提升銷售業績。它還具備多種交互功能&#xff0c;比如將主播的語音實時轉換為文字&#xff0c;便于與觀眾進行…

移動端 UI 風格,書寫華麗篇章

移動端 UI 風格&#xff0c;書寫華麗篇章

原創作品—醫療行業軟件界面UI、交互設計

在醫療行業大屏UI設計中&#xff0c;首要的是以用戶為中心&#xff0c;深入理解醫生、護士、管理層等用戶群體的具體需求和工作流程。大屏設計應直觀展示關鍵醫療數據、患者信息、設備狀態等&#xff0c;確保用戶能夠迅速、準確地獲取所需信息。同時&#xff0c;功能布局應合理…

12寸和8寸封裝線的差異點

12英寸&#xff08;300mm&#xff09;晶圓封裝線與8英寸&#xff08;200mm&#xff09;晶圓封裝線在多個方面存在顯著區別&#xff0c;這些區別影響了它們的生產效率、成本結構和適用技術。以下是一些主要差異&#xff1a; 1. **晶圓面積**&#xff1a; - 12英寸晶圓擁有更…

??植物大戰僵尸雜交版直裝版v2.1 安卓版:全新策略塔防體驗

《植物大戰僵尸雜交版直裝版》v2.1是由B站UP主“潛艇偉偉迷”精心制作的同人游戲&#xff0c;為策略塔防手游帶來了全新的活力。游戲中引入了眾多創新的雜交植物&#xff0c;例如結合了向日葵的陽光生成能力和豌豆射手的攻擊特性的向日葵豌豆射手&#xff0c;以及擁有寒冰豌豆射…

docker打包 arm32v7/debian 問題總結

1.架構不同 我的宿主是x86 ,但是打包的是arm架構 安裝qemu sudo apt-get install binfmt-support qemu qemu-user-static 然后使用buildx打包 docker buildx build --no-cache --platform linux/arm/v7 -t tdc_post:1.0.1 . --load 保存tar docker save -o tdc_post.tar tdc_p…

金融科技如何運用技術手段實現細顆粒度服務

隨著金融科技的快速發展&#xff0c;金融機構正在通過采用各種技術手段來提供更加細顆粒度的服務&#xff0c;以滿足客戶日益增長的個性化需求。這些技術手段不僅提高了金融服務的效率和安全性&#xff0c;還顯著提升了用戶體驗和滿意度。 一、大數據分析與人工智能&#xff08…

中國旺旺:廉頗老矣or老而彌堅?

從80后的童年吃到了20后的童年&#xff0c;什么舌尖上的產品能旺這么久&#xff1f; 相信大家都能說出他的名字——中國旺旺。 要問旺旺的第一單品是啥&#xff1f;毫無疑問是旺仔牛奶。 這也體現在財報上&#xff0c;2022財年&#xff0c;旺旺乳品、飲料品類收入雙位數下滑&…