自定义Dialog

项目的界面再一次被重新设计,整体效果上比上一版好看很多,只是对话框有点与众不同,经过谈论以后大部分人同意了那就这样做呗,因为项目中有很多长的差不多的Dialog,所以自定义一个Dialog这样用起来就方便多了。
这里写图片描述
这里写图片描述
对话框的上显示的信息的条数不一样,这个地方用listView就能实现这个效果,但是在写文章之前没有考虑到ListView的addheadView的方法,Dialog的最上面哪一行我用了一个LinearLayout,然后下面才是ListView,实现的效果应该都一样,这篇文章暂且用后面这种办法来实现吧。
先看Dialog的界面布局代码,上面的哪行title是三个TextView,下面是 一个ListView

<?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:background="@color/divide">

    <LinearLayout
        android:id="@+id/title_layout"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:background="#FFFFFF"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/ok"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_weight="1"
            android:background="@drawable/textview_selector"
            android:gravity="center_vertical|center_horizontal"
            android:padding="10dp" />

        <TextView
            android:id="@+id/title"
            android:layout_width="0dp"
            android:layout_height="48dp"
            android:layout_weight="2"
            android:gravity="center"
            android:text="标题"
            android:textSize="16dp" />

        <TextView
            android:id="@+id/cancle"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:layout_weight="1"
            android:background="@drawable/textview_selector"
            android:gravity="center_vertical|center_horizontal"
            android:padding="10dp" />
    </LinearLayout>

    <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/title_layout"
        android:layout_marginTop="1px"
        android:background="#FFFFFF"
        android:divider="@color/divide"
        android:dividerHeight="1px"
        android:listSelector="#FFFFFF"
        android:paddingLeft="20dp"
        android:scrollbars="none" />
</RelativeLayout>

Dialog

package com.ybws.dialogdemo;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.view.View;
import android.view.Window;
import android.widget.ListView;
import android.widget.TextView;

/**
 * Created by lzh on 2016/4/6.
 */
public class CustomDialog extends Dialog {
    private Context context;
    private AlertDialog alertDialog;
    private TextView titleView, cancleTextView, okTextView;
    private ListView listView;
    private OnClickListener listener;

    public CustomDialog(Context context) {
        super(context);
        this.context = context;
        alertDialog = new AlertDialog.Builder(context).create();
        alertDialog.show();
        Window window = alertDialog.getWindow();
        window.setContentView(R.layout.dialog_layout);
        titleView = (TextView) window.findViewById(R.id.title);
        cancleTextView = (TextView) window.findViewById(R.id.cancle);
        okTextView = (TextView) window.findViewById(R.id.ok);
        listView = (ListView) window.findViewById(R.id.listview);
    }
    //设置标题
    public void setTitleMessage(String message) {
        titleView.setText(message);
    }
    //获取Dialog中的ListView
    public ListView getListView() {
        return listView;
    }
    //设置右边textView的text
    public void setCancleBtnText(String text) {
        cancleTextView.setText(text);
    }
    //设置左边的textViewe的text
    public void setOkBtnText(String text) {
        okTextView.setText(text);
    }
    //点击监听
    public void setCancleBtnOnClickListener(final OnClickListener listener) {
        cancleTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                listener.onClick();
            }
        });
    }
    //点击监听
    public void setOkBtnOnClickListener(final OnClickListener listener) {
        okTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                listener.onClick();
            }
        });
    }

    public void show() {
        alertDialog.show();
    }

    public void dismiss() {
        alertDialog.dismiss();
    }

    interface OnClickListener {
        void onClick();
    }
}

Activity代码:

public class MainActivity extends AppCompatActivity {
    private CustomDialog dialog;
    private ListView listView;
    private ArrayList<ItemMessage> list = new ArrayList<ItemMessage>();
    private ItemMessage item;
    private ListAdapter adapter;
    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        dialog = new CustomDialog(MainActivity.this);
        listView = dialog.getListView();
        adapter = new ListAdapter(MainActivity.this, getListData());
        listView.setAdapter(adapter);
        dialog.setCancleBtnText("取消");
        dialog.setOkBtnText("确定");
        dialog.setTitleMessage("通知");
        dialog.setCancleBtnOnClickListener(new CustomDialog.OnClickListener() {
            @Override
            public void onClick() {
                Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_SHORT).show();
                dialog.dismiss();
            }
        });
        dialog.setOkBtnOnClickListener(new CustomDialog.OnClickListener() {
            @Override
            public void onClick() {
                Toast.makeText(MainActivity.this, "确定", Toast.LENGTH_SHORT).show();
            }
        });
        dialog.show();
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                for (int i = 0; i < list.size(); i++) {
                    if (i != position) {
                        list.get(i).setCheck(false);
                    } else {
                        list.get(i).setCheck(true);
                    }
                }
                Toast.makeText(MainActivity.this, list.get(position).getContent(), Toast.LENGTH_SHORT).show();
                adapter.notifyDataSetChanged();
            }
        });
    }

    public List<ItemMessage> getListData() {
        list.add(new ItemMessage("正常", true));
        list.add(new ItemMessage("左右翻转", false));
        list.add(new ItemMessage("上下翻轉", false));
        list.add(new ItemMessage("全部翻轉", false));
        return list;
    }
}

效果图如下:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值