android - 更改 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
}
}
有人知道我如何更改对话框的大小吗?
解决方案
推荐阅读
- arrays - 如何将对象同步推入数组
- amazon-web-services - 配置数据管道以从 Lambda 接收参数值
- c - 编译器是否为最大的代码块或 C 中的所有块保留内存?
- uwp - VS 2017 社区:将现有项目的目标更改为 ARM
- angular - 仅在急切加载时如何将路由添加到 Angular 模块
- javascript - Javascript 异步和等待
- mongodb - 错误“分布式锁 pinger ping 失败::: LockStateChangeFailed: findAndModify 查询谓词不匹配任何锁文档”
- python - 填充源 - 目标对和列表中的标志
- c - 优化线性矩阵的利润,用户可以跳过 1 或 2 个单元格
- docker - 无法验证健康检查 kubernetes + rancher