首页 > 解决方案 > 更改 AppCompatDialogFragment 的宽度和高度

问题描述

我想使用AppCompatDialogFragment. 一切都很好,但我的对话框的大小不会像我想要的那样改变。这是我的代码:

package de.shuzo.once.ui.dialogs

import android.app.Activity
import android.content.Context
import android.content.Intent
import android.graphics.Color
import android.graphics.Typeface
import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.preference.PreferenceManager.getDefaultSharedPreferences
import de.shuzo.once.R
import de.shuzo.once.core.ui.BindingDialogFragment
import de.shuzo.once.databinding.ActivityMainBinding
import de.shuzo.once.databinding.DialogSettingsBinding
import de.shuzo.once.ui.LockScreenActivity
import de.shuzo.once.ui.MainActivity
import de.shuzo.once.ui.main.PlaceholderFragment
import de.shuzo.once.util.Keys

class SettingsDialog : BindingDialogFragment<DialogSettingsBinding>() {

    private lateinit var mActivity: MainActivity

    companion object {
        fun newInstance(activity: MainActivity): SettingsDialog = SettingsDialog().apply {
            arguments = Bundle().apply {
                mActivity = activity
            }
        }
    }

    override fun binding(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ) = DialogSettingsBinding.inflate(inflater, container, false)

    override fun otherSetups() {
        dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
        bindData()
    }

    private fun bindData() {
        with(binding) {
            fontChangeText.setOnClickListener {
                val fragment = mActivity.supportFragmentManager.findFragmentByTag("android:switcher:" + R.id.view_pager + ":" + mActivity.viewPager.currentItem) as PlaceholderFragment

                when (fontChangeText.text.toString()) {
                    getString(R.string.monospace) -> {
                        fontText = getString(R.string.inter)
                        fragment.changeTypeface(Typeface.createFromAsset(mActivity.assets, "font/spacemono_regular.ttf"))
                    }
                    getString(R.string.inter) -> {
                        fragment.changeTypeface(Typeface.createFromAsset(mActivity.assets, "font/inter_regular.ttf"))
                        fontText = getString(R.string.monospace)
                    }
                }
                fragment.font = fontChangeText.text.toString()
            }

            loginPinText.setOnClickListener {
                val intent = Intent(mActivity.applicationContext, LockScreenActivity::class.java)
                intent.putExtra("recent", mActivity::class.java.name)
                startActivity(intent)
            }

            fingerprintText.setOnClickListener {
                if (fingerprintText.text == getString(R.string.enable_fingerprint))
                    fingerprintText.text = getString(R.string.disable_fingerprint)
                else
                    fingerprintText.text = getString(R.string.enable_fingerprint)
            }

            if (getDefaultSharedPreferences(mActivity.applicationContext).getString(Keys.PIN_KEY, "")!!.isNotEmpty())
                setLoginPinText(getString(R.string.change_login_pin))
        }
    }
}
package de.shuzo.once.core.ui

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AppCompatDialogFragment
import androidx.viewbinding.ViewBinding

abstract class BindingDialogFragment<VB : ViewBinding> : AppCompatDialogFragment() {

    private var _binding: VB? = null
    protected val binding: VB get() = requireNotNull(_binding)

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        _binding = binding(inflater, container, savedInstanceState)
        otherSetups()
        val width = resources.displayMetrics.widthPixels * 20
        val height = resources.displayMetrics.heightPixels * 20
        dialog?.window?.setLayout(width, height)
        return binding.root
    }

    protected abstract fun binding(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): VB

    protected open fun otherSetups() = Unit

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
}

有人知道我如何更改对话框的大小吗?

标签: androidkotlinandroid-dialogfragment

解决方案


推荐阅读