Android Dialog( 自定义对话框)

    技术2022-05-19  20

    在做项目的过程中,我们发现,光用系统给的对话框,不能给用户很好的体验。给不了用户很好的视觉感觉,就不能给用户很好的体验,因此,我们在开发过程中使用自定义的对话框。

     

    我们要自定义风格,以及在对话框中增加组件,改变组件属性等,下面我参考网友给的项目进行分析。

     

    首先,写一个接口函数BaseUI.java,有创建对话框和销毁对话框。

    import android.app.Dialog; public interface BaseUI { public Dialog getDialog() ; public void removeDialog(); }

     

    接下来在Activity实现这个接口

    public Dialog getDialog() { return dialog; } public void removeDialog() { dialog.dismiss(); }

     

    而里面的dialog对象则是由自定义组件创建出来的。代码如下:

    private Dialog dialog; dialog = new Dialog(this,R.style.ExitDialog); //弹出退出对话框 View exit_view=LayoutInflater.from(this).inflate(R.layout.exit_diaog, null); Button confirm_but=(Button) exit_view.findViewById(R.id.confirm_exit_but); Button cancel_but=(Button) exit_view.findViewById(R.id.cancel_exit_but); confirm_but.setOnClickListener(new Button.OnClickListener(){ public void onClick(View arg0) { System.exit(0); }}); cancel_but.setOnClickListener(new Button.OnClickListener(){ public void onClick(View arg0) { removeDialog(); }}); BaseContorl.doShowDialog(this, exit_view,250,120);

     

    而BaseControl.java类则有调用显示对话框的细节:

    import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import free.xiajun.search.ui.BaseUI; /** * * @author xiajun * @version1.0 */ public class BaseContorl { public static void doShowDialog(final BaseUI ui,View view,int width,int height){ ui.getDialog().setContentView(view,new ViewGroup.LayoutParams(width,LayoutParams.WRAP_CONTENT) ); ui.getDialog().show(); } }

     

     

    在上面有看到R.layout.exit_diaog,也即有exit_dialog这个XML布局文件,如下所示:

    <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="250px" android:layout_height="120px" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/exit" android:textSize="20dip" android:textColor="@color/white" android:layout_centerHorizontal="true" android:layout_marginTop="5px" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/exit_warn" android:textColor="@color/blue" android:layout_centerHorizontal="true" android:textSize="18dip" android:layout_marginTop="55px" android:id="@+id/exit_hint" /> <Button android:layout_marginLeft="20px" android:layout_marginTop="95px" android:layout_width="100.0dip" android:layout_height="wrap_content" android:text="@string/ok" android:id="@+id/confirm_exit_but" style="@style/greenButton" android:layout_alignParentLeft="true" /> <Button android:layout_marginTop="95px" android:layout_width="100.0dip" android:layout_height="wrap_content" android:text="@string/cancel" android:layout_marginRight="20px" android:layout_alignParentRight="true" android:id="@+id/cancel_exit_but" style="@style/redButton" /> </RelativeLayout>

     

     

    在这个布局中,我们看到Button有样式: style="@style/redButton" ,style="@style/greenButton"而且在new Dialog也有ExitDialog风格:

     

    我们在string目录下添加style.xml文件,如下所示:

    <mce:style name="ExitDialog" parent="android:style/Theme.Dialog"><!-- <item name="android:windowNoTitle">true</item> <item name="android:windowBackground">@drawable/exit_bg</item> --></mce:style><style name="ExitDialog" parent="android:style/Theme.Dialog" mce_bogus="1"> <item name="android:windowNoTitle">true</item> <item name="android:windowBackground">@drawable/exit_bg</item> </style> <mce:style name="blueButton" parent="@android:style/Widget.Button"><!-- <item name="android:background">@drawable/blue_button_selector</item> <item name="android:textSize">16.0dip</item> <item name="android:textColor">@color/white</item> --></mce:style><style name="blueButton" parent="@android:style/Widget.Button" mce_bogus="1"> <item name="android:background">@drawable/blue_button_selector</item> <item name="android:textSize">16.0dip</item> <item name="android:textColor">@color/white</item> </style> <mce:style name="greenButton" parent="@android:style/Widget.Button"><!-- <item name="android:background">@drawable/green_button_selector</item> <item name="android:textSize">16.0dip</item> <item name="android:textColor">@color/white</item> --></mce:style><style name="greenButton" parent="@android:style/Widget.Button" mce_bogus="1"> <item name="android:background">@drawable/green_button_selector</item> <item name="android:textSize">16.0dip</item> <item name="android:textColor">@color/white</item> </style> <mce:style name="redButton" parent="@android:style/Widget.Button"><!-- <item name="android:background">@drawable/red_button_selector</item> <item name="android:textSize">16.0dip</item> <item name="android:textColor">@color/white</item> --></mce:style><style name="redButton" parent="@android:style/Widget.Button" mce_bogus="1"> <item name="android:background">@drawable/red_button_selector</item> <item name="android:textSize">16.0dip</item> <item name="android:textColor">@color/white</item> </style>  

     

    在style.xml文件中有blue_button_selector,green_button_selector,red_button_selector.

    我举一个,如red_button_selector.xml文件,如下所示:

    <?xml version="1.0" encoding="UTF-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_window_focused="false" android:state_enabled="true" android:drawable="@drawable/red_button_normal" /> <item android:state_pressed="true" android:drawable="@drawable/red_button_pressed" /> <item android:state_focused="true" android:state_enabled="true" android:drawable="@drawable/red_button_selected" /> <item android:state_enabled="true" android:drawable="@drawable/red_button_normal" /> </selector>

     

    最终的效果如下所示:

     

     


    最新回复(0)