很多时候系统自带的对话框无法满足我们在工作上的需求,这时,自定义对话框就显的很重要了。今天就带领大家使用自定义布局来写出自己所需要的对话框。

下面一张对话框图就是等下我们所要做的对话框:


android 去掉 自定义对话框 白色底色_xml

 

 

虽然布局丑了点,但是本着大家都能看的懂的原则,我都是使用系统自带的颜色和图片来做的,省的资源和样式用多了,怕有的人看的很莫名其妙,这里只是给个思想,只要你有图片有资源,你就可以做成任何样式的对话框。

xml中把布局布置成这样上图的样子。然后对话框加载自定义的布局就能显示这样的效果。这里关键的是就是怎么样对确定和取消这两个按钮设置单击事件。这里我们就需要设置回调接口了,让单击所做的事件回调出去让用户处理就行了,不懂的话等下看下代码就知道了。

style,当然我们不必重写对话框的每个属性,我们只需修改几个系统的属性就ok了,这个很重要,下面给出我写的自定义style,并给出解释:
    <style name="model_dialog" parent="android:style/Theme.Dialog"> <!--继承系统对话框-->         <item name="android:windowFrame">@null</item>
的windowFrame框为无-->
         <item name="android:windowNoTitle">true</item>
是否显示标题-->
         <item name="android:windowBackground">@color/not_color</item>
设置dialog的背景-->
         <item name="android:windowIsFloating">true</item>
是否浮在activity上-->
         <item name="android:windowContentOverlay">@null</item>
对话框是否有遮盖-->
  
 <item name="android:backgroundDimEnabled">false</item>
背景是否变暗-->
 <item name="android:windowIsTranslucent">false</item>
是否半透明-->
 </style>
,好了下面就上代码,关键地方我都给出了注释。
  
布局文件tipdialog.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:orientation="vertical" >
  
    <LinearLayout
android:layout_width="match_parent"
android:layout_height="54dp"
android:background="#00ff00"
android:orientation="horizontal">
  
        <FrameLayout
android:layout_width="44dp"
android:layout_height="match_parent" >
  
            <ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/ic_launcher" />
        </FrameLayout>
  
        <FrameLayout
android:layout_width="wrap_content"
android:layout_height="match_parent" >
  
            <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:singleLine="true"
android:textSize="32sp"
android:text="信息提示" />
        </FrameLayout>
    </LinearLayout>
  
    <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#00ff00"
android:orientation="vertical" >
  
        <FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffff00"
>
  
            <TextView
android:id="@+id/content_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:singleLine="false"
android:textSize="24sp"
android:gravity="left" />
        </FrameLayout>
  
        <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
  
            <FrameLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" >
  
                <Button
android:id="@+id/confirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:clickable="true"
android:textSize="36sp"
android:text="确定" />
            </FrameLayout>
  
            <FrameLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" >
  
                <Button
android:id="@+id/cancel"
android:textSize="36sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:clickable="true"
android:text="取消" />
            </FrameLayout>
        </LinearLayout>
    </LinearLayout>
  
</LinearLayout>
 
 
main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
  
    <Button
android:id="@+id/button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="Click"
android:text="弹出自定义对话框"
/>
  
</RelativeLayout>
 
自己写的封装的自定义对话框
MyDialog.java
package com.example.customdialog;
 
import android.app.Dialog;
import android.content.Context;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
 
public class MyDialog extends Dialog implements View.OnClickListener {
 
private Context context;
public MyDialog(Context context) {
super(context,R.style.model_dialog);//使用自定义主题
setContentView(R.layout.tipdialog);//设置自定义布局
this.context = context;
init();
}
public MyDialog(Context context,int msg){
super(context,R.style.model_dialog);
setContentView(R.layout.tipdialog);
this.context = context;
TextView content = (TextView)findViewById(R.id.content_text);
content.setText(msg);
init();
}
private void init() {
setCancelable(false);//取消返回事件
setCanceledOnTouchOutside(false);//点击对话框外的事件无效
Button confirm = (Button)findViewById(R.id.confirm);
Button cancle = (Button)findViewById(R.id.cancel);
confirm.setOnClickListener(this);//设置点击事件
cancle.setOnClickListener(this);
}
@Override
public void onClick(View view) {
int id = view.getId();
if(mClickListener == null){
return;
}
if(id == R.id.confirm){
mClickListener.onConfirmClick(this);//回调接口
}else{
mClickListener.onCancleClick(this);
}
}
public ClickListener mClickListener;
public MyDialog setClickListener(ClickListener clickListener){
mClickListener = clickListener;
return this;
}
public interface ClickListener{
void onConfirmClick(MyDialog myDialog);
void onCancleClick(MyDialog myDialog);
}
 
}
 
主Activity:MainActivity.java
 
package com.example.customdialog;
 
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
 
public class MainActivity extends Activity {
 
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
}
 
private void init() {
button = (Button)findViewById(R.id.button);
}
public void Click(View view){
showDialog();
}
public void showDialog(){
final MyDialog dialog = new MyDialog(this,"退出程序?");
dialog.setClickListener(new MyDialog.ClickListener() {
@Override
public void onConfirmClick(MyDialog myDialog) {
Toast.makeText(getApplicationContext(), "点击了确定按钮", Toast.LENGTH_SHORT).show();
dialog.cancel();
}
@Override
public void onCancleClick(MyDialog myDialog) {
Toast.makeText(getApplicationContext(), "点击了取消按钮", Toast.LENGTH_SHORT).show();
dialog.cancel();
}
});
dialog.show();
}
 
 
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
 
}
 
color.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="not_color">#00000000</color>
    
</resources>