一起來學習Android 8.0系統的通知欄適配吧

2021-01-19 郭霖

大家早上好,今天我們繼續來學習Android 8.0系統的適配。

之前我們已經講到了,Android 8.0系統最主要需要進行適配的地方有兩處:應用圖標和通知欄。在上一篇文章當中,我們學習了Android 8.0系統應用圖標的適配,還沒有看過這篇文章的朋友可以先去閱讀 一起來學習Android 8.0系統的應用圖標適配吧 。

那麼本篇文章,我們自然要將重點放在通知欄上面了,學習一下Android 8.0系統的通知欄適配。



不得不說,通知欄真是一個讓人又愛又恨的東西。

通知欄是Android系統原創的一個功能,雖說賈伯斯一直認為Android系統是徹徹底底抄襲iOS的一個產品,但是通知欄確實是Android系統原創的,反而蘋果在iOS 5之後也加入了類似的通知欄功能。

通知欄的設計確實非常巧妙,它默認情況下不佔用任何空間,只有當用戶需要的時候用手指在狀態欄上向下滑動,通知欄的內容才會顯示出來,這在智慧型手機發展的初期極大地解決了手機屏幕過小,內容展示區域不足的問題。

可是隨著智慧型手機發展的逐漸成熟,通知欄卻變得越來越不討人喜歡了。各個App都希望能搶佔通知欄的空間,來儘可能地宣傳和推廣自己的產品。現在經常是早上一覺醒來拿起手機一看,通知欄上全是各種APP的推送,不勝其煩。

我個人雖然是Android應用開發者,但同時也是Android手機的資深用戶。我已經使用了8年的Android手機,目前我對於通知欄的這種垃圾推送是零容忍的。現在每當我安裝一個新的App時,我都會先到設置裡面去找一找有沒有推送開關,如果有的話我會第一時間把它關掉。而如果一個App經常給我推送垃圾信息卻又無法關閉時,我會直接將它的通知總開關給關掉,如果還不是什麼重要的App的話,那麼我可能就直接將它卸載掉了。

為什麼一個很好的通知欄功能現在卻變得這麼遭用戶討厭?很大一部分原因都是因為開發者沒有節制地使用導致的。就好像App保活一樣,直到今天還是不斷有人問我該如何保活App,試想如何每個人都能保活自己的App,那麼最終受害的人是誰?還不是使用Android手機的用戶。大家的手機只會越來越卡,最後只想把手機丟掉,變成iPhone用戶了。也是因為開發者沒節制地使用,Android現在的每個版本都會不斷收縮後臺權限。

回到通知欄上也是一樣,每個開發者都只想著儘可能地去宣傳自己的App,最後用戶的手機就亂得跟雞窩一樣了。但是通知欄又還是有用處的,比如我們收到微信、簡訊等消息的時候,確實需要通知欄給我們提醒。因此分析下來,通知欄目前最大的問題就是,無法讓用戶對感興趣和不感興趣的消息進行區分。就比如說,我希望淘寶向我推送賣家發貨和物流的相關消息,但是我不想收到那些打折促銷或者是讓我去買衣服的這類消息。那麼就目前來說,是沒有辦法對這些消息做區分的,我要麼同意接受所有消息,要麼就屏蔽所有消息,這是當前通知欄的痛點。

那麼在Android 8.0系統中,Google也是從這個痛點開始下手的。



從Android 8.0系統開始,Google引入了通知渠道這個概念。

什麼是通知渠道呢?顧名思義,就是每條通知都要屬於一個對應的渠道。每個App都可以自由地創建當前App擁有哪些通知渠道,但是這些通知渠道的控制權都是掌握在用戶手上的。用戶可以自由地選擇這些通知渠道的重要程度,是否響鈴、是否振動、或者是否要關閉這個渠道的通知。

