2016-01-07 80 views
0

我有一個包含ScrollView的Activity。這個ScrollView包含一個TableLayout,其中包含許多Widgets。當用戶點擊一個Button時,我想禁用TableLayout中的所有Widgets,但不禁用滾動。用戶需要能夠查看ScrollView內部的內容,但不能與其交互。我搜索了互聯網,並沒有找到一個適合我的答案。如果您有任何解決方案,請在這裏發佈。任何幫助都很讚賞。(Android)如何禁用ScrollView中的所有Buttons/CheckBoxes/Other Widgets,但不禁用滾動

+0

使用'your_widget.setEnabled(false);'將啓用的狀態更改爲禁用,否則爲true。您必須爲每個想要禁用的小部件進行設置。 – diogojme

回答

0

我最初從Yaw Asare的回答開始,發現它不適用於我的情況。在我的應用程序中遇到這個bug之前,我已經設置了Player 1和Player 2 Widgets及其onClick方法。我需要做的就是重新實現這些函數,並將它們的onClick方法設置爲什麼都不做,然後在我需要再次啓用這些方法時回顧初始方法。我沒有真正禁用這些小工具的點擊,但改變了他們的onClick方法。非常感謝所有答覆這個問題的人。我非常感謝你的幫助。

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. 
} 
0

你將不得不調用setEnabled(false)上的ScrollView每個視圖。爲了方便起見,您可以將要禁用的所有視圖添加到ViewGroup,然後當想要啓用/禁用子視圖時,只需遍歷ViewGroup中的視圖即可。希望這可以幫助。

0

我會建議你使用框架佈局it.Try下面的代碼

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; 
      } 
     }); 

這將禁用點擊您的視圖的每個孩子。

相關問題