界面:
特点:
1.点击屏幕外侧,dialog不消失(通过dialog.setCanceledOnTouchOutside(false);实现)
2.点击右上角“X”,dialog消失(通过dialog.dismiss();实现);
3.实现对Button的监听
问题:
在实现dialog时,我们一般用AlertDialog(AlertDialog.Builder),
但是AlertDialog并没有①dialog.setCanceledOnTouchOutside(false);②dialog.dismiss();方法;
代码:
DialogWindows.java
package com.example.dialogwindows;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.Toast;
public class DialogWindows extends Activity {
private Button mainbtn;
private View CustomView;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mainbtn = (Button) findViewById(R.id.mainbtn);
mainbtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Builder builder=myBuilder(DialogWindows.this);
final AlertDialog dialog=builder.show();
//点击屏幕外侧,dialog不消失
dialog.setCanceledOnTouchOutside(false);
//监听dialog里的button
/*
* 监听btn发邮件
*/
Button ortherbtnemil = (Button)CustomView.findViewById(R.id.ortherbtnemil);
ortherbtnemil.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Toast.makeText(DialogWindows.this, "发邮件给作者", Toast.LENGTH_SHORT).show();
Intent i = new Intent(Intent.ACTION_SEND);
//i.setType("text/plain"); //模拟器请使用这行
i.setType("message/rfc822") ; // 真机上使用这行
i.putExtra(Intent.EXTRA_EMAIL, new String[]{"asinzuo@qq.com"});
i.putExtra(Intent.EXTRA_SUBJECT,"windows风格dialog反馈");
i.putExtra(Intent.EXTRA_TEXT,"内容");
startActivity(Intent.createChooser(i, "选择应用"));
dialog.dismiss();
}
});
/*
* 监听btn访问博客
*/
Button ortherbtnweb = (Button)CustomView.findViewById(R.id.ortherbtnweb);
ortherbtnweb.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Toast.makeText(DialogWindows.this, "访问博客", Toast.LENGTH_SHORT).show();
Uri uri = Uri.parse("http://blog.csdn.net/asinzuo");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
dialog.dismiss();
}
});
/*
* 监听imgbtn关闭dialog
*/
ImageButton customviewtvimgCancel=(ImageButton)CustomView.findViewById(R.id.customviewtvimgCancel);
customviewtvimgCancel.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
dialog.dismiss();
}
});
}
});
}
protected Builder myBuilder(DialogWindows dialogWindows) {
final LayoutInflater inflater=this.getLayoutInflater();
AlertDialog.Builder builder=new AlertDialog.Builder(dialogWindows);
CustomView=inflater.inflate(R.layout.customview, null);
return builder.setView(CustomView);
}
}
customview.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<RelativeLayout
android:id="@+id/customviewlayTitle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#1A94F9" >
<TextView
android:id="@+id/customviewtvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:padding="10dp"
android:text="关于我们"
android:textColor="#000000" />
<ImageButton
android:id="@+id/customviewtvimgCancel"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@drawable/canceltor" />
</RelativeLayout>
<LinearLayout
android:id="@+id/customviewlayMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_below="@id/customviewlayTitle"
android:padding="20dp" >
<TextView
android:id="@+id/orthertv0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="作者:asinzuo"
android:textColor="#000000" />
<TextView
android:id="@+id/orthertv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:linksClickable="true"
android:text="博客:http://blog.csdn.net/asinzuo"
android:textColor="#000000" />
<TextView
android:id="@+id/orthertv2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:linksClickable="true"
android:text="Email:asinzuo@qq.com"
android:textColor="#000000" />
</LinearLayout>
<LinearLayout
android:id="@+id/customviewlayLink"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/customviewlayMessage"
android:orientation="horizontal"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:paddingBottom="20dp"
>
<Button
android:id="@+id/ortherbtnemil"
android:layout_width="fill_parent"
android:layout_height="40dp"
android:background="@drawable/linkbtnbged"
android:linksClickable="true"
android:layout_weight="1"
android:layout_marginRight="10dp"
android:text="Email给作者" />
<Button
android:id="@+id/ortherbtnweb"
android:layout_width="fill_parent"
android:layout_height="40dp"
android:linksClickable="true"
android:background="@drawable/linkbtnbged"
android:text="访问博客"
android:layout_marginLeft="10dp"
android:layout_weight="1"
/>
</LinearLayout>
</RelativeLayout>
站内完整代码下载:
http://download.csdn.net/detail/asinzuo/5061645