(Android)如何禁用ScrollView中的所有按钮/ CheckBoxes /其他小部件但不禁用滚动

时间:2016-01-07 00:50:35

标签: java android widget scrollview

我有一个包含ScrollView的Activity。这个ScrollView里面包含一个TableLayout很多小部件。当用户单击Button时,我想禁用TableLayout中的所有Widgets,但不禁用滚动。用户需要能够查看ScrollView内部的内容,但不能与之交互。我在互联网上搜索过,但却找不到适合我的答案。如果您有任何解决方案,请在此处发布。非常感谢任何帮助。

4 个答案:

答案 0 :(得分:1)

ScrollView扩展了ViewGroup,因此您可以使用getChildCount()和getChildAt(index)方法迭代您的子项。 所以,它看起来像这样:

ScrollView scroll = (ScrollView) findViewById(R.id.yourscrollid);
for ( int i = 0; i < scroll.getChildCount();  i++ ){
    View view = scroll.getChildAt(i);
    view.setEnabled(false); // Or whatever you want to do with the view.
}

答案 1 :(得分:0)

您必须在setEnabled(false)的每个视图上致电ScrollView。为了使这更容易,您可以将要禁用的所有视图添加到ViewGroup,然后当您想要启用/禁用子视图时,只需遍历ViewGroup中的视图。希望这可以帮助。

答案 2 :(得分:0)

我建议你使用框架布局。试试下面的代码

xml文件

 <?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <TableLayout
            android:id="@+id/tablelayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/white" >
        </TableLayout>
        <!-- below frame layout is to disable the whole view -->

        <FrameLayout
            android:id="@+id/frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </FrameLayout>

</ScrollView>

现在在onCreate()方法内的活动中编写以下代码。

FrameLayout fl = (FrameLayout) findViewById(R.id.frame);
        fl.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                return true;
            }
        });

这将禁用对视图中每个孩子的点击。

答案 3 :(得分:0)

我最初是从Yaw Asare的回答开始的,发现它在我的情况下并没有起作用。在我的应用程序中遇到这个bug之前,我已经设置了Player 1和Player 2 Widgets以及它们的onClick方法。我需要做的就是修复我的错误,重新实现这些功能并设置他们的onClick方法什么也不做,然后在我需要再次启用这些方法时调用初始方法。我实际上并没有禁用这些Widgets的单击,而是更改了它们的onClick方法。非常感谢回答这个问题的所有人。我非常感谢你的帮助。