Android 延迟关闭对话框

总说:  要实现点击按钮后延迟关闭对话框,又要在延迟关闭期间,对话框不失去焦点,不能使用

Thread.sleep(long time)要实现,开辟一个普通的线程来关闭也不能实现,下面的示例是采用Handler技术与Runnable来共同实现了该功能,是麻烦了点,但是没有办法。

Android <wbr>延迟关闭对话框

一、实的功能与操作:点击菜单->点击菜单项->会弹出对话框,该对话框中有一个文字为关闭的按钮->点击对话框中的关闭按钮->会看到按钮上面文件产生了变化,提示多少秒关闭对话框->当时间到时,对话框会被自动关闭。

二、实现步骤:
第一步: res/layout/main.xml内容为:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    />
</LinearLayout>
第二步:java代码
package com.fs.activity;

import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity implements OnMenuItemClickListener,
  android.view.View.OnClickListener {
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
 }

 public boolean onCreateOptionsMenu(Menu menu) {
  MenuItem mt1 = menu.add("对话框");
  mt1.setOnMenuItemClickListener(this);
  return true;
 }

 private Button button,button1;
 private AlertDialog dialog;

 @Override
 public boolean onMenuItemClick(MenuItem item) {
  if ("对话框".equals(item.getTitle())) {
   AlertDialog.Builder builder = new AlertDialog.Builder(this);
   dialog = builder.create();
   dialog.setTitle("天花板");
   button = new Button(this);
   button.setText("关闭");
   button.setOnClickListener(this);
   dialog.setView(button);
   dialog.show();
  }
  return true;
 }

 // 点击关闭按钮的回调函数
 @Override
 public void onClick(View v) {
  Button btn = (Button) v;
  if (button == v) {
   Toast.makeText(this, "关闭", Toast.LENGTH_SHORT).show();
   handler.postDelayed(runnable, 1000);
  
 }
 
 public Runnable runnable = new Runnable() {
  @Override
  public void run() {
   System.out.println("run...");
   Message msg = handler.obtainMessage();
   handler.dispatchMessage(msg);
  }
 };
 public Handler handler = new Handler() {
  int i = 5;

  public void handleMessage(Message msg) {
   if (i > -1) {
    button.setText(i + "秒后关半对话框");
    i--;
    handler.postDelayed(runnable, 1000);
   } else {
    i = 5;
    dialog.cancel();
   }
  }
 };
}
第三步:完

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio中,创建一个带圆角的对话框(通常用于弹出窗口或提示信息)可以通过自定义布局以及使用`android.R.attr.shape`属性来实现。以下是一个简单的步骤: 1. **创建布局**: 使用XML文件创建一个新的对话框布局(例如`rounded_popup_window.xml`),添加一个`FrameLayout`作为根,并设置其背景为半透明的`PopupWindow`背景: ```xml <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/rounded_popup" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@android:color/transparent" android:padding="16dp" android:elevation="16dp"> <View android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/rounded_background"/> <!-- Your content goes here, like TextView or other views --> </FrameLayout> ``` 在这个布局中,`rounded_background.xml`文件用来定义圆角背景: ```xml <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <corners android:radius="16dp" /> <!-- 设置圆角大小 --> <solid android:color="#80000000" /> <!-- 半透明黑色背景 --> </shape> ``` 2. **创建PopupWindow**: 在Java或Kotlin代码中,你可以这样创建并显示带有圆角的`PopupWindow`: ```java // 假设你已经有了一个Button或者其他触发事件的控件 Button button = findViewById(R.id.my_button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 创建一个带圆角的PopupWindow实例 PopupWindow popup = new PopupWindow(RoundedPopupWindow.this, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); // 设置布局 popup.setContentView(R.layout.rounded_popup_window); // 设置弹出位置 popup.showAtLocation(button, Gravity.CENTER, 0, 0); // 其他配置,如动画、点击后消失等 } }); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值