Android 延迟关闭对话框

来源:互联网 发布:cn域名ns记录 编辑:程序博客网 时间:2024/04/30 19:36

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

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();
   }
  }
 };
}
第三步:完