擁有了這些控制權之後,用戶就再也不用害怕那些垃圾推送消息的打擾了,因為用戶可以自主地選擇自己關心哪些通知、不關心哪些通知。舉個具體的例子,我希望可以即時收到支付寶的收款信息,因為我不想錯過任何一筆收益,但是我又不想收到支付寶給我推薦的周圍美食,因為我沒錢只吃得起公司食堂。這種情況,支付寶就可以創建兩種通知渠道,一個收支,一個推薦,而我作為用戶對推薦類的通知不感興趣,那麼我就可以直接將推薦通知渠道關閉,這樣既不影響我關心的通知,又不會讓那些我不關心的通知來打擾我了。

對於每個App來說,通知渠道的劃分是非常需要仔細考究的,因為通知渠道一旦創建之後就不能再修改了,因此開發者需要仔細分析自己的App一共有哪些類型的通知,然後再去創建相應的通知渠道。這裡我們來參考一下Twitter的通知渠道劃分:

可以看到,Twitter就是根據自己的通知類型,對通知渠道進行了非常詳細的劃分,這樣用戶的自主選擇性就比較高了,也就大大降低了用戶不堪其垃圾通知的騷擾而將App卸載的概率。



Google這次對於8.0系統通知渠道的推廣態度還是比較強硬的。

首先,如果你升級了appcompat庫,那麼所有使用appcompat庫來構建通知的地方全部都會進行廢棄方法提示,如下所示:

上圖告訴我們,此方法已廢棄,需要使用帶有通知渠道的方法才行。

當然,Google也並沒有完全做絕,即使方法標為了廢棄,但還是可以正常使用的。可是如果你將項目中的targetSdkVersion指定到了26或者更高,那麼Android系統就會認為你的App已經做好了8.0系統的適配工作,當然包括了通知欄的適配。這個時候如果還不使用通知渠道的話,那麼你的App的通知將完全無法彈出。因此這裡給大家的建議就是,一定要適配。

好了,前面向大家介紹了這麼多的背景知識,那麼現在開始我們就正式進入正題,來學習一下如何進行8.0系統中通知欄的適配。



首先我們使用Android Studio來新建一個項目,就叫它NotificationTest吧。

創建好項目之後,打開app/build.gradle文件檢查一下,確保targetSdkVersion已經指定到了26或者更高,如下所示:

apply plugin: 'com.android.application'
android {
   compileSdkVersion 26
   defaultConfig {
       applicationId "com.example.notificationtest"
       minSdkVersion 15
       targetSdkVersion 26
       versionCode 1
       versionName "1.0"
       testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
   }
}

可以看到,這裡我在創建新項目的時候默認targetSdkVersion就是26,如果你是低於26的話,說明你的Android SDK有些老了,最好還是更新一下。當然如果你懶得更新也沒關係,手動把它改成26就可以了。

接下來修改MainActivity中的代碼,如下所示:

public class MainActivity extends AppCompatActivity {

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
           String channelId = "chat";
           String channelName = "聊天消息";
           int importance = NotificationManager.IMPORTANCE_HIGH;
           createNotificationChannel(channelId, channelName, importance);
           channelId = "subscribe";
           channelName = "訂閱消息";
           importance = NotificationManager.IMPORTANCE_DEFAULT;
           createNotificationChannel(channelId, channelName, importance);
       }
   }
   
   @TargetApi(Build.VERSION_CODES.O)
   private void createNotificationChannel(String channelId, String channelName, int importance) {
       NotificationChannel channel = new NotificationChannel(channelId, channelName, importance);
       NotificationManager notificationManager = (NotificationManager) getSystemService(
               NOTIFICATION_SERVICE);
       notificationManager.createNotificationChannel(channel);
   }
   
}

代碼不長,我來簡單解釋下。這裡我們在MainActivity中創建了兩個通知渠道,首先要確保的是當前手機的系統版本必須是Android 8.0系統或者更高,因為低版本的手機系統並沒有通知渠道這個功能,不做系統版本檢查的話會在低版本手機上造成崩潰。

