package com.wevey.selector.dialog; import android.app.Dialog; import android.content.Context; import android.support.annotation.ColorRes; import android.support.v4.content.ContextCompat; import android.view.Gravity; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.Button; import android.widget.LinearLayout; import com.weavey.utils.ScreenSizeUtils; import com.weavey.utils.UiUtils; import java.util.ArrayList; /** * Created by Weavey on 2016/9/4. */ public class MDSelectionDialog { private static Context mContext; private Dialog mDialog; private View dialogView; private LinearLayout linearLayout; private Builder mBuilder; private ArrayList<String> datas; private int selectPosition;//最后一次选择的位置 public MDSelectionDialog(Builder builder) { this.mBuilder = builder; mDialog = new Dialog(mContext, R.style.MyDialogStyle); dialogView = View.inflate(mContext, R.layout.widget_md_mid_dialog, null); linearLayout = (LinearLayout) dialogView.findViewById(R.id.md_mid_dialog_linear); mDialog.setContentView(dialogView); // 一定要在setAttributes(lp)之前才有效 //设置dialog的宽 Window dialogWindow = mDialog.getWindow(); WindowManager.LayoutParams lp = dialogWindow.getAttributes(); lp.width = (int) (ScreenSizeUtils.getInstance(mContext).getScreenWidth() * builder.itemWidth); lp.gravity = Gravity.CENTER; lp.height = WindowManager.LayoutParams.WRAP_CONTENT; dialogWindow.setAttributes(lp); mDialog.setCanceledOnTouchOutside(builder.isTouchOutside()); } //根据数据生成item private void loadItem() { //设置数据item if (datas.size() == 1) { Button button = getButton(datas.get(0), 0); button.setBackgroundResource(R.drawable.selector_widget_md_single); linearLayout.addView(button); } else if (datas.size() > 1) { for (int i = 0; i < datas.size(); i++) { Button button = getButton(datas.get(i), i); if (i == 0) { button.setBackgroundResource(R.drawable.selector_widget_md_top); } else if (i > 0 && i != datas.size() - 1) { button.setBackgroundResource(R.drawable.selector_widget_md_middle); } else { button.setBackgroundResource(R.drawable.selector_widget_md_bottom); } linearLayout.addView(button); } } } private Button getButton(String text, int position) { // 动态生成选择按钮 final Button button = new Button(mContext); button.setText(text); button.setTag(position); button.setTextColor(mBuilder.getItemTextColor()); button.setTextSize(mBuilder.getItemTextSize()); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams .MATCH_PARENT, mBuilder.getItemHeight()); button.setLayoutParams(lp); button.setGravity(Gravity.LEFT|Gravity.CENTER_VERTICAL); button.setPadding(UiUtils.dp2px(mContext,10),0,UiUtils.dp2px(mContext,10),0); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { if (mBuilder.getOnItemListener() != null) { selectPosition = Integer.parseInt(button.getTag().toString()); mBuilder.getOnItemListener().onItemClick(button, selectPosition); } } }); return button; } public void setDataList(ArrayList<String> datas) { linearLayout.removeAllViews(); this.datas = (datas == null ? new ArrayList<String>() : datas); loadItem(); } public void show() { mDialog.show(); } public void dismiss() { mDialog.dismiss(); } public static class Builder { //item属性 private DialogOnItemClickListener onItemListener; private int itemHeight; private float itemWidth; private int itemTextColor; private float itemTextSize; private boolean isTouchOutside; public Builder(Context context) { mContext = context; onItemListener = null; itemHeight = UiUtils.dp2px(context, 45); // 默认item高度 itemWidth = 0.75f; itemTextColor = ContextCompat.getColor(mContext, R.color.black_light); // 默认字体颜色 itemTextSize = 14; //默认自体大小 isTouchOutside = true; } public DialogOnItemClickListener getOnItemListener() { return onItemListener; } public Builder setOnItemListener(DialogOnItemClickListener onItemListener) { this.onItemListener = onItemListener; return this; } public int getItemHeight() { return itemHeight; } public Builder setItemHeight(int dp) { this.itemHeight = UiUtils.dp2px(mContext, dp); return this; } public float getItemWidth() { return itemWidth; } public Builder setItemWidth(float itemWidth) { this.itemWidth = itemWidth; return this; } public int getItemTextColor() { return itemTextColor; } public Builder setItemTextColor(@ColorRes int itemTextColor) { this.itemTextColor = ContextCompat.getColor(mContext, itemTextColor); return this; } public float getItemTextSize() { return itemTextSize; } public Builder setItemTextSize(int sp) { this.itemTextSize = sp; return this; } public boolean isTouchOutside() { return isTouchOutside; } public Builder setCanceledOnTouchOutside(boolean isTouchOutside) { this.isTouchOutside = isTouchOutside; return this; } public MDSelectionDialog build() { return new MDSelectionDialog(this); } } }