亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

帶有 RecyclerView 的自定義對話框不顯示“確定”取消按鈕

帶有 RecyclerView 的自定義對話框不顯示“確定”取消按鈕

慕桂英546537 2023-09-13 10:19:42
我有一個簡單的自定義多選項目對話框。如果項目數量很少,則對話框可以正常工作并在底部顯示“確定”和“取消”按鈕。但如果有很多項目(因此您必須滾動列表)-則不會顯示任何按鈕。我已經在 SO 中搜索了我的問題,但沒有運氣。我已經在 Android API 27..29 上測試了我的對話框 - 是一樣的。也許我在布局屬性等中遺漏了一些重要的東西......布局/select_exercises_dialog.xml:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_width="match_parent"    android:layout_height="match_parent">    <androidx.recyclerview.widget.RecyclerView        android:id="@+id/recyclerView"        android:layout_width="match_parent"        android:layout_height="match_parent" /></LinearLayout>布局/select_exercise_item_view.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"    android:layout_width="match_parent"    android:layout_height="@dimen/list_item_height"    android:layout_marginLeft="@dimen/margin_medium"    android:layout_marginRight="@dimen/margin_medium"    android:gravity="center_vertical">    <androidx.constraintlayout.widget.ConstraintLayout        android:layout_width="match_parent"        android:layout_height="match_parent">        <TextView            android:id="@+id/textView"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_margin="@dimen/margin_medium"            android:text="MyExercise"            app:layout_constraintBottom_toBottomOf="parent"            app:layout_constraintStart_toStartOf="parent"            app:layout_constraintTop_toTopOf="parent" />    </androidx.constraintlayout.widget.ConstraintLayout></FrameLayout>如何解決此問題并使對話框在所有情況下都顯示“確定”、“取消”按鈕?任何幫助表示贊賞。
查看完整描述

3 回答

?
守著星空守著你

TA貢獻1799條經驗 獲得超8個贊

如果您正在使用對話框片段,它是對話框風格的片段,具有一些對話框規范,現在如果您想添加“確定”和“取消”,您有兩種選擇


從 AlertDialog.Builder 擴展類,并在創建時添加正負按鈕處理程序和文本

關于代碼的示例將如下所示


class ExampleDialog(context: Context) : AlertDialog.Builder(context) {



private val view by lazy {

    LayoutInflater.from(context).inflate(R.layout.dialog_exmaple, null, false)

}


override fun setView(layoutResId: Int): AlertDialog.Builder {


    // do the recylceview init from the view code here 


    return super.setView(view)

}



override fun setPositiveButton(

    text: CharSequence?,

    listener: DialogInterface.OnClickListener?

): AlertDialog.Builder {

    return super.setPositiveButton(

        context.getText(R.string.action_ok)

    ) { p0, p1 ->



    }

}



override fun setNegativeButton(

    text: CharSequence?,

    listener: DialogInterface.OnClickListener?

): AlertDialog.Builder {

    return super.setNegativeButton(

        context.getText(R.string.action_cancel)

    ) { p0, p1 ->



    }

}

}


注意我不喜歡這種分配方式


您可以在 xml 內添加兩個按鈕到回收視圖的底部,然后向它們添加文本,例如“確定”和“取消”,并通過高階函數或界面處理 onClick,這取決于您,我可以向您展示和示例以下

我更喜歡這段代碼對我來說更干凈,并在dialogFragment類中添加點擊偵聽器


<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

android:layout_width="match_parent"

android:layout_height="match_parent">



<androidx.recyclerview.widget.RecyclerView

    android:id="@+id/listData"

    android:layout_width="0dp"

    android:layout_height="0dp"

    app:layout_constraintBottom_toTopOf="@id/actionOk"

    app:layout_constraintEnd_toEndOf="parent"

    app:layout_constraintStart_toStartOf="parent"

    app:layout_constraintTop_toTopOf="parent" />



