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