原创不易,请多多支持!对软件技术感兴趣的童鞋请关注我,后续技术分享更精彩。
效果
实现效果如图。
通过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); //弹框窗口属性设置。设置弹框在其他界面之上 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;
添加样式:{项目}appsrcmainesvaluesstyles.xml文件添加样式。
manifest文件通过android:theme属性添加对应样式引用。
AppCompatActivity有对应的适配样式,不添加可能导致运行报错。
manifest文件添加权限申明
总结
本文介绍了activity构建应用内任意界面上显示的弹框方法。通过继承AppCompatActivity类,并覆盖onCreate方法,可以快速实现alert弹窗效果。 该弹窗实际也可在其他应用界面之上展示,但有一个缺点,当点击系统回退或回到桌面键时,会被隐藏。真拿来做系统闹铃弹窗还有所缺陷。在应用内部任意页面弹框提示需求是完全没问题的。若想了解系统层面的闹铃弹框实现,请关注我后续文章分享。
刚开始学习Android端应用,了解尚浅。存在很多不足和待完善的地方。欢迎志同道合的朋友指正和探讨。
|