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 可点击一段时间,因为我会在代码中的几行后再次启用两者.
备注:
- 禁用并再次启用它们都可以正常工作。
- 仅禁用 LongClick 并再次启用它可以正常工作。
- 我唯一的问题是,当 longClickable 为 true 时,将 clickable 设置为 false 似乎无效!
像这样设置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 的原因。
我有一个视图,最初在 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 可点击一段时间,因为我会在代码中的几行后再次启用两者.
备注:
- 禁用并再次启用它们都可以正常工作。
- 仅禁用 LongClick 并再次启用它可以正常工作。
- 我唯一的问题是,当 longClickable 为 true 时,将 clickable 设置为 false 似乎无效!
像这样设置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 的原因。