自定义Dialog弹窗

文章有很多是借鉴的,只不过自己做一下总结,毕竟,东西还是拿到自己手里安稳,自定义Dialog弹窗,不是太难的功能。首先我们要做的就是自己定义一个Dialog

  

public abstract class DialogGetHeadPicture extends Dialog implements View.OnClickListener{

    public Activity activity;
    private FrameLayout flt_amble_upload, flt_take_photo_upload;
    private Button btn_cancel;


    public DialogGetHeadPicture(Activity activity) {
        super(activity,R.style.MyDialogTheme);
        this.activity=activity;
    }

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

        flt_amble_upload = (FrameLayout) findViewById(R.id.flt_amble_upload);
        flt_take_photo_upload = (FrameLayout) findViewById(R.id.flt_take_photo_upload);
        btn_cancel = (Button) findViewById(R.id.btn_cancel);

        flt_amble_upload.setOnClickListener(this);
        flt_take_photo_upload.setOnClickListener(this);
        btn_cancel.setOnClickListener(this);

        setViewLocation();
        setCanceledOnTouchOutside(true);//外部点击取消
    }

    /**
     * 设置dialog位于屏幕底部
     */
    private void setViewLocation(){
        DisplayMetrics dm = new DisplayMetrics();
        activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
        int height = dm.heightPixels;

        Window window = this.getWindow();
        WindowManager.LayoutParams lp = window.getAttributes();
        lp.x = 0;
        lp.y = height;
        lp.width = ViewGroup.LayoutParams.MATCH_PARENT;
        lp.height = ViewGroup.LayoutParams.WRAP_CONTENT;
        // 设置显示位置
        onWindowAttributesChanged(lp);
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.flt_amble_upload:
                amble();
                this.cancel();
                break;
            case R.id.flt_take_photo_upload:
                photo();
                this.cancel();
                break;
            case R.id.btn_cancel:
                this.cancel();
                break;
        }
    }

    public abstract void amble();
    public abstract void photo();

}

其中比较主要的方法就是setviewLocation(),也就是设置dialog位于底部的方法(当然你也可以设置位置其他不同的位置),其中

R.style.MyDialogTheme 是这样的
<style name="MyDialogTheme" parent="AppTheme"> <item name="android:windowFrame">@null</item><!-- 边框 -->  <item name="android:windowNoTitle">true</item> <item name="android:backgroundDimEnabled">true</item><!-- 外部变灰 -->  <item name="android:windowContentOverlay">@null</item><!-- 内部阴影 -->  <item name="android:windowAnimationStyle">@style/dialog_animation</item> </style> <style name="dialog_animation" parent="@android:style/Animation.Dialog"> <item name="android:windowEnterAnimation">@anim/push_bottom_in</item> <item name="android:windowExitAnimation">@anim/push_bottom_out</item> </style> 而这里面呢,dialog_animation 又是这样的:
 
push_bottom_in:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:interpolator="@android:anim/decelerate_interpolator"
        android:duration="300"
        android:fromYDelta="100%p"
        android:toYDelta="0" />

</set>
 
push_bottom_out: 
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate  android:interpolator="@android:anim/decelerate_interpolator"  android:duration="300"  android:fromYDelta="0"  android:toYDelta="50%p" /> </set>

他们都位于res-anim下,需要自己创建
dialog的布局文件如下(也就是上面的

R.layout.dialog_setting_get_head_picture

 

 

<?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:background="#d3d3d3"
    android:orientation="vertical">

    <FrameLayout
        android:id="@+id/flt_amble_upload"
        android:layout_width="match_parent"
        android:layout_height="55dp"
        android:layout_marginTop="1px"
        android:background="#ffffff">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:drawablePadding="13dp"
            android:text="@string/amble_upload"
            android:gravity="center"
            android:textColor="#000000"
            android:textSize="15sp" />
    </FrameLayout>

    <FrameLayout
        android:id="@+id/flt_take_photo_upload"
        android:layout_width="match_parent"
        android:layout_height="55dp"
        android:layout_marginTop="2px"
        android:background="#ffffff">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:drawablePadding="13dp"
            android:gravity="center"
            android:text="@string/take_photo_upload"
            android:textColor="#000000"
            android:textSize="15sp" />
    </FrameLayout>

    <Button
        android:id="@+id/btn_cancel"
        android:layout_width="match_parent"
        android:layout_height="55dp"
        android:layout_marginTop="2px"
        android:background="#ffffff"
        android:gravity="center"
        android:text="@string/cancel"
        android:textColor="#000000"
        android:textSize="15sp" />
</LinearLayout>

 

恩,基本就这么多了第一次写,字体格式都不知道如何修改,大家就将就着看吧

 

 

 

 

 

 

 

 

自定义dialog弹窗可以通过以下步骤实现: 1. 首先,在需要弹窗的地方创建CustomDialog类的实例。可以使用以下代码创建一个CustomDialog对象: ```java CustomDialog dialog = new CustomDialog(this, R.layout.logout_dialog, true, 0.45, 0.33) { @Override public void do_sure() { Intent intent = new Intent(FragmentActivity.this, secondActivity.class); startActivity(intent); } }; ``` 2. 在styles.xml文件中定义Dialog弹窗的样式。可以使用以下代码定义一个名为"KfDialog"的样式: ```xml <style name="KfDialog" parent="Theme.AppCompat.Light.Dialog.Alert"> <item name="android:textSize">17sp</item> <item name="android:textColor">#000</item> </style> ``` 3. 在CustomDialog类中,可以通过设置宽度和高度的比例来控制弹窗的大小。例如,0.45表示弹窗的宽度为屏幕宽度的45%,0.33表示弹窗的高度为屏幕高度的33%。 4. 在CustomDialog类中,可以重写do_sure()方法来定义确定按钮的点击事件。在该方法中,可以进行Activity的跳转操作。 最后,通过调用dialog.show()方法来显示自定义弹窗。 请注意,以上代码只是一个示例,具体实现可能会根据你的需求而有所不同。 #### 引用[.reference_title] - *1* *3* [自定义dialog弹窗样式](https://blog.csdn.net/weixin_45379305/article/details/104579151)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Android自定义Dialog弹窗](https://blog.csdn.net/qq_36342492/article/details/90670628)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值