(转)自定义Dialog宽度占满屏幕

原地址:http://www.cnblogs.com/liunanjava/p/5720667.html


一、自定义Dialog继承Dialog

public class MyDialog extends Dialog {

 

二、为Dialog设置样式

在style中建立新样式继承 

@android:style/Theme.Dialog
或者
@android:style/Theme.Holo.Dialog
  • 设置样式去掉边框
  • 去掉标题
  • 设置窗口透明
  • 设置点击对话框外边可以消失等
  • 设置动画

 

复制代码
 <!-- <style name="MyDialog" parent="@android:style/Theme.Dialog">-->
    <style name="MyDialog" parent="@android:style/Theme.Holo.Dialog">
        <!-- 是否有边框 -->
        <item name="android:windowFrame">@null</item>
        <!--是否在悬浮Activity之上  -->
        <item name="android:windowIsFloating">true</item>
        <!--标题  -->
        <item name="android:windowNoTitle">true</item>
        <!--阴影  -->
        <item name="android:windowIsTranslucent">true</item><!--半透明-->
        <!-- 进入和退出的动画 -->
        <item name="android:windowAnimationStyle">@style/MyDialogAnimation</item>

        <!-- 点外边可以消失  -->
        <item name="android:windowCloseOnTouchOutside">true</item>

    </style>


    <style name="MyDialogAnimation">
        <!--进入 -->
        <item name="android:windowEnterAnimation">@anim/dialog_enter</item>
        <!--退出-->
        <item name="android:windowExitAnimation">@anim/dialog_exit</item>
    </style>
复制代码

 

进入动画

dialog_enter
dialog_exit
系统自带的可以找到直接拿来用在SDK下找到
目录\sdk\platforms\对应的API版本

复制代码
<set xmlns:android="http://schemas.android.com/apk/res/android"
        android:shareInterpolator="false" >
    <scale android:fromXScale="0.9" android:toXScale="1.0"
           android:fromYScale="0.9" android:toYScale="1.0"
           android:pivotX="50%" android:pivotY="50%"
        
           android:duration="200" />
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
            android:duration="200" />
   
</set>
复制代码

退出

复制代码
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="false">
    <scale
        android:duration="200"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="0.9"
        android:toYScale="0.9"/>
    <alpha
        android:duration="200"
        android:fromAlpha="1.0"
        android:toAlpha="0.0"/>

</set>
复制代码

三、在构造方法中设置样式

复制代码
Context mContext;

    public MyDialog(Context context) {
        super(context, R.style.MyDialog);
        this.mContext=context;

        
    }
复制代码

四、设置布局

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

布局文件就是2个TextView

五、重写show方法,设置宽度,高度等

复制代码
@Override
    public void show() {
        super.show();
        /**
         * 设置宽度全屏,要设置在show的后面
         */
        LayoutParams layoutParams = getWindow().getAttributes();
        layoutParams.gravity=Gravity.BOTTOM;
        layoutParams.width= LayoutParams.MATCH_PARENT;
        layoutParams.height= LayoutParams.WRAP_CONTENT;

        getWindow().getDecorView().setPadding(0, 0, 0, 0);

        getWindow().setAttributes(layoutParams);

    }
复制代码

 

六、完整Dialog类

复制代码
/**
 * Dialog 2016年7月30日
 */
public class MyDialog extends Dialog {
    Context mContext;

    public MyDialog(Context context) {
        super(context, R.style.MyDialog);
        this.mContext=context;

        
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_dialog);
    }
    
    @Override
    public void show() {
        super.show();
        /**
         * 设置宽度全屏,要设置在show的后面
         */
        LayoutParams layoutParams = getWindow().getAttributes();
        layoutParams.gravity=Gravity.BOTTOM;
        layoutParams.width= LayoutParams.MATCH_PARENT;
        layoutParams.height= LayoutParams.WRAP_CONTENT;

        getWindow().getDecorView().setPadding(0, 0, 0, 0);

        getWindow().setAttributes(layoutParams);

    }
    
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自定义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、付费专栏及课程。

余额充值