創建一個通知渠道的方式非常簡單,這裡我封裝了一個createNotificationChannel()方法,裡面的邏輯相信大家都看得懂。需要注意的是,創建一個通知渠道至少需要渠道ID、渠道名稱以及重要等級這三個參數,其中渠道ID可以隨便定義,只要保證全局唯一性就可以。渠道名稱是給用戶看的,需要能夠表達清楚這個渠道的用途。重要等級的不同則會決定通知的不同行為,當然這裡只是初始狀態下的重要等級,用戶可以隨時手動更改某個渠道的重要等級,App是無法幹預的。

上述代碼我是模擬了這樣一個場景。想像一下我們正在開發一個類似於微信的App,其中App通知主要可以分為兩類,一類是我和別人的聊天消息,這類消息非常重要,因此重要等級我設為了IMPORTANCE_HIGH。另一類是公眾號的訂閱消息,這類消息不是那麼重要,因此重要等級我設為了IMPORTANCE_DEFAULT。除此之外,重要等級還可以設置為IMPORTANCE_LOW、IMPORTANCE_MIN,分別對應了更低的通知重要程度。

現在就可以運行一下代碼了,運行成功之後我們關閉App,進入到設置 -> 應用 -> 通知當中,查看NotificationTest這個App的通知界面,如下圖所示:

剛才我們創建的兩個通知渠道這裡已經顯示出來了。可以看到,由於這兩個通知渠道的重要等級不同,通知的行為也是不同的,聊天消息可以發出提示音並在屏幕上彈出通知,而訂閱消息只能發出提示音。

當然,用戶還可以點擊進去對該通知渠道進行任意的修改,比如降低聊天消息的重要等級,甚至是可以完全關閉該渠道的通知。

至於創建通知渠道的這部分代碼,你可以寫在MainActivity中,也可以寫在Application中,實際上可以寫在程序的任何位置,只需要保證在通知彈出之前調用就可以了。並且創建通知渠道的代碼只在第一次執行的時候才會創建,以後每次執行創建代碼系統會檢測到該通知渠道已經存在了,因此不會重複創建,也並不會影響任何效率。



觸發通知的代碼和之前版本基本是沒有任何區別的,只是在構建通知對象的時候,需要多傳入一個通知渠道ID,表示這條通知是屬於哪個渠道的。

那麼下面我們就來讓通知顯示出來。

首先修改activity_main.xml中的代碼,如下所示:

<LinearLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="match_parent"
   android:layout_height="match_parent">
   <Button
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="發送聊天消息"
       android:onClick="sendChatMsg"
       />
   <Button
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="發送訂閱消息"
       android:onClick="sendSubscribeMsg"
       />
</LinearLayout>

這裡我們在布局文件中加入了兩個按鈕,很顯然,一個是用於觸發聊天消息渠道通知的,一個是用於觸發訂閱消息渠道通知的。

接下來修改MainActivity中的代碼,如下所示:

public class MainActivity extends AppCompatActivity {

   ...
   
   public void sendChatMsg(View view) {
       NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
       Notification notification = new NotificationCompat.Builder(this, "chat")
               .setContentTitle("收到一條聊天消息")
               .setContentText("今天中午吃什麼?")
               .setWhen(System.currentTimeMillis())
               .setSmallIcon(R.drawable.icon)
               .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.icon))
               .setAutoCancel(true)
               .build();
       manager.notify(1, notification);
   }
   
   public void sendSubscribeMsg(View view) {
       NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
       Notification notification = new NotificationCompat.Builder(this, "subscribe")
               .setContentTitle("收到一條訂閱消息")
               .setContentText("地鐵沿線30萬商鋪搶購中!")
               .setWhen(System.currentTimeMillis())
               .setSmallIcon(R.drawable.icon)
               .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.icon))
               .setAutoCancel(true)
               .build();
       manager.notify(2, notification);
   }
   
}

