2017-03-03 220 views
2

我發現了很多關於Viewvisibility的問題。我已經知道.GONE和。之間的區別了。 INVISIBLE。我不知道的是如何做出適當的切換來製作它們。 VISIBLE/.GONE每當一個按鈕被點擊。切換視圖可見性

這裏是我需要的:我有一個linear layout與一些buttons裏面。我需要他們buttons隱藏在首位,所以我設置linear layout爲不見了:

<LinearLayout 
    android:id="@+id/feelings_layout" 
    android:layout_below="@+id/feeling_btn" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:visibility="gone"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 
     <Button 
      android:id="@+id/happy_btn" 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:layout_height="46dp" 
      android:text="Happy"/> 
     <Button 
      android:id="@+id/sad_btn" 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:layout_height="46dp" 
      android:text="Sad"/> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 
     <Button 
      android:id="@+id/love_btn" 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:layout_height="46dp" 
      android:text="in love"/> 
     <Button 
      android:id="@+id/mad_btn" 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:layout_height="46dp" 
      android:text="mad"/> 
    </LinearLayout> 

</LinearLayout> 

然後我make'em。當點擊一個按鈕時,會出現VISIBLEGONE當再次相同button按:

Button feelingsButton = (Button)contentView.findViewById(R.id.feeling_btn); 
    feelingsButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Toast.makeText(context, "button clicked", Toast.LENGTH_LONG).show(); 
      feelingsButtonsLayout = (LinearLayout)contentView.findViewById(R.id.feelings_layout); 
      if(feelingsButtonsLayout.getVisibility() == View.GONE){ 
       Log.d("-----------", "gone"); 
       feelingsButtonsLayout.setVisibility(View.VISIBLE); 

      }else{ 
       Log.d("-----------", "not gone"); 
       for (int i = 0; i < feelingsButtonsLayout.getChildCount(); i++){ 
        View view = feelingsButtonsLayout.getChildAt(i); 
        view.setVisibility(View.GONE); 
       } 
       feelingsButtonsLayout.setVisibility(View.GONE); 
      } 
     } 
    }); 

一切似乎都做工精細,但是當我點擊同一按鈕第三次,期待它使佈局VISIBLE,就不會再顯示即使我的log表示該視圖是gone(只看到Logcat,它似乎工作正常)。

對此的任何想法?

回答

2

您必須重新設置所有按鈕的知名度將其在第二次點擊設置爲GONE因爲

第1點擊=>設置您的佈局可見,所有按鈕都已經可見

第2點擊=>組佈局消失以及所有按鈕

3點擊=>設置佈局可見,但按鈕依然不可見其分別設置了2號的同時點擊

if(feelingsButtonsLayout.getVisibility() == View.GONE){ 
       Log.d("-----------", "gone"); 
       for (int i = 0; i < feelingsButtonsLayout.getChildCount(); i++){ 
        View view = feelingsButtonsLayout.getChildAt(i); 
        view.setVisibility(View.VISIBLE); 
       } 
       feelingsButtonsLayout.setVisibility(View.VISIBLE); 

      }else{ 
       Log.d("-----------", "not gone"); 
       for (int i = 0; i < feelingsButtonsLayout.getChildCount(); i++){ 
        View view = feelingsButtonsLayout.getChildAt(i); 
        view.setVisibility(View.GONE); 
       } 
       feelingsButtonsLayout.setVisibility(View.GONE); 
      } 

你可以刪除這兩個循環和簡單地設置您的container佈局知名度

if(feelingsButtonsLayout.getVisibility() == View.GONE){ 
       Log.d("-----------", "gone"); 
       feelingsButtonsLayout.setVisibility(View.VISIBLE); 

      }else{ 
       Log.d("-----------", "not gone"); 
       feelingsButtonsLayout.setVisibility(View.GONE); 
      } 
+0

感謝的人,這是一個很好的解釋。我剛剛刪除了循環,它都工作得很好。我會將上面的答案標記爲已接受的答案,不過因爲它也解決了我的問題,他首先回答好嗎?乾杯! – Rob

+0

@rob檢查先回答的時間,但解釋和回答都需要時間,無論如何,我很高興我可以幫助 –

+0

該死的,對!我的壞人! – Rob

1

的問題是要設置GONE所有的各個按鈕,但在佈局上的按鈕單獨,而不是設置VISIBLE

當父配置設置爲GONE時,不需要隱藏所有按鈕。您可以從您的else中刪除下面的代碼

for (int i = 0; i < feelingsButtonsLayout.getChildCount(); i++){ 
       View view = feelingsButtonsLayout.getChildAt(i); 
       view.setVisibility(View.GONE); 
      } 
+0

謝謝你,解決了我的問題! – Rob