一起Talk Android吧(第四百三十九回:如何合理地使用Dialog二)

各位看官们大家好,上一回中咱们说的例子是"如何合理地使用Dialog",这一回中咱们继续说该例子。闲话休提,言归正转,让我们一起Talk Android吧!

上一章回中我们介绍了Dialog的标准用法,而且介绍了如何自定义窗口,最后谈到了窗口标准用法和自定义窗口的缺点,本章回将针对这些缺点做新的优化。

创建DialogActivity

官方的推荐做法(官方文档可以点击这里)是不使用自定义view,而是使用DilogActivity.其本质上就是创建一个Activity,然后给它换一个Dialog风格的style,不过创建的Activity需要继承Activity,而不是默认的AppCompatActivity,否则会有以下异常:

You need to use a Theme.AppCompat theme (or descendant) with this activity.

下面是示例程序,请大家参考:

    <activity
       android:name=".ui.ActivityForDialog"
       android:theme="@android:style/Theme.Holo.Dialog"
       android:exported="false" />

代码中的Activity使用标准的Activty就可以,因此我们就不列出它的代码。我们想对窗口进行自定义操作时直接对Activity修改就可以,比如修改大小,背景,添加控件等。这些操作和在Activity中进行操作完全相同。下面是一些示例代码:

//通过代码修改窗口的大小
public class ActivityForDialog extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_for_dialog);
        Window window = getWindow();
        WindowManager.LayoutParams layoutParams = window.getAttributes();
        layoutParams.width = 200;
        layoutParams.height = 200;
        window.setAttributes(layoutParams);
    }
}
//通过布局文件修改窗口的背景色,大小,添加图片控件
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:background="@color/purple_200"
    android:layout_width="match_parent"
    android:layout_height="500dp"
    tools:context=".ui.ActivityForDialog">
    <ImageView
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:src="@drawable/ic_home_black_24dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </ImageView>

</androidx.constraintlayout.widget.ConstraintLayout>

我们想使用自定义的窗口时不需要通过DialogBuilder来创建窗口,而是直接创建一个窗口类的对象就可以,该对象就是我们上面代码中自定义的DialogActivity.

创建自定义的Dialog

其实还有一个方法可以自定义窗口,其原理和创建Dialog窗口相同,示例代码如下,只是官方不推荐直接使用Dialog的接口进行自定义窗口.

    //官方不让推荐的做法,不过可以做任意的修改,
    //缺点是没有title和button等内容,需要的话只能自己添加。
    Dialog dialog = new Dialog(this);
    dialog.setContentView(R.layout.layout_dialog_custom_view);
    dialog.show();

建议与总结

最后,我分享一些对合理使用窗口的建议与总结:

  • 1.如果只是显示简单的文本信息,使用标准的Dialog就可以;
  • 2.如果想使用自定义窗口,那么建议使用官方推荐的DialogActivity;
  • 3.自定义窗口时推荐使用Activity的布局文件或者代码来完成自定义操作,而不是简单是使用Dialog style;

看官们,关于"如何合理地使用Dialog"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值