這裡我們分別在sendChatMsg()和sendSubscribeMsg()方法中觸發了兩條通知,創建通知的代碼就不再多做解釋了,和傳統創建通知的方法沒什麼兩樣,只是在NotificationCompat.Builder中需要多傳入一個通知渠道ID,那麼這裡我們分別傳入了chat和subscribe這兩個剛剛創建的渠道ID。

現在重新運行一下代碼,並點擊發送聊天消息按鈕,效果如下圖所示:

由於這是一條重要等級高的通知,因此會使用這種屏幕彈窗的方式來通知用戶有消息到來。然後我們可以下拉展開通知欄,這裡也能查看到通知的詳細信息:

用戶可以通過快速向左或者向右滑動來關閉這條通知。

接下來點擊發送訂閱消息按鈕,你會發現現在屏幕上不會彈出一條通知提醒了,只會在狀態欄上顯示一個小小的通知圖標:

因為訂閱消息通知的重要等級是默認級別,這就是默認級別通知的展示形式。當然我們還是可以下拉展開通知欄,查看通知的詳細信息:

不過上面演示的都是通知欄的傳統功能,接下來我們看一看Android 8.0系統中通知欄特有的功能。

剛才提到了,快速向左或者向右滑動可以關閉一條通知,但如果你緩慢地向左或者向右滑動,就會看到這樣兩個按鈕:

其中,左邊那個時鐘圖標的按鈕可以讓通知延遲顯示。比方說這是一條比較重要的通知,但是我暫時沒時間看,也不想讓它一直顯示在狀態欄裡打擾我,我就可以讓它延遲一段後時間再顯示,這樣我就暫時能夠先將精力放在專注的事情上,等過會有時間了這條通知會再次顯示出來,我不會錯過任何信息。如下所示:

而右邊那個設置圖標的按鈕就可以用來對通知渠道進行屏蔽和配置了,用戶對每一個App的每一個通知渠道都有絕對的控制權,可以根據自身的喜好來進行配置和修改。如下所示:

比如說我覺得訂閱消息老是向我推薦廣告,實在是太煩了,我就可以將訂閱消息的通知渠道關閉掉。這樣我以後就不會再收到這個通知渠道下的任何消息,而聊天消息卻不會受到影響,這就是8.0系統通知渠道最大的特色。

另外,點擊上圖中的所有類別就可以進入到當前應用程式通知的完整設置界面。



在前面的內容中我們已經了解到,通知渠道一旦創建之後就不能再通過代碼修改了。既然不能修改的話那還怎麼管理呢?為此,Android賦予了開發者讀取通知渠道配置的權限,如果我們的某個功能是必須按照指定要求來配置通知渠道才能使用的,那麼就可以提示用戶去手動更改通知渠道配置。

只講概念總是不容易理解,我們還是通過具體的例子來學習一下。想一想我們開發的是一個類似於微信的App,聊天消息是至關重要的,如果用戶不小心將聊天消息的通知渠道給關閉了,那豈不是所有重要的信息全部都丟了?為此我們一定要保證用戶打開了聊天消息的通知渠道才行。

修改MainActivity中的代碼,如下所示:

public class MainActivity extends AppCompatActivity {

   ...
   
   public void sendChatMsg(View view) {
       NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
           NotificationChannel channel = manager.getNotificationChannel("chat");
           if (channel.getImportance() == NotificationManager.IMPORTANCE_NONE) {
               Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
               intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
               intent.putExtra(Settings.EXTRA_CHANNEL_ID, channel.getId());
               startActivity(intent);
               Toast.makeText(this, "請手動將通知打開", Toast.LENGTH_SHORT).show();
           }
       }
       Notification notification = new NotificationCompat.Builder(this, "chat")
               ...
               .build();
       manager.notify(1, notification);
   }
   
   ...
}

這裡我們對sendChatMsg()方法進行了修改,通過getNotificationChannel()方法獲取到了NotificationChannel對象,然後就可以讀取該通知渠道下的所有配置了。這裡我們判斷如果通知渠道的importance等於IMPORTANCE_NONE,就說明用戶將該渠道的通知給關閉了,這時會跳轉到通知的設置界面提醒用戶手動打開。

