android点击事件禁用,android-禁用所有视图的触摸事件
android-禁用所有視圖的觸摸事件
禁用所有視圖的觸摸事件的最佳方法是什么?
非常感謝,
格拉齊
Gratzi asked 2020-07-27T19:09:52Z
13個解決方案
55 votes
這是用于禁用某個視圖組的所有子視圖的功能:
/**
* Enables/Disables all child views in a view group.
*
* @param viewGroup the view group
* @param enabled true to enable, false to disable
* the views.
*/
public static void enableDisableViewGroup(ViewGroup viewGroup, boolean enabled) {
int childCount = viewGroup.getChildCount();
for (int i = 0; i < childCount; i++) {
View view = viewGroup.getChildAt(i);
view.setEnabled(enabled);
if (view instanceof ViewGroup) {
enableDisableViewGroup((ViewGroup) view, enabled);
}
}
}
peceps answered 2020-07-27T19:10:20Z
16 votes
覆蓋活動的false方法,如下所示:
@Override
public boolean dispatchTouchEvent(MotionEvent ev){
return true;//consume
}
如果返回false,則所有觸摸事件均被禁用。
返回false以使其正常工作
Ercan answered 2020-07-27T19:10:48Z
15 votes
您可以嘗試:
your_view.setEnabled(false);
哪個應該禁用觸摸事件。
或者,您可以嘗試(感謝Ercan):
@Override
public boolean dispatchTouchEvent(MotionEvent ev){
return true;//consume
}
要么
public boolean dispatchTouchEvent(MotionEvent ev) {
if(!onInterceptTouchEvent()){
for(View child : children){
if(child.dispatchTouchEvent(ev))
return true;
}
}
return super.dispatchTouchEvent(ev);
}
OWADVL answered 2020-07-27T19:11:21Z
11 votes
如果且僅當inProgress變量設置為false時,這段代碼基本上會將此事件傳播到父視圖,從而允許觸摸事件。
private boolean inProgress = false;
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (!inProgress)
return super.dispatchTouchEvent(ev);
return true;
}
Bruno Horta answered 2020-07-27T19:11:41Z
5 votes
用這個。 返回true表示偵聽器已經消耗了該事件,而android不需要執行任何操作。
view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
Abhishek answered 2020-07-27T19:12:01Z
3 votes
如何在所有視圖上覆蓋透明視圖并捕獲所有觸摸事件呢?
Yudi answered 2020-07-27T19:12:21Z
3 votes
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
Shaleen M answered 2020-07-27T19:12:37Z
2 votes
整個應用程序可能無法實現。 您將必須為每個視圖覆蓋onTouchEvent()并忽略用戶輸入。
rajath answered 2020-07-27T19:12:57Z
1 votes
我做了這種方法,對我來說非常合適。 它禁用選定視圖的所有觸摸事件。
public static void disableView(View v) {
v.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
if (v instanceof ViewGroup) {
ViewGroup vg = (ViewGroup) v;
for (int i = 0; i < vg.getChildCount(); i++) {
View child = vg.getChildAt(i);
disableView(child);
}
}
}
jan hruska answered 2020-07-27T19:13:17Z
0 votes
根據您的評論:
我只想能夠在某個時候禁用當前活動的視圖
您似乎想禁用當前活動的所有觸摸,而不管觸摸的視圖如何。
在適當的時間從覆蓋Activity.dispatchTouchEvent(MotionEvent)返回true將消耗觸摸并有效地完成此操作。 此方法是touch方法調用鏈中的第一個。
SK9 answered 2020-07-27T19:13:50Z
0 votes
一種更簡單的方法是通過布局(.xml)文件禁用它:只需添加
android:shouldDisableView="True"
對于要禁用的視圖的觸摸事件。
BhanuSingh answered 2020-07-27T19:14:14Z
0 votes
在科特林:
fun View.setEnabledRecursively(enabled: Boolean) {
isEnabled = enabled
if (this is ViewGroup)
(0 until childCount).map(::getChildAt).forEach { it.setEnabledRecursively(enabled) }
}
// usage
import setEnabledRecursively
myView.setEnabledRecursively(false)
yanchenko answered 2020-07-27T19:14:34Z
0 votes
最簡單的方法是
private fun enableDisableActivty(isEnable : Boolean){
if(!isEnable) window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE)
else window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE)
}
Shivam Dawar answered 2020-07-27T19:14:58Z
總結
以上是生活随笔為你收集整理的android点击事件禁用,android-禁用所有视图的触摸事件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 测试工程 关闭混淆,混淆
- 下一篇: html首字母样式,html标签手册