如何禁用布局的所有点击事件?

时间:2011-06-04 19:21:48

标签: android android-layout

我有一个包含很多视图的布局。是否有一种简单的方法可以禁用其所有视图点击事件?

8 个答案:

答案 0 :(得分:34)

您可以传递View以禁用所有子点击事件。

public static void enableDisableView(View view, boolean enabled) {
        view.setEnabled(enabled);
        if ( view instanceof ViewGroup ) {
            ViewGroup group = (ViewGroup)view;

            for ( int idx = 0 ; idx < group.getChildCount() ; idx++ ) {
                enableDisableView(group.getChildAt(idx), enabled);
            }
        }
    }

答案 1 :(得分:23)

您可以将此功能添加到父版面视图

,而不是遍历所有子视图
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    return true;
}

这将在onTouchEvent之前为任何子视图调用,如果它返回true,则根本不会调用子视图的onTouchEvent。如果需要,可以创建一个布尔字段成员来打开和关闭此状态。

答案 2 :(得分:12)

我会创建一个ViewGroup,其中包含您要同时启用/禁用的所有视图,并调用setClickable(true/false)启用/禁用点击。

答案 3 :(得分:5)

您需要在视图上调用view.setClickable(false); view.setEnabled(false); 方法。

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\User;
use App\UserDetail;
use App\UserSex;
use App\Province;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class UserController extends Controller {

...

public function show($id) {
        //
        $user = User::find($id);
        $userDetail = User::find($id)->userDetail;
        $userSex = User::find($id)->userSex;
        $province = User::find($id)->province;
        return view('users.show', get_defined_vars());
    }

答案 4 :(得分:2)

这是Parag Chauhan's answer

的Kotlin扩展功能实现
fun View.setAllEnabled(enabled: Boolean) {
    isEnabled = enabled
    if (this is ViewGroup) children.forEach { child -> child.setAllEnabled(enabled) }
}

答案 5 :(得分:1)

在您的活动中创建一个布尔clickEnabled并在点击监听器中进行检查;如果它是假的,不要做任何事情。

答案 6 :(得分:0)

如果您不想将所有子视图都设置为禁用状态(因为它们在启用状态方面可能看起来有所不同),则可以使用以下方法:

private fun toogleTouchable(canTouch: Boolean) {
        container.descendantFocusability =
                if (value) {
                    container.requestFocus()
                    ViewGroup.FOCUS_BLOCK_DESCENDANTS
                } else {
                    ViewGroup.FOCUS_AFTER_DESCENDANTS
                }
    }

答案 7 :(得分:-3)

我会在您的activity类中实现onClickListener接口,并在onClick方法中返回false。我觉得这是解决问题的最简单方法。