現在重新運行一下程序,效果如下圖所示:

可以看到,當我們將聊天消息的通知渠道關閉後,下次再次發送聊天消息將會直接跳轉到通知設置界面,提醒用戶手動將通知打開。

除了以上管理通知渠道的方式之外,Android 8.0還賦予了我們刪除通知渠道的功能,只需使用如下代碼即可刪除:

NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.deleteNotificationChannel(channelId);

但是這個功能非常不建議大家使用。因為Google為了防止應用程式隨意地創建垃圾通知渠道,會在通知設置界面顯示所有被刪除的通知渠道數量,如下圖所示:

這樣是非常不美觀的,所以對於開發者來說最好的做法就是仔細規劃好通知渠道,而不要輕易地使用刪除功能。



前面我們提到過,蘋果是從iOS 5開始才引入了通知欄功能,那麼在iOS 5之前,iPhone都是怎麼進行消息通知的呢?使用的就是未讀角標功能,效果如下所示:

實際上Android系統之前是從未提供過這種類似於iOS的角標功能的,但是由於很多國產手機廠商都喜歡跟風iOS,因此各種國產手機ROM都紛紛推出了自己的角標功能。

可是國產手機廠商雖然可以訂製ROM,但是卻沒有制定API的能力,因此長期以來都沒有一個標準的API來實現角標功能,很多都是要通過向系統發送廣播來實現的,而各個手機廠商的廣播標準又不一致,經常導致代碼變得極其混雜。

值得高興的是,從8.0系統開始,Google制定了Android系統上的角標規範,也提供了標準的API,長期讓開發者頭疼的這個問題現在終於可以得到解決了。

那麼下面我們就來學習一下如何在Android系統上實現未讀角標的效果。修改MainActivity中的代碼,如下所示:

public class MainActivity extends AppCompatActivity {

   ...
   
   @TargetApi(Build.VERSION_CODES.O)
   private void createNotificationChannel(String channelId, String channelName, int importance) {
       NotificationChannel channel = new NotificationChannel(channelId, channelName, importance);
       channel.setShowBadge(true);
       NotificationManager notificationManager = (NotificationManager) getSystemService(
               NOTIFICATION_SERVICE);
       notificationManager.createNotificationChannel(channel);
   }
   
   public void sendSubscribeMsg(View view) {
       NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
       Notification notification = new NotificationCompat.Builder(this, "subscribe")
               ...
               .setNumber(2)
               .build();
       manager.notify(2, notification);
   }
   
}

可以看到,這裡我們主要修改了兩個地方。第一是在創建通知渠道的時候,調用了NotificationChannel的setShowBadge(true)方法,表示允許這個渠道下的通知顯示角標。第二是在創建通知的時候,調用了setNumber()方法,並傳入未讀消息的數量。

現在重新運行一下程序,並點擊發送訂閱消息按鈕,然後在Launcher中找到NotificationTest這個應用程式,如下圖所示:

可以看到,在圖標的右上角有個綠色的角標,說明我們編寫的角標功能已經生效了。

需要注意的是,即使我們不調用setShowBadge(true)方法,Android系統默認也是會顯示角標的,但是如果你想禁用角標功能,那麼記得一定要調用setShowBadge(false)方法。

但是未讀數量怎麼沒有顯示出來呢?這個功能還需要我們對著圖標進行長按才行,效果如下圖所示:

這樣就能看到通知的未讀數量是2了。

可能有些朋友習慣了iOS上的那種未讀角標,覺得Android上這種還要長按的方式很麻煩。這個沒有辦法,因為這畢竟是Android原生系統,Google沒有辦法像國內手機廠商那樣可以肆無忌憚地模仿iOS,要不然可能會吃官司的。但是我相信國內手機廠商肯定會將這部分功能進行定製,風格應該會類似於iOS。不過這都不重要,對於我們開發者來說,最好的福音就是有了統一的API標準,不管國內手機廠商以後怎麼定製ROM,都會按照這個API的標準來定製,我們只需要使用這個API來進行編程就可以了。

