android 如何在底部工作表/对话框上方保留视图

hec6srdp  于 2023-05-27  发布在  Android
关注(0)|答案(1)|浏览(116)

我基本上尝试在我的应用程序中实现一个自定义通知/吐司系统,它的行为与本机toast不同(这就是为什么我不使用自定义本机toast)。我想这样做的方式是,我希望这个视图显示在任何视图的上方(如吐司),但我不知道如何将这个视图保持在底部工作表或对话框的上方。到目前为止,我在主活动xml中有这个视图,但它不会保留底部工作表或对话框上方的视图。有什么建议吗??

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>                                            
<FrameLayout 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:layout_width="match_parent"                                           
    android:layout_height="match_parent"                                          
    tools:context=".app.presentation.main_activity.MainActivity">                 
                                                                                  
    <androidx.fragment.app.FragmentContainerView                                  
        android:id="@+id/container"                                               
        android:layout_width="match_parent"                                       
        android:layout_height="match_parent"                                      
        tools:context=".app.presentation.main_activity.MainActivity" />           
                                                                                  
    <com.example.notification.NotificationView                                    
        android:id="@+id/notification_view"                                       
        android:layout_width="match_parent"                                       
        android:layout_height="match_parent" />                                   
</FrameLayout>
lyr7nygr

lyr7nygr1#

您可以创建一个BaseActivityBaseFragment,最初具有自定义通知对话框的方法,然后可以通过在Activity或Fragment中实现BaseActivityBaseFragment来实现该方法。
下面是一个例子,你可以使用它来执行相同的操作。这里我提到了我的布局,以防你必须改变你在问题中提到的FrameLayout来反映它。我还管理了ImageView渲染为进度条,您可以根据需要进行更改。
通过使用这种方法,你不需要在每个地方声明函数的实现,你可以通过实现基类直接调用函数。

private var progressDialog : Dialog? = null

// To show the custom layout
fun showNotification() {
    if (progressDialog == null) {
        progressDialog = Dialog(requireContext())
    } else {
        return
    }
    val view = LayoutInflater.from(requireContext()).inflate(R.layout.app_loading_dialog, null, false)
    val imageView1 = view.findViewById<ImageView>(R.id.imageView2)
    val a1 = AnimationUtils.loadAnimation(requireContext(), R.anim.progress_anim)
    a1.duration = 1500
    imageView1.startAnimation(a1)

    progressDialog?.requestWindowFeature(Window.FEATURE_NO_TITLE)
    progressDialog?.setContentView(view)
    val window = progressDialog?.window
    window?.setBackgroundDrawable(ContextCompat.getDrawable(requireContext(), android.R.color.transparent))
    progressDialog?.setCancelable(false)
    progressDialog?.setCanceledOnTouchOutside(false)
    progressDialog?.show()
}

// To hide the custom layout
fun hideLoading() {
    if (progressDialog != null) {
        progressDialog?.dismiss()
        progressDialog = null
    }
}

创建函数后,您可以直接调用此函数,在FragmentActivity中以对话框的形式显示自定义布局。
我希望这是你正在寻找的根据我的理解。让我知道,如果有任何其他许可需要或我是错误的理解你。

相关问题