ViewBinding with Card“View 对话框未正确显示宽度

ViewBinding with CardView Dialog Box not displaying width correctly

提问人:Gadget-Man 提问时间:9/11/2023 更新时间:9/11/2023 访问量:29

问:

我必须迁移到 Android 应用程序中的 ViewBinding,以符合最新的目标版本。我真的很难让使用 CardView 创建的对话框正确显示。

下面是我修改以使用 ViewBinding 后的脚本。

override fun addUserDialog() {
    Handler(Looper.getMainLooper()).post(Runnable {
        LoggerUtils.logMessage("PMN Calling MFA User Dialog")
        var dialog = Dialog(this)
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
        dialog.setContentView(bindingMFA.root)
        dialog.setCancelable(false)
        bindingMFA.mBtnCancel.setOnClickListener {
            dialog.dismiss()
        }
        bindingMFA.mBtnConfirm.setOnClickListener {
            mMFACode = bindingMFA.mSMSMFA.text.toString()
            mLoginViewPresenter.confirmLogin(mMFACode)

            dialog.dismiss()
        }

        dialog.show()
        })

}

这出现在文件“loginActivity.kt”中,我在其中设置了 onCreate 中的绑定:

private lateinit var binding: ActivityLoginBinding
private lateinit var bindingMFA: DialogMfaBinding

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityLoginBinding.inflate(layoutInflater)
    val view = binding.root
    setContentView(view)
    bindingMFA = DialogMfaBinding.inflate(layoutInflater)

如果我将行改回它,则显示对话框绝对没问题。dialog.setContentView(R.layout.dialog_mfa)

这是dialog_mfa.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView 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="300dp"
android:layout_height="wrap_content" app:cardCornerRadius="4dp"
app:cardElevation="8dp">
<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" android:layout_margin="4dp">

    <TextView
        android:id="@+id/mLblInvitationHeader"
        style="@style/LabelTextMediumBold"
        android:layout_width="0dp"
        android:layout_height="40dp"
        android:background="@color/background_blue"
        android:gravity="center"
        android:text="@string/mfa_header"
        android:textColor="@color/text_white"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/mLblHeader"
        style="@style/LabelTextMedium"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:gravity="center"
        android:singleLine="false"
        android:text="@string/mfa_intro"
        android:textColor="@color/black"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/mLblInvitationHeader" />


    <EditText
        android:id="@+id/mSMS_MFA"
        style="@style/LabelTextMedium"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:inputType="numberPassword"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:gravity="center"
        android:singleLine="true"
        android:textColor="@color/black"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/mLblHeader" />
    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:id="@+id/mBtnCancel"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintHorizontal_bias="0.5" app:layout_constraintEnd_toStartOf="@+id/mBtnConfirm"
        android:layout_marginTop="16dp" app:layout_constraintTop_toBottomOf="@+id/mSMS_MFA"
        android:layout_marginStart="8dp" android:layout_marginEnd="4dp" android:layout_marginBottom="8dp"
        app:layout_constraintBottom_toBottomOf="parent" style="@style/GeneralButtonGrey"
        android:text="@string/cancel"/>
    <Button
        android:text="@string/mfa_confirm"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:id="@+id/mBtnConfirm"
        app:layout_constraintStart_toEndOf="@+id/mBtnCancel" app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintEnd_toEndOf="parent" android:layout_marginTop="16dp"
        app:layout_constraintTop_toBottomOf="@+id/mSMS_MFA" android:layout_marginEnd="8dp"
        android:layout_marginStart="4dp" android:layout_marginBottom="8dp"
        app:layout_constraintBottom_toBottomOf="parent" style="@style/GeneralButton"/>

</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>

如果有人能够指出我做错了什么,将不胜感激!Screenshot showing dialog box with incorrect width

android kotlin android-viewbinding

评论


答:

0赞 Neslet Chimaew 9/11/2023 #1

尝试将 android_layout_weight=1 添加到 textViews

1赞 Filipe Oliveira 9/11/2023 #2

请尝试以下操作:

bindingMFA = DialogMfaBinding.inflate(layoutInflater)
bindingMFA.window.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
 


   

评论

1赞 Gadget-Man 9/11/2023
谢谢 - 这几乎奏效了。唯一的变化是 bindingMFA 没有 window 属性,但这有效dialog.window?.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)