原創不易,請多多支援!對軟體技術感興趣的童鞋請關注我,後續技術分享更精彩。
效果
實現效果如圖。
通過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彈窗效果。該彈窗實際也可在其他應用介面之上展示,但有一個缺點,當點選系統回退或回到桌面鍵時,會被隱藏。真拿來做系統鬧鈴彈窗還有所缺陷。在應用內部任意頁面彈框提示需求是完全沒問題的。若想了解系統層面的鬧鈴彈框實現,請關注我後續文章分享。
最新評論
延伸閱讀