首頁>技術>

原創不易,請多多支援!對軟體技術感興趣的童鞋請關注我,後續技術分享更精彩。
效果

實現效果如圖。

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

實現步驟新建空白activity。activity中鬧鈴彈框實現。manifest新增許可權。樣式調整。程式碼

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

修改AlertAlarmClockActivity類。

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();    }}  

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

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

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);}

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

import androidx.appcompat.app.AlertDialog;import androidx.appcompat.app.AppCompatActivity;

新增樣式:{專案}\\app\\src\\main\\res\\values\\styles.xml檔案新增樣式。

AppCompatActivity有對應的適配樣式,不新增可能導致執行報錯。

<activity    android:name="com.ea.flutter_app.AlertAlarmClockActivity"    android:enabled="true"    android:exported="false"    android:theme="@style/TransparentTheme"></activity> 

manifest檔案新增許可權申明

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
總結

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

最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 最新報告!開源軟體及程式語言的資料調查