android通知欄布局
⑴ android 5.0 橫屏狀態下下拉通知欄
布局文件所在/frameworks/base/packages/SystemUI/res/layout
status_bar_expanded_header.xml為下拉菜單中頭部的布局文件,包括時間、日期、設置等。
status_bar_expanded.xml 為下拉菜單整體布局
com.Android.systemui.statusbar StatusBarIconView修改下拉菜單中icon布局
public StatusBarIconView(Context context, String slot, Notification notification) {
super(context);
final Resources res = context.getResources();
mSlot = slot;
mNumberPain = new Paint();
mNumberPain.setTextAlign(Paint.Align.CENTER);
mNumberPain.setColor(res.getColor(R.drawable.notification_number_text_color));
mNumberPain.setAntiAlias(true);
mNotification = notification;
setContentDescription(notification);
// We do not resize and scale system icons (on the right), only notification icons (on the
// left).
if (notification != null) {
final int outerBounds = res.getDimensionPixelSize(R.dimen.status_bar_icon_size);
final int imageBounds = res.getDimensionPixelSize(R.dimen.status_bar_icon_drawing_size);
final float scale = (float)imageBounds / (float)outerBounds;
setScaleX(scale);
setScaleY(scale);
final float alpha = res.getFraction(R.dimen.status_bar_icon_drawing_alpha, 1, 1);
setAlpha(alpha);
}
setScaleType(ImageView.ScaleType.CENTER_INSIDE);
}
⑵ 【Android】Notification通知欄使用RemoteViews自定義布局,怎麼自定義點擊事件
首先你的自定義布局的Notification是不是有一個RemoteView,那你就可以通過這個RemoteView來設置點擊事件:
mRemoteViews.setOnClickPendingIntent(R.id.xxx, mPendingIntent);
其中你的R.id.xxx 就是你那個被點擊的控制項的id
mPendingIntent是一個PendingIntent,它可以這樣定義:
mPendingIntent = PendingIntent.getActivity(context,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);
注意到裡面需要一個參數intent:
Intent intent = new Intent(xxx ,AaaActivity);
這樣當點擊時,就可以跳轉到AaaActivity
⑶ android 通知欄顯示哪個應用彈出的
是一些瀏覽器軟體推出來的廣告,
解決辦法
1、滑鼠在任務欄空白處彈出右鍵菜單。
2、選中菜單中的「屬性」選項,滑鼠左鍵點擊,彈出「任務欄和「開始」菜單屬性」窗口。
3、點擊「任務欄」頁面「通知區域」欄目的「自定義」按鈕,彈出「通知區域圖標」窗口。
4、點擊下方紅框處的「始終在任務欄上顯示圖標和通知」以去掉前方的勾選,然後把上方所有應用程序後邊的選項設為「隱藏圖標和通知」。
5、再點擊下方的「打開或關閉系統圖標」按鈕,彈出「」窗口。
6、把所有系統圖標的對應的行為選項設置為「關閉」,然後點擊「確定」按鈕回到「通知區域圖標」窗口。
7、在「通知區域圖標」窗口點擊「確定」按鈕完成設置,並關閉窗口。此時,任務欄的系統消息通知區域。至此,取消電腦右下角的系統消息通知完成。
⑷ android 修改通知欄位置
修改方法:
1、ROOT機器
2、使用ROOT管理器找到root/system/framework/framework-res.apk文件,復制至儲存卡,再復制到電腦上,做好備份
3、用WINRAR打開,進入\res\drawable-mdpi目錄,替換通知欄背景文件以及電池圖標文件。(直接拖入WINRAR,不要解壓)
通知欄背景文件:statusbar_background.9,電池圖標文件:stat_sys_battery_10等
4、將修改後的framework-res.apk文件從SD卡先復制到root/system目錄,修改許可權全部打鉤
5、再從root/system移動到root/system/framework/下
6、重啟手機
可 第3、用WINRAR打開,進入\res\drawable-mdpi目錄,替換通知欄背景文件以及電池圖標文件。(直接拖入WINRAR,不要解壓)
⑸ 如何讓安卓的通知欄像iPhone一樣
1、首先,看一下現有的通知欄信息:
2、然後進入「設置」-「通知欄設置」這里可以對通知欄進行基本的設置:
3、選擇頁面樣式為單頁會出現:
4、然後可以自定義開關位置(這個可以根據自己的使用習慣把經常用的放到前面):
5、然後設置通知欄的主題風格,進入「主題風格」-「混搭」-「通知欄」這樣就可以設置通知欄的主題風格了:
6、如果對現有的主題風格不滿意可以進入在線選擇主題風格,但是這需要流量的,可以根據自己的流量量力而行。
⑹ android怎麼在應用中獲取通知欄的布局
如果找不到api提供的方法,布局都是自己設進去的,試試在設進去的時候把這個對像的引用留出來,這樣是否可以使用
⑺ android開發怎麼顯示系統頂部通知欄
1、首先,獲取系統的通知服務
2、發送一個最簡單的通知
3、刪除一個通知。參數即為通知的id
4、發送一個通知,點擊通知後跳轉到一個Activity,從這個Activity返回後,進入程序內的某一個頁面(一般為主頁)
5、和上述4類似,只是在打開的Activity中返回時回到home頁
6、帶進度條的通知
7、擴展布局的通知。按住通知條下滑,可以查看更詳細的內容
8、自定義布局的通知欄。(根據谷歌的官方文檔不推薦這么做,因為使用這種方式時,對不同屏幕進行適配需要考慮的因素太多。而且,通知欄應該展示的就是最簡明扼要的信息,對於大多數程序默認的布局已經足夠了。)
⑻ android 設置整個app的通知欄Notification 的聲音和震動用什麼方法
設置安卓手機通知欄提示音的方法如下。
1、以OPPO手機為例,點擊打開手機設置,如圖。
⑼ android怎麼在應用中獲取通知欄的布局
在android的應用層中,涉及到很多應用框架,例如:Service框架,Activity管理機制,Broadcast機制,對話框框架,標題欄框架,狀態欄框架,通知機制,ActionBar框架等等。
下面就來說說經常會使用到通知機制中的通知欄框架(Notificaiton),它適用於交互事件的通知。它是位於頂層可以展開的通知列表。它會時不時的提醒你什麼軟體該更新了,什麼人發你微信消息了等。
(網上看了下,全面介紹的文章不多,所以就萌生了寫這篇的念頭,隨便當作回顧筆記。下面我就通過官方文檔、源代碼、書上的一些資料匯總下這一塊的知識,並通過一個通知欄的匯總DEMO讓大家更好的了解這個類的使用,內容有點多,可以根據需求看目錄學習)。
Notificaiton狀態通知欄:
功能作用
1.顯示接收到短消息、即使消息等信息 (如QQ、微信、新浪、簡訊)
2.顯示客戶端的推送消息(如有新版本發布,廣告,推薦新聞等)
3.顯示正在進行的事物(例如:後台運行的程序)(如音樂播放器、版本更新時候的下載進度等)
思維導圖結構
思維導圖的大體結構(按照各個節點延伸拓展學習)
Notificaiton -- service -- BroadcastReceiver -- Intent(flag、Action等屬性應用) -- PendingIntent
感慨:
一個Notificaiton通知的拓展使用就要涉及與4大組建的配合,所以學好整體的知識體系。
聯系:
1.由於service 是在後台運行,所以它意圖做什麼我們看不到,可以通過Notificaiton 來顯示提醒(如音樂的後台播放)。
2.service服務和BroadcastReceiver廣播相結合,在加上Notificaiton 顯示(如程序的後台更新)。
3.Intent作為意圖處理,和Notificaiton的點擊時間緊密結合在了一起,並且與BroadcastReceiver和service的聯系也緊密不可以分割。
(service 在後台之後通過BroadcastReceiver來通知Notificaiton 顯示相關東西,在通過Intent完成用戶的意圖操作)
⑽ 如何實現Android沉浸式狀態欄
沉浸式通知欄Android4.4以上才支持的新特性。4.3不支持。
具體實現方式如下:
1.新建個公共style,設置android:fitsSystemWindows=true
<!-- 設置應用布局時是否考慮系統窗口布局;true --> <style name="AppBaseTheme" parent="android:Theme.Light.NoTitleBar"> <item name="android:fitsSystemWindows">true</item> </style>
2. 修改AndroidManifest.xml,讓所有的activity樣式默認設置為AppBaseTheme(*不同項目要靈活處理,筆者項目的activity樣式都是統一的所以這樣設置沒問題,但是實際情況下不同的activity可能調用的樣式不一樣,需要讀者自行按自己的項目來設置)
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppBaseTheme" android:name="****">
3.新增沉浸式通知欄實現類,實現原理很簡單。
1)判斷當前系統版本是不是4.4以上,判斷代碼如下:
if (VERSION.SDK_INT >= VERSION_CODES.KITKAT)
2)如果大於4.4則設置狀態欄透明化,代碼如下:
window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
3)獲取activity的根rootView(DecorView),然後創建一個新的view stateBarView並把它添加到rootView(這裏手動給它設置個ID,下次進來時先判斷rootView是否已創建stateBarView,如果已創建則直接獲取該View這樣可以防止重復創建,導致內存泄露)
以下是具體代碼實現:
import android.annotation.SuppressLint;import android.app.Activity;import android.content.res.Resources;import android.graphics.drawable.Drawable;import android.os.Build;import android.view.Gravity;import android.view.View;import android.view.ViewGroup;import android.view.Window;import android.view.WindowManager;import android.widget.FrameLayout.LayoutParams;/** * 沉浸式通知欄公共類 * @author hurrican * */@SuppressLint({ "InlinedApi", "ResourceAsColor" })public class ImmersedNotificationBar { private Activity activity ; //設置沉浸式通知欄的ID(防止重復創建) private final static int IMMERSED_NOTIFICATION_BAR_ID = 12345678 ; private final static String STATUS_BAR_HEIGHT_RES_NAME = "status_bar_height" ; public ImmersedNotificationBar(Activity activity){ this.activity = activity ; } //獲取狀態欄高度 private int getStatusBarHeight(Resources res){ int statusBarHeight = 0; int resourceId = res.getIdentifier(STATUS_BAR_HEIGHT_RES_NAME, "dimen", "android"); if (resourceId > 0) { statusBarHeight = res.getDimensionPixelSize(resourceId); } return statusBarHeight ; } //添加頂部狀態欄 private View addStateBar(Activity activity,ViewGroup rootView,int statusBarHeight){ //創建新的View,並添加到rootView頂部) View statusBarView ; if(null!=rootView.findViewById(IMMERSED_NOTIFICATION_BAR_ID)){ statusBarView = rootView.findViewById(IMMERSED_NOTIFICATION_BAR_ID); }else{ statusBarView = new View(activity); rootView.addView(statusBarView); } statusBarView.setId(IMMERSED_NOTIFICATION_BAR_ID) ; LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT,statusBarHeight); params.gravity = Gravity.TOP; statusBarView.setLayoutParams(params); statusBarView.setVisibility(View.VISIBLE); return statusBarView ; } /** * 設置狀態欄顏色 * @param ColorId */ public void setStateBarColor(int ColorId){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Window window = activity.getWindow(); //activity的頂級布局 ViewGroup rootView = (ViewGroup) window.getDecorView(); //透明化狀態欄 window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); Resources res = activity.getResources(); //獲取狀態欄目的高度 int statusBarHeight = getStatusBarHeight(res); View stateBarView = addStateBar(activity,rootView,statusBarHeight) ; stateBarView.setBackgroundColor(ColorId) ; } } /** * 設置狀態欄顏色 * @param ColorId */ public void setStateBarDrawable(Drawable drawable){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Window window = activity.getWindow(); //activity的頂級布局 ViewGroup rootView = (ViewGroup) window.getDecorView(); //透明化狀態欄 window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); Resources res = activity.getResources(); //獲取狀態欄目的高度 int statusBarHeight = getStatusBarHeight(res); View stateBarView = addStateBar(activity,rootView,statusBarHeight) ; stateBarView.setBackgroundDrawable(drawable) ; } }}