【问题标题】:How do I change binding on button click to different drawable icon如何将按钮单击时的绑定更改为不同的可绘制图标
【发布时间】:2022-08-03 13:32:49
【问题描述】:

我的 CardLayout 上有一个“保存”选项,用户可以在其中单击“保存”并将其保存到另一个片段中。

单击“保存”时,应将可绘制图标“心脏”更改为另一个可绘制对象。目前,单击“保存”(如下所示)时,我已经成功更改了文本,但我不确定如何更改可绘制对象。

            binding.saves.setOnClickListener {
                val exist = dbHandler.getTask(task.id)
                if(exist) {
                    Toast.makeText(itemView.context, \"Activity removed\", Toast.LENGTH_SHORT)
                        .show()
                    binding.saves.text =\"Save\"
                    dbHandler.deleteFavorite(task);
                }else{
                    Toast.makeText(itemView.context, \"Activity added\", Toast.LENGTH_SHORT)
                        .show()
                    dbHandler.addFavorite(task);
                    binding.saves.text =\"Saved\"
                }
            }

binding.saves.text =\"Saved\" 在下面的 XML 中更改了我的 android:text=\"@string/save\"

我的 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=\"wrap_content\"
    android:layout_height=\"wrap_content\"
    android:layout_margin=\"0dp\"
    app:cardBackgroundColor=\"@color/white\"
    app:cardCornerRadius=\"0dp\"
    app:cardElevation=\"0dp\"
    app:cardMaxElevation=\"3dp\"
    app:cardPreventCornerOverlap=\"true\"
    app:cardUseCompatPadding=\"true\"
    tools:context=\"ui.CardLayout\">

    <RelativeLayout
        android:layout_width=\"match_parent\"
        android:layout_height=\"wrap_content\"
        >


        <TextView
            android:id=\"@+id/idActivityName\"
            android:layout_width=\"match_parent\"
            android:layout_height=\"wrap_content\"
            android:layout_marginLeft=\"10dp\"
            android:layout_marginTop=\"14dp\"
            android:layout_marginRight=\"10dp\"
            android:text=\"@string/placeholdertasktitle\"
            android:textColor=\"@color/black\"
            android:textSize=\"16sp\"
            android:textStyle=\"bold\" />

        <TextView
            android:id=\"@+id/idActivityDescription\"
            android:layout_width=\"match_parent\"
            android:layout_height=\"wrap_content\"
            android:layout_below=\"@id/idActivityName\"
            android:layout_marginStart=\"10dp\"
            android:layout_marginLeft=\"10dp\"
            android:layout_marginTop=\"10dp\"
            android:layout_marginEnd=\"10dp\"
            android:layout_marginRight=\"10dp\"
            android:layout_marginBottom=\"30dp\"
            android:drawablePadding=\"2dp\"
            android:text=\"@string/activitydescription\"
            android:textColor=\"@color/black\"
            android:textSize=\"15sp\"
            tools:ignore=\"UnknownId\" />


        <View
            android:id=\"@+id/divider\"
            android:layout_width=\"380dp\"
            android:layout_height=\"2dp\"
            android:layout_below=\"@id/idActivityDescription\"
            android:layout_alignStart=\"@id/idActivityName\"
            android:layout_centerHorizontal=\"false\"
            android:layout_centerVertical=\"false\"
            android:background=\"#EDEDED\" />

        <LinearLayout
            android:id=\"@+id/linLayout\"
            android:layout_width=\"wrap_content\"
            android:layout_height=\"wrap_content\"
            android:layout_below=\"@id/divider\"
            android:layout_alignStart=\"@+id/divider\"
            android:layout_alignEnd=\"@+id/divider\"
            android:gravity=\"center\"
            android:orientation=\"horizontal\">


            <Button
                android:id=\"@+id/saves\"
                style=\"@style/cardbutton\"
                android:layout_width=\"110dp\"
                android:layout_height=\"wrap_content\"
                android:background=\"@drawable/cardbutton\"
                android:contentDescription=\"@string/saves\"
                android:stateListAnimator=\"@null\"
                android:text=\"@string/save\"
                android:textAlignment=\"center\"
                android:textColor=\"#595959\"
                android:textSize=\"12sp\"
                app:icon=\"@drawable/ic_saves_blank\"
                app:iconGravity=\"start\"
                app:iconTint=\"#595959\" />

            <Button
                android:id=\"@+id/calendar\"
                style=\"@style/cardbutton\"
                android:layout_width=\"110dp\"
                android:layout_height=\"wrap_content\"
                android:background=\"@drawable/cardbutton\"
                android:contentDescription=\"@string/saves\"
                android:stateListAnimator=\"@null\"
                android:text=\"@string/calendar\"
                android:textAlignment=\"center\"
                android:textColor=\"#595959\"
                android:textSize=\"12sp\"
                app:icon=\"@drawable/ic_calendar\"
                app:iconTint=\"#595959\"
                app:iconGravity=\"start\"/>

            <Button
                android:id=\"@+id/copyactivity\"
                style=\"@style/cardbutton\"
                android:layout_width=\"110dp\"
                android:layout_height=\"wrap_content\"
                android:background=\"@drawable/cardbutton\"
                android:contentDescription=\"@string/saves\"
                android:stateListAnimator=\"@null\"
                android:text=\"@string/copy\"
                android:textAlignment=\"center\"
                android:textColor=\"#595959\"
                android:textSize=\"12sp\"
                app:icon=\"@drawable/ic_copytext\"
                app:iconGravity=\"start\"
                app:iconTint=\"#595959\" />
        </LinearLayout>

    </RelativeLayout>
</androidx.cardview.widget.CardView>

我试过的:

  1. Binding.saves.image =\"drawable1\" 等,但不确定如何将 binding.saves.text 更改为图像
  2. 将 \"Button\" 更改为 \"ImageButton\" 并使用 \"state selected\" 等。

    我是否需要将我的“按钮”更改为“图像按钮”并这样做?有没有办法只更改图标而不更改绑定中的文本。?

标签: android android-studio kotlin binding


【解决方案1】:

在这种情况下,仅在单击时更改按钮,

您可以创建 2 个按钮(保存和保存)

#note : 使用 materialButton 在同一个按钮内创建文本和图标。

之后,您可以实现此代码并将其更改为您的需要

                        btn_save.setOnClickListener {
                        if (btn_save.visibility == View.VISIBLE) {
                            btn_save.visibility = View.GONE
                            btn_saved.visibility = View.VISIBLE
                            btn_save.drawable
                        } else {
                            btn_saved.visibility = View.GONE
                            btn_save.visibility = View.VISIBLE
                            btn_save.drawable


                        btn_saved.setOnClickListener {
                        if (btn_saved.visibility == View.VISIBLE) {
                            btn_save.visibility = View.VISIBLE
                            btn_saved.visibility = View.GONE
                            btn_saved.drawable
                        } else {
                            btn_saved.visibility = View.VISIBLE
                            btn_save.visibility = View.GONE
                            btn_saved.drawable

【讨论】:

    【解决方案2】:

    如果将 XML 中的 Button 更改为新的 MaterialButton,则可以将按钮图标更改为另一个可绘制引用。

    之后,当您需要更改图标时:

    binding.saves.setIconResource(R.drawable.heart)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-26
      • 1970-01-01
      • 2014-02-16
      • 1970-01-01
      • 1970-01-01
      • 2019-07-06
      • 1970-01-01
      • 2020-05-21
      相关资源
      最近更新 更多