常用对话框

来源:互联网 发布:mac版网络游戏 编辑:程序博客网 时间:2024/06/05 03:31
 开发中常用的各种自定义控件(一)自定义样式对话框
    暂时分三种:
    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() {@Overridepublic void onClick(View view) {if (listener != null) {listener.onClickCancel(type);}}});confrim.setOnClickListener(new View.OnClickListener() {@Overridepublic 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.8dialogWindow.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";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_custom_dialog);}public void showDialog(View v) {utils = new CustomDialogUtils(this, new OnCustomDialogListener() {@Overridepublic void onClickConfrim(String type) {utils.dissmiss();switch (type) {case TYPE_01:break;}}@Overridepublic 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>








原创粉丝点击