Android彈出Window提示框(基於Android6.0)
在專案中經常會需要應用彈出一些自定義的視窗,這時候Android自帶的系統Dialog就無法滿足我們的需求了,為了滿足專案需求,我們可以使用Window來滿足這一需求。
首先我們新建一個專案,來到MainActivity的佈局檔案,在這裡新建一個按鈕用於彈出Window
<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:id="@+id/btn_window"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="open window"/>
</LinearLayout>
接著我們完成window的佈局
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:paddingLeft="10dp"
android:background="@android:color/darker_gray"
android:orientation="vertical"
android:layout_width ="300dp"
android:layout_height="200dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="發件人——13110203356"
android:textSize="18sp"
android:textColor="@color/colorPrimary"/>
<TextView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_marginTop="5dp"
android:text="這裡是內容"
android:textSize="15sp"
android:textColor="@color/colorAccent"/>
<Button
android:id="@+id/btn_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="按鈕"
android:layout_gravity="right"/>
</LinearLayout>
</LinearLayout>
這個佈局實際上類似於簡訊提示框,效果如下
之後在MainActivity中完成彈出Window的邏輯,首先我們要知道在Android6.0之前,使用Window只需要宣告許可權<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
即可,但是從Android6.0開始,應用要想彈出一個懸浮在任意App上的Window的話需要使用者手動為這個應用設定overlays許可權,這個許可權就連執行時許可權也無法拿到,必須要使用者前往手機的許可權介面為應用設定該許可權,因此在彈出window之前我們首先要進行一個邏輯判斷,判斷使用者是否已經獲取過overlays許可權,如果獲取了許可權就直接彈出window,若沒有獲取過overlays許可權則會自動將介面跳轉到許可權設定介面,讓使用者決定是否提供該許可權,最後,程式碼如下
public class MainActivity extends AppCompatActivity
{
private Button btn_window;
private Button btn_send;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_window= (Button) findViewById(R.id.btn_window);
btn_window.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M)
{
//版本大於6.0則需要判斷是否獲取了overlays許可權
if (!Settings.canDrawOverlays(MainActivity.this))
{
startActivityForResult(new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:"+getPackageName())),1);
}
else
{
openWindow();
}
}
}
});
}
private void openWindow()
{
//獲取WindowManager例項
final WindowManager windowManager= (WindowManager) getSystemService(Context.WINDOW_SERVICE);
//獲取窗口布局引數例項
WindowManager.LayoutParams params=new WindowManager.LayoutParams();
//設定窗口布局引數屬性
params.width= WindowManager.LayoutParams.MATCH_PARENT;
params.height=WindowManager.LayoutParams.MATCH_PARENT;
//設定window的顯示特性
params.flags=WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON|WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;
//設定視窗半透明
params.format= PixelFormat.TRANSLUCENT;
//設定視窗型別
params.type=WindowManager.LayoutParams.TYPE_PHONE;
//獲取窗口布局例項
final View windowView=View.inflate(this,R.layout.window,null);
//獲取窗口布局中的按鈕例項
btn_send= (Button) windowView.findViewById(R.id.btn_send);
//設定點選事件
btn_send.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
windowManager.removeView(windowView);
}
});
//顯示視窗
windowManager.addView(windowView,params);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
switch (requestCode)
{
case 1:
{
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M)
{
if (Settings.canDrawOverlays(this))
{
//若使用者開啟了overlay許可權,則開啟window
openWindow();
}
else
{
Toast.makeText(this,"不開啟overlay許可權",Toast.LENGTH_SHORT).show();
}
}
break;
}
}
}
}
最後的效果如下,當然別忘了在Android6.0後也是需要在Manifest檔案中宣告許可權的
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
相關推薦
Android彈出Window提示框(基於Android6.0)
在專案中經常會需要應用彈出一些自定義的視窗,這時候Android自帶的系統Dialog就無法滿足我們的需求了,為了滿足專案需求,我們可以使用Window來滿足這一需求。 首先我們新建一個專案,來到MainActivity的佈局檔案,在這裡新建一個按鈕用於彈出W
delphi messagebox 彈出資訊提示框大全
1. 警告資訊框 MessageBox(Handle,'警告資訊框','警告資訊框',MB_ICONWARNING); 2.疑問資訊框 MessageBox(Handle,'疑問資訊框','疑問資訊框',MB_ICONQUESTION); 3.錯誤提示框 MessageBox(Handle,'錯誤資訊框'
android彈出多選框
JAVA程式碼: package com.meiguihuayu; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterfa
解決PL/SQL Dev連線Oracle彈出空白提示框
第一次安裝Oracle,裝在虛擬機器中,用PL/SQL Dev連線遠端資料庫的時候老是彈出空白提示框,網上找了很久,解決方法也很多,可是就是沒法解決我這種情況的。 沒辦法,只能自己研究,經過大概一天時間吧,還是搞好了,寫個總結。 出現這種問題,解決方法大概有這幾
ajax呼叫後臺實現檔案下載,不彈出下載提示框,無法下載
在做ajax呼叫後臺實現檔案下載時,出現了後臺返回前端正確資料,但前臺就是不提示下載框,且沒有下載檔案 $.ajax({ "url" : urlStr + 'exportFile', "method" : "POST", "data" : { "list
下載檔案,並彈出儲存提示框,選擇位置,絕對路徑 or相對路徑
1.因為Aiax不能返回流 所以用js表單提交發送請求 var form = document.createElement("form");document.body.appendChild(form);var nameInput = document.createEle
java Swing彈出式提示框
package com.sanguo.test; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; imp
彈出訊息提示框,彈出確認取消,彈出物品獲得提示框
一、 彈出提示框 Globals.MUIManager.CreatMessageLabel("支付失敗"); public T GetUI<T>() where T : HotFix_Project.UI.UI_Logic
css實現熱點地圖map,滑鼠移到熱點彈出層提示框
標籤: <div class="ConDiv"> <img border="0" usemap="#Map" src="images/dt_04.png" />
cell上 button點選彈出資訊提示框
-(IBAction)onWarnInfo:(id)sender{ <span style="white-space:pre"> </span>UIButton *btn=(UIButton *)sender; N
[UWP]在應用退出時彈出確認提示框
1. 需求 在應用退出時(點選右上角的關閉按鈕)彈出一個確認按鈕可以說是一個最常見的操作了,例如記事本的“你是否儲存”: 但這個功能在UWP上居然有點小複雜。這篇文章將解釋如何實現這個功能。 2. CloseRequested 為了監視應用退出事件,我本來使用了CoreApplication.Exitin
Android 彈出框LemonBubble提示控制元件
簡介:這是一個完全Made in China的炫酷彈出指示層Android版本(-_-#意思就是還有iOS的),他能讓你快速的自定義任何樣式的彈出框 最新更新記錄: 捕捉了LemonBubble.forceHide()中的空指標異常,保證開發者在onDestroy
Android EditText彈出軟鍵盤實現頁面標題頭不動,軟鍵盤彈出在編輯框下面
為了實現EditText編輯的時候彈出軟鍵盤標題頭不動,底部編輯框上移,想了好多種方法,也百度,問同事每種辦法都有問題,在這總結一下,希望能幫助到大家。 上圖看下效果: 可以看到彈出鍵盤的時候,只有EditText在軟鍵盤上面,還有一個藍色點,這個隨後再說。 用Relative
android webview無法彈出select選擇框
問題描述: h5頁面裡面有個select標籤,安卓app裡的webview裡面點選的時候預設會拉起一個原生的框,但是在筆者的app上,怎麼點都沒反應,控制檯也沒日誌,也不報錯,經過一段時間的的排查,
android-彈出鍵盤以及輸入框的設定
1、開啟Activity時先不彈出鍵盤 解決方案: 在AndroidManifest.xml中設定Activity與鍵盤的互動模式,即android:windowSoftInput屬性,它能影響兩個地方: 1、產生焦點時,軟鍵盤是否隱藏; 2、是否減少活動主視窗大小以
java中如何實現在手機裡彈出安卓框,提示框
public void onClick(View v) { // TODO Auto-generated method stub new AlertDialog.Builder(this).setTitle("請遵守華為遊戲中心服務條款,安裝華為遊戲
Android中webview無法彈出檔案選擇框,點選按鈕沒反應的問題
以前寫的專案時,遇到過這樣一個問題,在ios和微信都可以,就是android不行,尷尬的,無論你多使勁點都發現無法彈出安卓原生檔案選擇介面,簡直要崩潰了最後通過一番資料查詢,發現要重寫WebChrome
Android安卓WebApp中 全屏和普通模式下 webview中軟鍵盤彈出擋住輸入框 解決方案
最近公司開發的WEBAPP遇到了一個比較噁心的問題。就是在webview中當需要輸入內容時,軟鍵盤彈起後,擋住了輸入框,試了很多辦法都不太滿意。(這裡要吐槽下,人家IOS端,蘋果系統都給直接封裝好了,
android 彈出選擇框,簡單通用彈出選擇框
LinearLayout ll =(LinearLayout)getActivity().findViewById(R.id.log_sel_qyport); ll.setOnClickListener(new View.OnClickListener() {
delphi彈出信息框大全
show question 修改 可選參數 說明 mask lose itl 位置 1. 警告信息框 MessageBox(Handle,‘警告信息框‘,‘警告信息框‘,MB_ICONWARNING);2.疑問信息框 MessageBox(Handle,‘疑問信息框‘,‘疑