自定义Dialog
需要实现的效果图:
一个项目所用到的对话框风格必须统一,但显示的文字、布局却可以不同。如果每个对话框都要重新去创建的话,会增加代码的冗余,浪费资源。所以可以写个类 MyDialog 继承Dailog。需要的时候直接调用MyDialog类。
一、新建xml布局。
<?xmlversion="1.0"encoding="utf-8"?><FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:clickable="true"android:orientation="vertical"><LinearLayoutandroid:layout_width="250dp"android:layout_height="wrap_content"android:layout_gravity="center"android:orientation="vertical"><TextViewandroid:id="@+id/title"android:textSize="18dp"android:layout_width="fill_parent"android:layout_height="40dp"android:gravity="center"android:textColor="#000000"android:textStyle="bold"android:text="InPut"/><LinearLayoutandroid:id="@+id/content"android:layout_width="250dp"android:layout_height="wrap_content"android:gravity="center"android:orientation="vertical"><TextViewandroid:id="@+id/tv_message"android:layout_width="match_parent"android:layout_height="40dp"android:gravity="left|center"android:textSize="16dp"android:layout_marginBottom="5dp"android:layout_marginLeft="5dp"android:layout_marginRight="5dp"android:textColor="#333333"/><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:layout_marginRight="10dp"android:layout_marginBottom="10dp"android:gravity="left|center"><EditTextandroid:id="@+id/et_psw_message"android:layout_width="match_parent"android:layout_height="45dp"android:gravity="left|center"android:inputType="textPassword"android:textColorHint="@color/gray"android:visibility="gone"android:maxLength="30"android:textSize="@dimen/font_14"android:background="@drawable/edit_back"><requestFocus/></EditText><ImageViewandroid:id="@+id/img_change_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_marginRight="15dp"android:layout_centerVertical="true"android:visibility="gone"android:src="@drawable/img_change_name_style"/></RelativeLayout></LinearLayout><Viewandroid:layout_width="match_parent"android:layout_height="1.0px"android:background="#ffd0d0d0"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="40dp"android:layout_gravity="bottom"android:background="#ffd0d0d0"android:gravity="center"android:orientation="horizontal"><Buttonandroid:id="@+id/negativeButton"android:textSize="17dp"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:background="#ffffff"android:layout_weight="1"android:text="Cancel"/><Buttonandroid:id="@+id/positiveButton"android:textSize="17dp"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginLeft="1px"android:background="#ffffff"android:gravity="center"android:layout_weight="1"android:text="Sure"android:textStyle="bold"android:textColor="#008ae7"/></LinearLayout></LinearLayout></FrameLayout>
xml效果图如下:
尽量将对话框要用到的所有控件在xml中排好,部分不需要的可以在代码setVisibility(View.GONE);让其消失,省的新建多个xml文件。
二、继承Dailog
packagecom.dnake.evertalk.widgets;importcom.dnake.evertalk.R;importandroid.app.Dialog;importandroid.content.Context;importandroid.content.DialogInterface;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.Window;importandroid.view.ViewGroup.LayoutParams;importandroid.widget.Button;importandroid.widget.EditText;importandroid.widget.LinearLayout;importandroid.widget.TextView;publicclassMyDialogextendsDialog{publicMyDialog(Contextcontext){super(context);}publicMyDialog(Contextcontext,inttheme){super(context,theme);}publicstaticclassBuilder{privateContextcontext;privateStringtitle;privateStringmessage;privateStringpositiveButtonText;privateStringnegativeButtonText;privateViewcontentView;privateDialogInterface.OnClickListenerpositiveButtonClickListener;privateDialogInterface.OnClickListenernegativeButtonClickListener;publicBuilder(Contextcontext){this.context=context;}publicBuildersetMessage(Stringmessage){this.message=message;returnthis;}publicBuildersetMessage(intmessage){//设置信息this.message=(String)context.getText(message);returnthis;}publicBuildersetTitle(inttitle){//设置标题this.title=(String)context.getText(title);returnthis;}publicBuildersetTitle(Stringtitle){//直接传字符串this.title=title;returnthis;}publicBuildersetContentView(Viewv){this.contentView=v;returnthis;}/***Setthepositivebuttonresourceandit'slistener*/publicBuildersetPositiveButton(intpositiveButtonText,DialogInterface.OnClickListenerlistener){this.positiveButtonText=(String)context.getText(positiveButtonText);this.positiveButtonClickListener=listener;returnthis;}publicBuildersetPositiveButton(StringpositiveButtonText,DialogInterface.OnClickListenerlistener){this.positiveButtonText=positiveButtonText;this.positiveButtonClickListener=listener;returnthis;}publicBuildersetNegativeButton(intnegativeButtonText,DialogInterface.OnClickListenerlistener){this.negativeButtonText=(String)context.getText(negativeButtonText);this.negativeButtonClickListener=listener;returnthis;}publicBuildersetNegativeButton(StringnegativeButtonText,DialogInterface.OnClickListenerlistener){this.negativeButtonText=negativeButtonText;this.negativeButtonClickListener=listener;returnthis;}publicvoidcreate(Viewlayout){finalMyDialogdialog=newMyDialog(context,R.style.dialog_theme);dialog.addContentView(layout,newLayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));((TextView)layout.findViewById(R.id.title)).setText(title);if(positiveButtonText!=null){((Button)layout.findViewById(R.id.positiveButton)).setText(positiveButtonText);if(positiveButtonClickListener!=null){((Button)layout.findViewById(R.id.positiveButton)).setOnClickListener(newView.OnClickListener(){publicvoidonClick(Viewv){positiveButtonClickListener.onClick(dialog,DialogInterface.BUTTON_POSITIVE);}});}}else{layout.findViewById(R.id.positiveButton).setVisibility(View.GONE);}if(message!=null){TextViewhint=(TextView)layout.findViewById(R.id.tv_message);hint.setText(message);}if(negativeButtonText!=null){((Button)layout.findViewById(R.id.negativeButton)).setText(negativeButtonText);if(negativeButtonClickListener!=null){((Button)layout.findViewById(R.id.negativeButton)).setOnClickListener(newView.OnClickListener(){publicvoidonClick(Viewv){negativeButtonClickListener.onClick(dialog,DialogInterface.BUTTON_NEGATIVE);}});}}else{layout.findViewById(R.id.negativeButton).setVisibility(View.GONE);}dialog.setContentView(layout);dialog.show();}}}
三、在Activity中创建dialog,设置标题、信息以及按钮的处理事件
privatevoidshowDialog(){LayoutInflaterinflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);finalViewlayout=inflater.inflate(R.layout.dialog,null);Builderbuilder=newMyDialog.Builder(this);builder.setTitle(getResources().getString(R.string.mymessageactivity_delete_title));builder.setMessage(getResources().getString(R.string.mymessageactivity_delete_all_hint));builder.setPositiveButton(getResources().getString(R.string.sure),newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialog,intwhich){dialog.dismiss();intData();}});builder.setNegativeButton(getResources().getString(R.string.cancel),newandroid.content.DialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialog,intwhich){dialog.dismiss();}});builder.create(layout);}
这样就实现了项目需要的对话框效果图,且不同的Activity的对话框可显示不同的文字,也可以处理不同的点击事件。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。