Android activity alert提示彈框實現

<code>原創不易,請多多支持!對軟件技術感興趣的童鞋請關注我,後續技術分享更精彩。/<code>

效果

實現效果如圖。

通過activity構建彈框,可在應用中任何頁面提示。


實現步驟

新建空白activity。activity中鬧鈴彈框實現。manifest添加權限。樣式調整。

代碼

android studio 包路徑右鍵,新建空白activity模板,命名AlertAlarmClockActivity。

修改AlertAlarmClockActivity類。

<code>public class AlertAlarmClockActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//隱藏title
requestWindowFeature(Window.FEATURE_NO_TITLE); // hide title
//屏蔽自動生成的佈局UI,後面通過代碼構建
// setContentView(R.layout.activity_alert_alarm_clock);
//屏蔽點擊彈框外延,關閉彈框功能
setFinishOnTouchOutside(false);


\t\t\t\t//彈框窗口屬性設置。設置彈框在其他界面之上
Window win = getWindow();
WindowManager.LayoutParams winParams = win.getAttributes();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
winParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;


}else{
winParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
}
//彈框窗口在鎖屏狀態下可見
winParams.flags |= (WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

//創建彈框
createDialog();
}

} /<code>

onCreate方法中實現參數定製和彈框構建邏輯。詳見註釋說明。

彈框構建邏輯createDialog()如下:

<code>private void createDialog() {
String taskMsg = "你使用鬧鐘時間到了!!!";

AlertDialog dialog = new AlertDialog.Builder(this)
.setIcon(R.drawable.flutter_app_icon)
.setTitle("任務提醒")
.setCancelable(false)
.setMessage(taskMsg)
.setPositiveButton("確 認", (dlg, whichButton) -> {
finish();
}).create();

dialog.show();


//button 置中 Button positiveButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE);

LinearLayout.LayoutParams positiveButtonLL =(LinearLayout.LayoutParams)positiveButton.getLayoutParams();
positiveButtonLL.gravity = Gravity.CENTER;
positiveButtonLL.width = ViewGroup.LayoutParams.MATCH_PARENT;
positiveButton.setLayoutParams(positiveButtonLL);

}/<code>

注意:Android各版本兼容問題,activity實現類和AlertDialog請使用以下包。

<code>import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;/<code>

添加樣式:{項目}\\app\\src\\main\\res\\values\\styles.xml文件添加樣式。

<code><style><br> <!--不設置activity進入和退出動畫樣式--><br> <item name="android:windowAnimationStyle">@null</item><br> <!--設置窗口的背景為透明,設置透明背景必須要設置此項--><br> <item name="android:windowBackground">@android:color/transparent</item><br> <!--設置窗口的背景是否為半透明,設置透明背景必須要設置此項--><br> <item name="android:windowIsTranslucent">true</item><br> <!--設置狀態欄的背景為半透明--><br> <item name="android:windowTranslucentStatus">true</item><br> /<style>/<code>

manifest文件通過android:theme屬性添加對應樣式引用。

AppCompatActivity有對應的適配樣式,不添加可能導致運行報錯。

<code><activity> /<code>

manifest文件添加權限申明

<code><uses-permission>/<code>

總結

本文介紹了activity構建應用內任意界面上顯示的彈框方法。通過繼承AppCompatActivity類,並覆蓋onCreate方法,可以快速實現alert彈窗效果。
該彈窗實際也可在其他應用界面之上展示,但有一個缺點,當點擊系統回退或回到桌面鍵時,會被隱藏。真拿來做系統鬧鈴彈窗還有所缺陷。在應用內部任意頁面彈框提示需求是完全沒問題的。若想了解系統層面的鬧鈴彈框實現,請關注我後續文章分享。

剛開始學習Android端應用,瞭解尚淺。存在很多不足和待完善的地方。歡迎志同道合的朋友指正和探討。