Android:如何以编程方式将视图的 longclickable 设置为 true,同时保持其 clickable 为 false?

Android: How to programmatically set longclickable of a view to true while keeping its clickable false?

我有一个视图,最初在 xml 中是这样开始的:

<ImageButton
            android:layout_width="64dp"
            android:layout_height="64dp"
            android:id="@+id/likeBtn"
            android:src="@drawable/like"
            android:onClick="like"
            android:longClickable="true"
            android:clickable="true" />

而且我在mainActivity的OnCreate中已经有一个setOnLongClickListenter,像这样:

likeBtn.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                showExtraLike(v);
                return true;
            }
        });

我的问题是:

当我 运行 这样的代码时

likeBtn.setClickable(false);
likeBtn.setLongClickable(false);  

/* some other code here */

likeBtn.setLongClickable(true);

我发现视图也可以点击了!!

我需要它 ONLY LongClickable 和 NOT 可点击一段时间,因为我会在代码中的几行后再次启用两者.

备注:

像这样设置onlongclicklistener:

likeBtn.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                  //do something
                  return true;
            }
        });

希望对你有帮助

首先开启longclickable并设置onlongclicklistener

likeBtn.setLongClickable(true);

likeBtn.setOnLongClickListener(new View.OnLongClickListener() {
           @Override
           public boolean onLongClick(View v) {
               return true;
           }
       });

您的问题是您正在从 xml 调用 activity 的点击方法。如果您想启用或禁用点击,请删除该行并最初将两者都设置为 false.. 将您的 xml 代码替换为

<ImageButton
    android:layout_width="64dp"
    android:layout_height="64dp"
    android:id="@+id/likeBtn"
    android:src="@drawable/common_ic_googleplayservices"
    android:longClickable="false"
    android:clickable="false" />

现在在您的 activity 重写 OnClick 和 onLongClick 方法中。

 findViewById(R.id.likeBtn).setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            Toast.makeText(MainActivity.this,"like long clicked",Toast.LENGTH_SHORT).show();
            return false;
        }
    });

    findViewById(R.id.likeBtn).setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            Toast.makeText(MainActivity.this,"like long clicked",Toast.LENGTH_SHORT).show();
            return false;
        }
    });

    findViewById(R.id.likeBtn).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
     // Call LOGIN();
            Toast.makeText(MainActivity.this,"like  clicked",Toast.LENGTH_SHORT).show();
        }
    });

现在您可以在 activity 的任何地方启用和禁用它。希望这可以帮助。 :)

我找到了解决方法。

XML中的clickable和longClickable都设置为true:

<ImageButton
                android:layout_width="64dp"
                android:layout_height="64dp"
                android:id="@+id/likeBtn"
                android:src="@drawable/like"
                android:clickable="true"
                android:longClickable="true"/>

但我从 mainActivity 中删除了所有 setClickable 和 setLongClickable,并在 onCreate 中进行了以下操作,使它们在某些情况下不执行任何操作:

// setting click listener for question button
        likeBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (var == 1 || var == 3 || var == 4);
                   // do nothing

                else
                    like(v);
            }
        });

        // setting longclick listener for question button
        likeBtn.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                if (var == 1 || var == 2 || var == 4)
                   likeBtn.setHapticFeedbackEnabled(false);

            else{
                likeBtn.setHapticFeedbackEnabled(true);
                showExtraLike(v);
            }

                return true;
            }
        });

而且有效!

但是,当然,当 longClick 被禁用时,它仍在振动设备……这就是我添加 setHapticFeedbackEnabled 的原因。