600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Android 自定义AlertDialog对话框

Android 自定义AlertDialog对话框

时间:2019-03-15 05:19:05

相关推荐

Android 自定义AlertDialog对话框

独角兽企业重金招聘Python工程师标准>>>

系统默认的AlertDialog,与项目的UI不统一,所以,改了一下,定义了一样式,最终效果如下图:

另外,为了尽量少改原来的代码,该类类名及相关方法名都与android.app.AlertDialog相同,使用时,原代码只需要修改导入的包名,在按钮的Listener上加上一句关闭对话框的方法即可.

先是对话框的XML布局文件:

test.xml

<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><!--顶部椭园边缘--><ImageViewandroid:layout_width="400dp"android:layout_height="22dp"android:src="@drawable/dialog_top"></ImageView><!--中间白色背景,两个TextView,标题和内容,留一个LinearLayout,在代码中根据调用动态加上按钮--><LinearLayoutandroid:layout_width="400dp"android:layout_height="wrap_content"android:background="@drawable/dialog_center"android:orientation="vertical"><TextViewandroid:textColor="#000000"android:textSize="35dp"android:gravity="center"android:id="@+id/title"android:layout_width="fill_parent"android:layout_height="wrap_content"/><TextViewandroid:layout_marginLeft="20dp"android:layout_marginRight="10dp"android:id="@+id/message"android:layout_marginBottom="10dp"android:layout_marginTop="20dp"android:textColor="#000000"android:textSize="25dp"android:layout_width="fill_parent"android:layout_height="wrap_content"/><!--在LinearLayout中加按钮--><LinearLayoutandroid:id="@+id/buttonLayout"android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_gravity="center"android:gravity="center"android:orientation="horizontal"></LinearLayout></LinearLayout><!--底部椭园边缘--><ImageViewandroid:layout_marginTop="-2dp"android:layout_width="400dp"android:layout_height="22dp"android:src="@drawable/dialog_bottom"></ImageView></LinearLayout>

按钮背景,不同状态不同,可参考本博相关文章:

alertdialog_button.xml

<?xmlversion="1.0"encoding="utf-8"?><selectorxmlns:android="/apk/res/android"><itemandroid:state_pressed="true"android:drawable="@drawable/dialog_button_pressed"/><itemandroid:state_focused="true"android:drawable="@drawable/dialog_button_pressed"/><itemandroid:drawable="@drawable/dialog_button"/></selector>

下面就是自定义的AlertDialog类的代码:

publicclassAlertDialog{Contextcontext;android.app.AlertDialogad;TextViewtitleView;TextViewmessageView;LinearLayoutbuttonLayout;publicAlertDialog(Contextcontext){//TODOAuto-generatedconstructorstubthis.context=context;ad=newandroid.app.AlertDialog.Builder(context).create();ad.show();//关键在下面的两行,使用window.setContentView,替换整个对话框窗口的布局Windowwindow=ad.getWindow();window.setContentView(R.layout.alertdialog);titleView=(TextView)window.findViewById(R.id.title);messageView=(TextView)window.findViewById(R.id.message);buttonLayout=(LinearLayout)window.findViewById(R.id.buttonLayout);}publicvoidsetTitle(intresId){titleView.setText(resId);}publicvoidsetTitle(Stringtitle){titleView.setText(title);}publicvoidsetMessage(intresId){messageView.setText(resId);}publicvoidsetMessage(Stringmessage){messageView.setText(message);}/***设置按钮*@paramtext*@paramlistener*/publicvoidsetPositiveButton(Stringtext,finalView.OnClickListenerlistener){Buttonbutton=newButton(context);LinearLayout.LayoutParamsparams=newLayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);button.setLayoutParams(params);button.setBackgroundResource(R.drawable.alertdialog_button);button.setText(text);button.setTextColor(Color.WHITE);button.setTextSize(20);button.setOnClickListener(listener);buttonLayout.addView(button);}/***设置按钮*@paramtext*@paramlistener*/publicvoidsetNegativeButton(Stringtext,finalView.OnClickListenerlistener){Buttonbutton=newButton(context);LinearLayout.LayoutParamsparams=newLayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);button.setLayoutParams(params);button.setBackgroundResource(R.drawable.alertdialog_button);button.setText(text);button.setTextColor(Color.WHITE);button.setTextSize(20);button.setOnClickListener(listener);if(buttonLayout.getChildCount()>0){params.setMargins(20,0,0,0);button.setLayoutParams(params);buttonLayout.addView(button,1);}else{button.setLayoutParams(params);buttonLayout.addView(button);}}/***关闭对话框*/publicvoiddismiss(){ad.dismiss();}}

使用方法:

finalAlertDialogad=newAlertDialog(Test.this);ad.setTitle("标题");ad.setMessage("内容sdfsafdasf内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容");ad.setPositiveButton("确定",newOnClickListener(){@OverridepublicvoidonClick(Viewv){//TODOAuto-generatedmethodstubad.dismiss();Toast.makeText(Test.this,"被点到确定",Toast.LENGTH_LONG).show();}});ad.setNegativeButton("取消",newOnClickListener(){@OverridepublicvoidonClick(Viewv){//TODOAuto-generatedmethodstubad.dismiss();Toast.makeText(Test.this,"被点到取消",Toast.LENGTH_LONG).show();}});

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。