常用对话框

 开发中常用的各种自定义控件(一)自定义样式对话框
    暂时分三种:
    1)固定对话框标题栏与下部两个按钮,自定义内容区域
    2)固定对话框标题栏,自定义内容区域与按钮区域
    3)完全自定义对话框UI
    因为是常用,所以只放通用的前两种,下面举个例子:
   a)自定义的工具:

 public abstract class DialogBaseViewHolder {
		public View itemView;


		public DialogBaseViewHolder() {


		}


		public DialogBaseViewHolder(View itemView) {
			this.itemView = itemView;
		}
	}

public class CustomDialogUtils {
	public interface OnCustomDialogListener {
		void onClickCancel(String type);

		void onClickConfrim(String type);
	}

	public static final String TYPE_CUSTOM_CLQDJL = "TYPE_CUSTOM_CLQDJL";
	public static final String TYPE_CUSTOM_CLQDJL_EDIT = "TYPE_CUSTOM_CLQDJL_EDIT";

	private OnCustomDialogListener listener;
	private LayoutInflater layoutInflater;
	private Context context;
	private Dialog dialog;
	private View view;
	private String type;

	public CustomDialogUtils(Context context, OnCustomDialogListener listener) {
		this.context = context;
		this.listener = listener;
		this.layoutInflater = LayoutInflater.from(context);
	}

	public void setType(String type) {
		this.type = type;
	}

	/**
	 * 获取自定义View对话框
	 */
	public void initCustonViewDialog(String title,
			DialogBaseViewHolder viewHolder) {
		dialog = new Dialog(context, R.style.CustomDialogStyle);
		view = layoutInflater.inflate(R.layout.dialog_item_layout_custom, null);
		initTitleAndButton(title);
		LinearLayout layout = (LinearLayout) view
				.findViewById(R.id.dialog_custom_view_layout);
		layout.addView(viewHolder.itemView);
		dialog.setContentView(view);
	}

	/** 获取自定义button对话框 */
	public void initCustomViewAndButtonDialog(String title,
			DialogBaseViewHolder viewHolder) {
		initCustonViewDialog(title, viewHolder);
		LinearLayout dialog_button_view = (LinearLayout) view
				.findViewById(R.id.dialog_button_view);
		dialog_button_view.setVisibility(View.GONE);
	}

	private void initTitleAndButton(String title) {
		TextView item_name = (TextView) view.findViewById(R.id.item_name);
		item_name.setText(title);
		/** 按钮 */
		Button cancel = (Button) view.findViewById(R.id.item_cancel);
		Button confrim = (Button) view.findViewById(R.id.item_confrim);
		cancel.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View view) {
				if (listener != null) {
					listener.onClickCancel(type);
				}
			}
		});
		confrim.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View view) {
				if (listener != null) {
					listener.onClickConfrim(type);
				}
			}
		});
	}

	public void show() {
		dialog.show();
		Window dialogWindow = dialog.getWindow();
		WindowManager.LayoutParams lp = dialogWindow.getAttributes();
		DisplayMetrics d = context.getResources().getDisplayMetrics(); // 获取屏幕宽、高用
		lp.width = (int) (d.widthPixels * 0.85); // 宽度设置为屏幕的0.8
		dialogWindow.setAttributes(lp);
	}

	public void dissmiss() {
		dialog.dismiss();
	}

}
    
    b)注意样式的问题:
    
<style name="CustomDialogStyle" 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">@android:color/transparent</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:backgroundDimAmount">0.6</item>
    </style>

    c)固定的layout文件:
    
    1)主布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/item_root_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <include
        layout="@layout/dialog_item_title"
        android:layout_width="match_parent"
        android:layout_height="50dp" />

    <LinearLayout
        android:id="@+id/dialog_custom_view_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" />

    <include android:id="@+id/dialog_button_view"
        layout="@layout/dialog_item_button" 
        android:layout_width="match_parent"
        android:layout_height="50dp" />

</LinearLayout>
    2)标题栏布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/item_layout"
    android:layout_width="match_parent"
    android:layout_height="80px"
    android:layout_alignParentTop="true"
    android:background="#ffff0000"
    android:gravity="center_vertical|center_horizontal"
    android:orientation="vertical">

    <TextView
        android:id="@+id/item_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        android:textColor="@color/white"
        android:textSize="16sp" />
</LinearLayout>
    3)按钮布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="80px"
    android:background="#f1f1f1"
    android:orientation="horizontal">

    <Button
        android:id="@+id/item_cancel"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="@color/transparent"
        android:gravity="center"
        android:text="取消"
        android:textColor="#666666"
        android:textSize="16sp" />

    <ImageView
        android:layout_width="1px"
        android:layout_height="match_parent"
        android:background="#999999" />

    <Button
        android:id="@+id/item_confrim"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="@color/transparent"
        android:gravity="center"
        android:text="确定"
        android:textColor="#666666"
        android:textSize="16sp" />
</LinearLayout>

    d)实现自定义ViewHolder,继承工具中的DialogBaseViewHoldler:
    重点()
      super(view);

public class CustomDialogActivity extends AdaptiveActivity {

	private CustomDialogUtils utils;
	private TestDialogHolder dialogHolder;
	private static final String TYPE_01 = "TYPE_01";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_custom_dialog);
	}

	public void showDialog(View v) {
		utils = new CustomDialogUtils(this, new OnCustomDialogListener() {

			@Override
			public void onClickConfrim(String type) {
				utils.dissmiss();
				switch (type) {
				case TYPE_01:

					break;
				}
			}

			@Override
			public void onClickCancel(String type) {
				utils.dissmiss();
				switch (type) {
				case TYPE_01:

					break;
				}
			}
		});

		dialogHolder = new TestDialogHolder(LayoutInflater.from(this).inflate(
				R.layout.dialog_item_custom_01, null));
		dialogHolder.textView.setText("1234567654321234567");
		utils.initCustonViewDialog("测试对话框", dialogHolder);
		/** 区分不同对话框的flag,对应的操作返回分发 */
		utils.setType(TYPE_01);
		utils.show();
	}

	class TestDialogHolder extends DialogBaseViewHolder {
		public TextView textView;

		public TestDialogHolder(View view) {
			super(view);
			textView = (TextView) view.findViewById(R.id.text);
		}
	}
}

       实现自定义区域的layout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:gravity="center" />

</LinearLayout>








猜你喜欢

转载自blog.csdn.net/yao11965w1616/article/details/76849701