<com.google.android.material.button.MaterialButton

    android:id="@+id/actionOk"

    style="@style/Widget.MaterialComponents.Button.OutlinedButton"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_margin="16dp"

    android:text="@string/action_ok"

    app:layout_constraintBottom_toBottomOf="parent"

    app:layout_constraintEnd_toEndOf="parent"

    app:layout_constraintTop_toBottomOf="@id/listData" />


<com.google.android.material.button.MaterialButton

    android:id="@+id/actionCancel"

    style="@style/Widget.MaterialComponents.Button.OutlinedButton"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_margin="16dp"

    android:text="@string/action_cancel"

    app:layout_constraintBottom_toBottomOf="parent"

    app:layout_constraintEnd_toStartOf="@id/actionOk"

    app:layout_constraintTop_toBottomOf="@id/listData" />

  override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {

    val dialog = super.onCreateDialog(savedInstanceState)

    val root = ConstraintLayout(activity)

    root.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)

    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)

    dialog.setContentView(root)

    dialog.window?.let {

        it.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))

        it.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)

        it.setWindowAnimations(R.style.DialogAnimationNormal)

    }

    dialog.setCanceledOnTouchOutside(true)

    return dialog

}


查看完整回答
反對 回復 2023-09-13
?
波斯汪

TA貢獻1811條經驗 獲得超4個贊

根據建議的解決方案即興創作并得出了這個(仍然不完全是我需要的):


<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"

? ? xmlns:app="http://schemas.android.com/apk/res-auto"

? ? android:id="@+id/linearLayout3"

? ? android:layout_width="match_parent"

? ? android:layout_height="match_parent"

? ? android:minHeight="150dp">


? ? <androidx.recyclerview.widget.RecyclerView

? ? ? ? android:id="@+id/recyclerView"

? ? ? ? android:layout_width="0dp"

? ? ? ? android:layout_height="0dp"

? ? ? ? app:layout_constraintBottom_toBottomOf="parent"

? ? ? ? app:layout_constraintEnd_toEndOf="parent"

? ? ? ? app:layout_constraintStart_toStartOf="parent"

? ? ? ? app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

此布局至少顯示“確定”、“取消”按鈕和包含項目的列表。但在這種情況下,我的對話框仍然不想占用設備屏幕的所有可用空間。列表recyclerView非常有限(高度只有150dp左右)。當然,我希望對話框占據盡可能多的可用空間。

https://img1.sycdn.imooc.com/65011c9f0001ce2304910870.jpg

查看完整回答
反對 回復 2023-09-13
?
蝴蝶刀刀

TA貢獻1801條經驗 獲得超8個贊

   <?xml version="1.0" encoding="utf-8"?>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

        android:orientation="vertical" android:layout_width="match_parent"

        android:layout_height="match_parent"

android:minHeight= "200dp">



        <androidx.recyclerview.widget.RecyclerView

            android:id="@+id/recyclerView"

            android:layout_width="match_parent"

            android:layout_height="wrap_content" />

    </LinearLayout>


    <?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"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_marginLeft="@dimen/margin_medium"

        android:layout_marginRight="@dimen/margin_medium"

        android:gravity="center_vertical">


        <androidx.constraintlayout.widget.ConstraintLayout

            android:layout_width="match_parent"

            android:layout_height="match_parent">


            <TextView

                android:id="@+id/textView"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:layout_margin="@dimen/margin_medium"

                android:text="MyExercise"

                app:layout_constraintBottom_toBottomOf="parent"

                app:layout_constraintStart_toStartOf="parent"

                app:layout_constraintTop_toTopOf="parent" />


            <CheckBox

                android:id="@+id/checkBox"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                app:layout_constraintBottom_toBottomOf="parent"

                app:layout_constraintEnd_toEndOf="parent"

                app:layout_constraintTop_toTopOf="parent" />


        </androidx.constraintlayout.widget.ConstraintLayout>


    </FrameLayout>


查看完整回答
反對 回復 2023-09-13
  • 3 回答
  • 0 關注
  • 193 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號