重写Dialog写出自己的Dialog

1.在style.xml下自定义

   <!-- CustomDialog 自定义Dialog样式-->
    <style name="CustomDialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowFrame">@null</item> <!-- 设置边框 -->
    <item name="android:windowIsFloating">true</item> <!-- 窗口是否悬浮 -->
    <item name="android:windowIsTranslucent">true</item><!-- 窗口是否透明 -->
    <item name="android:windowNoTitle">true</item><!-- 是否有标题栏 -->
    <item name="android:background">@drawable/ic_launcher</item><!-- 设置背景图片 -->
    <item name="android:windowBackground">@color/transparent</item><!-- 设置窗口背景颜色(透明的) -->
    <item name="android:backgroundDimEnabled">true</item><!-- 是否使用背景 -->
    </style>

2.准备好dialog布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/dialog_layout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" 
    android:background="#cccccc">
    
    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <TextView 
            android:id="@+id/title_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="提示"
            />
        <ImageView 
            android:id="@+id/line_img"
            android:layout_width="fill_parent"
            android:layout_height="1dp"
             android:background="#cccccc"/>
        <TextView 
            android:id="@+id/message_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="此为信息提示"/>
    </LinearLayout>

    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="horizontal">
        <Button 
            android:id="@+id/yes_btn"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1.0"
            android:layout_margin="5dp"/>
        <Button 
            android:id="@+id/no_btn"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1.0"
            android:layout_margin="5dp"/>
    </LinearLayout>
</LinearLayout>

3.自定义CustomDialog

package android.sum.study.dialog;

import java.util.zip.Inflater;

import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

/**
 * User:XiaoYuguang
 * date:2013-11-19上午11:26:10
 * TODO 自定义Dialog
 */
public class CustomDialog extends Dialog {

//    声明该自定义Dialog静态全局对象
    private static CustomDialog cDialog = null;
    /**
     * 构造函数
     * @param context 上下文
     * @param theme 样式
     */
    public CustomDialog(Context context, int theme) {
        super(context, theme);    
    }

    /**
     * 构造函数
     */
    public CustomDialog(Context context){
        super(context);
    }
    /**创建已经构造好样式的Dialog
     * @param context 上下文
     * @param theme 自定义Dialog样式:如参数(R.style.CustomDialog)
     * @param layoutResID 自定义Dialog的资源布局(如:R.layout.customdialog)
     * @return 返回构造好的Dialog静态对象
     */
    public static CustomDialog createDialog(Context context,int theme,int layoutResID){
        
        cDialog = new CustomDialog(context, theme);
        cDialog.setContentView(layoutResID);
        cDialog.getWindow().getAttributes().gravity = Gravity.CENTER; //设置dialog的布局为中心显示
        return cDialog;
    }
    /**
     * 判断Dialog改变焦点后的状态
     */
    public void onWindowFocusChanged(boolean hasFocus){
        if(cDialog == null){
            return;
        }
    }
    /** 设置Dialog标题
     * @param title 标题
     * @return 返回cDialog显示
     */
    public CustomDialog setTitle(String title){        
        return cDialog;
    }
    /** 设置Dialog信息提示
     * @param message 信息提示
     * @param textviewID 信息内容textview的ID
     * @return 返回cDialog显示
     */
    public CustomDialog setMessage(int textviewID,String message){
        TextView tv = (TextView)cDialog.findViewById(textviewID);
        if(tv != null){
            tv.setText(message);
        }
        return cDialog;
    }   
   /** 设置背景图片
 * @param layoutID layout资源
 * @param drawableID 图片资源
 * @return
 */
public CustomDialog setBackground(int layoutID,int drawableID){
       View layout = (View)cDialog.findViewById(layoutID);
       if(layout != null){
       layout.setBackgroundResource(drawableID);
       }
       return cDialog;
   }

/** 设置分割线图片
 * @param line_img 图片id
 * @param imgresID 图片资源地址
 * @return
 */
public CustomDialog setLineImg(int line_img,int imgresID){
    ImageView img = (ImageView)cDialog.findViewById(line_img);
    if(img != null){
        img.setImageResource(imgresID);
    }
    return cDialog;
}
public Button getBtn(int btnID){
    Button btn = (Button)cDialog.findViewById(btnID);
    return btn;
}
}

4.最后引用

package android.sum.study.dialog;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

    Button sub_btn;
    CustomDialog dialog;
    TextView message_tv;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sub_btn = (Button)findViewById(R.id.sub_btn);
        
       
        sub_btn.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                showDialog();
            }
        });
    }

    private void showDialog(){
        
         dialog = CustomDialog.createDialog(this, R.style.CustomDialog, R.layout.customdialog);
         dialog.setTitle("提示");
         dialog.setMessage(R.id.message_tv, "你要不要退出别墨迹");
         dialog.setBackground(R.id.dialog_layout, R.drawable.project_background_icon);
         dialog.getBtn(R.id.yes_btn).setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                Toast.makeText(dialog.getContext(), "自己进行布局", 2000).show();
            }
        });
         dialog.show();
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值