Пользовательская тема не внедряется в DialogFragment - PullRequest
0 голосов
/ 07 июня 2019

Я создал расширение DialogFragment здесь:

class AlertDialogFragment(context: Context) : DialogFragment() {

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        val dialog = AlertDialog.Builder(activity).apply {
            setStyle(STYLE_NO_FRAME, R.style.AlertDialogTheme)
            setNeutralButton("Cancel", object : DialogInterface.OnClickListener{
                override fun onClick(dialog: DialogInterface?, which: Int) {

                }
            })
            setPositiveButton("Replace", object : DialogInterface.OnClickListener{
                override fun onClick(dialog: DialogInterface?, which: Int) {

                }
            })
            setNegativeButton("Delete", object : DialogInterface.OnClickListener{
                override fun onClick(dialog: DialogInterface?, which: Int) {

                }
            })
        }
        return dialog.create()
    }

}

Как вы можете видеть выше, я применил мой AlertDialogTheme к диалоговому окну:

<style name="AlertDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="android:background">@color/colorPrimary</item>
    <item name="android:windowBackground">@color/colorPrimary</item>
</style>

Однако, когдамой диалог отображается:

override fun onClick(v: View) {
    if (v is AppCompatImageButton){
        val dialog = AlertDialogFragment(this)
        dialog.show(supportFragmentManager, "alertDialog")
    }
}

Фон диалога черный (я думаю, ~ # 333).Мой @color/colorPrimary белый, так что это то, что должно быть фоном.

Есть идеи, в чем проблема?

1 Ответ

0 голосов
/ 07 июня 2019

Вы можете сделать это следующим образом

class AlertDialogFragment : DialogFragment() {

    override fun onCreateView(inflater: LayoutInflater, container:ViewGroup?,savedInstanceState: Bundle?): View? {
    // Inflate the layout for this fragment
        var view = inflater.inflate(R.layout.fragment_dialog, container, false)

        view.delete.setOnClickListener {  }

        view.cancel.setOnClickListener {  }

        view.replace.setOnClickListener {  }

        return view
   }    

}

создать макет XML фрагмент_диалога и создать его так, как вам нужно:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:tools="http://schemas.android.com/tools"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:orientation="vertical">

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="200dp">


</LinearLayout>

<LinearLayout
       android:layout_width="match_parent"
       android:layout_height="50dp"
       android:orientation="horizontal">

     <Button
           android:id="@+id/cancel"
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:text="cancel"
           android:layout_weight="1"/>

     <Button
           android:id="@+id/replace"
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:text="replace"
           android:layout_weight="1"/>

     <Button
           android:id="@+id/delete"
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:text="delete"
           android:layout_weight="1"/>

  </LinearLayout>

и, наконец, покажите свой диалог с вашим собственным стилем, например:

val dialog = AlertDialogFragment()
dialog.setStyle(DialogFragment.STYLE_NO_FRAME , R.style.AlertDialogTheme)
dialog.show(supportFragmentManager, "alertDialog")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...