好的,關於Android 8.0系統適配的上下兩篇文章到這裡就結束了,感謝大家閱讀。

文章中的示例源碼點擊下方 閱讀原文 下載。


歡迎長按下圖 -> 識別圖中二維碼

或者 掃一掃 關注我的公眾號

相關焦點

  • 如何系統學習功能圖標(二)
    《如何系統的學習功能圖標?》這兩篇文章,但裡面還是缺少了理論依據和系統做圖標的思維。通過不斷在學習的過程中不斷有了新的認知,希望和大家一起分享。圖標設計原則1. 表意準確功能圖標的第一原則是表意準確,要讓用戶看到圖標第一時間就能理解它的含義。同時,功能圖標還具有通用性,符合所有的用戶的使用習慣,不要試圖去改變用戶日積月累沉澱下來的記憶。
  • Android N會給我們手機帶來哪些新功能
    3、通知欄可以做更多事   通知欄直接回復消息同樣早已出現在一些廠商的系統中,這次谷歌將其加入到了系統默認功能中,比如收到了一條微信,那麼你可以直接在通知欄點擊「回復」,然後像平時發微信一樣呼出鍵盤輸入文字。這一功能支持像微信這樣的第三方應用,但仍需第三方軟體方面提供適配。
  • 用活動監視器 Dock 欄圖標實時監控系統活動
    活動監視器(Activity Monitor)相信是不少果迷在使用 OS X 系統時得心應手的實用工具之一,查看CPU、系統內存、硬碟活動、硬碟使用率、網絡、管理進程等應有盡有。不過你是否知道它的系統 Dock 欄圖標可以變身成為一個實時系統監視器,包括 CPU 使用率、CPU 歷史記錄、網絡使用率、硬碟活動、內存使用率等實時信息都能通過小小的圖標展現在您的面前。很好奇吧?一起來看看怎麼實現吧!
  • 【評測】原生神油再戰兩年,小米2s Android 5.0上手評測
    而本次的測試機恰逢是電信版的小米2s,實測是電信卡沒有信號…卡刷包大小為186m,從體積上都可以猜得到系統純淨得非常誇張。和刷機包同時發布的還有對應的Recovery 鏡像(CWM 6.0.5.1),可以用「移動叔叔工具箱」直接刷入。當然,也可以下載其他機友重新製作的recovery刷機包,以官方刷機的方式刷入。
  • Android 7.0+使用VirtualXposed+Charles進行抓包
    這裡我使用的手機為小米8 Lite,不同的手機品牌/型號安裝證書的方法可能有所不同,具體可通過搜尋引擎來獲得安裝的方法。依次點擊:設置→更多設置→系統安全→加密與憑據→從SD卡安裝,接著在文件瀏覽器中選擇你下載好的證書。然後給證書憑據起個名字,可隨意填寫,憑據用途選擇VPN和應用。
  • Android5.0 熱門機型內置應用提取(近100款最新實用軟體)款款都是精品!
    史上最全提取軟體,包含android5.0軟體
  • 一加手機5T再遭吐槽:系統適配速度慢,又斷然拒絕谷歌幫忙
    從Android 8.0開始,谷歌推行了一個名為Project Treble的項目。簡單的說,現在手機要不要升級系統都由廠商決定,而廠商有的會拒絕為老手機升級,有的又因為能力不足適配新系統速度特別慢,這導致如今Android各個版本並存的局面。何況谷歌每個月都發補丁,哪個廠商會不煩躁?可能谷歌覺得這才導致了碎片化,所以要改變一下。
  • QQ 國際版 for Android v6.0.0 正式版發布
    騰訊手機Android QQ國際版 v6.0.0正式版發布,詳細版本號為v6.0.0.6500,上一個正式版v5.3.1發布於2018年2月2日,時隔111
  • 微信白天模式怎麼調|微信|手機系統|夜間護眼|ios|android|任務欄
    微信夜間和白天模式是跟隨手機系統自動切換的,不需要在微信上設置。ios用戶點擊【設置】-【顯示與亮度】,選擇【普通】模式即可。安卓用戶一般是在【設置】中關閉【深色模式】、【夜間護眼】等模式。具體介紹如下:iOS系統1、當手機系統開啟深色或護眼等模式時,微信就會自動適配,所以無需在微信上設置;2、ios用戶點擊【設置】-【顯示與亮度】,然後選擇【普通】模式即可;3、下拉手機的任務欄,長按【調節亮度】的功能按鈕,點擊頁面左下角的按鈕關閉【深色模式】,返回微信界面即可看到微信已經調成白天模式了。
  • 移植適配iOS14動態英文,巨圓姐妹篇 | VDロゴ丸​(標誌丸)
    · 移植Alex的動態英文作為標配,感謝@去海走走提供的素材,溫馨提示,由於Rhino的英文動態只適配了iOS13/14,因此此次沒有iOS 12的版本,喜歡此字的可以自行搭配其他英文。鎖屏冒號做了居中處理。
  • Win7系統如何隱藏任務欄應用圖標?任務欄圖標的隱藏方法
    使用win7系統的用戶都知道,在運行一些遊戲應用的時候,右下角任務欄會顯示圖標,熟知的人一看就知道你運行了什麼程序,為了不讓人看到就需要對其進行隱藏。那問題來了,怎麼隱藏任務欄內的圖標呢?下面小編就跟大家分享一些Win7系統如何隱藏任務欄應用圖標的方法。
  • EMUI9.0音量鍵默認控制媒體音量的真相,這裡有答案!
    來源:北國網對於手機界來說下半年最大的期待就是安卓第九代系統Android P(俗稱安卓9.0)的發布。在8月份谷歌正式發布之後,用戶翹首以盼希望能儘快體驗,隨後華為、小米、一加等廠商紛紛開啟了安卓9.0的定製適配進程,華為EMUI9.0、小米MIUI10等陸續上線。
  • 畢節市大型養豬場定位欄生產廠家系統設計原則
    畢節市大型養豬場定位欄生產廠家系統設計原則   畢節市大型養豬場定位欄生產廠家系統設計原則  本公司主要經營:母豬產床、保育床、限位欄、定位欄等,歡迎大家前來選購!
  • 谷歌發布第二個Android P測試版 新增大量表情符號
    另外還有通知欄的改進,也是為了方便適配新的凹槽屏幕。截至目前,Android P測試版已經兼容到了包括Google Pixel、Nokia、vivo、OPPO、一加、小米、Sony、Essential 等在內的8家手機廠商。在剛剛更新的第二個Android P測試版中,用戶能夠獲得更多新的表情符號,如超級英雄、月餅、龍蝦和美洲駝等等。
  • 千呼萬喚終於來了 一加手機完美適配miui系統
    -03/17:01 除了超高性價比,一加手機主打的系統開放也吸引了不少用戶
  • 一加發布氫OS 11,年輪AOD+多人禪定模式,陸續適配一加6以上機型
    8月10日下午,一加在線上正式發布氫OS 11全新版本,帶來了全新的AOD、智能圖庫,語音便籤,多人禪定模式、全新暗色模式等功能。據一加介紹,氫OS 11將適配一加6以及之後的一加新機。氫OS 11的一加壁紙支持早中晚三個時間段的不同變化。
  • 元氣騎士:適配所有天賦的神器,還能發射小熊貓,太可愛了吧!
    不同的武器適配不同的天賦,比如散彈槍就適合散彈增加的天賦,弓箭類武器適配蓄力加快天賦,法杖類武器適合法杖增強天賦,讓它們達到滿配的狀態只需要幾個天賦,但是小樂在這一期元氣暢遊記中介紹的這個神奇,它適配所有的天賦,還十分有趣呢!
  • android啟動頁設計專題及常見問題 - CSDN
    xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent