2011-04-13 44 views
4

我有以下佈局隱藏在運行時的線性佈局的Android

<merge> 
    <LinearLayout 
     android:id="@+id/ll_main" 
     android:layout_height="fill_parent" 
     android:layout_width="fill_parent" 
     /> 
    <LinearLayout 
     android:id="@+id/ll_sub" 
     android:layout_height="fill_parent" 
     android:layout_width="fill_parent" 
     /> 
</merge> 

我想要做的是顯示/隱藏在運行時ll_sub佈局通過setVisibility(),但它無法正常工作。

當我設置android:visibility="gone"ll_sub那麼它是不是在屏幕上顯示的XML,這一次(也是我曾與invisible選中),當我使用setVisibility()顯示在運行時,這個佈局,它顯示,但是當我嘗試隱藏此佈局,一旦顯示,則不會隱藏。

編輯

我想顯示/隱藏按鈕點擊這個線性佈局。

LinearLayout ll; 
Button minimize; 
int visibility=0; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    ll=(LinearLayout)findViewById(R.id.ll_sub); 
    minimize=(Button)findViewById(R.id.minimize); 
    minimize.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View view) 
     { 

      if(visibility==0) 
      { 
       visibility=2; 
      } 
      else 
      { 
       visibility=0; 
      } 
      ll.setVisibility(visibility); 

     } 
    }); 
} 
+1

你不只是忘記叫無效? – 2011-04-13 05:42:20

回答

16

它看起來像你正在設置改變view visibility錯誤的常量。

GONE == 8 
INVISIBLE == 4 
VISIBLE == 0 

但是,你不應該依賴於Android的發生指定代表自己的常數的實際值。請改用View類中定義的值:View.VISIBLE,View.INVISIBLEView.GONE

// snip... 
if(visibility == View.VISIBLE) 
{ 
    visibility = View.GONE; 
} 
else 
{ 
    visibility = View.VISIBLE; 
} 
ll.setVisibility(visibility); 

而且不要忘記調用invalidate()的看法:)

+1

無效在高度嵌套佈局中非常重要。 – 2012-09-02 00:23:01

2

您應該使用視圖提供

View.INVISBLE, View.VISIBLE, View.GONE 

的常量,也取消你查看

+0

該死的,要放慢:-D – Hache 2011-04-13 06:01:00

+0

從一個新用戶到另一個新用戶,它不是關於聲譽,而是關於傳播知識。記住這一點,upvotes會自動出現在你的路上! – skabbes 2011-04-13 06:04:55

+0

該評論不是關於聲譽的「損失」。我不在乎這一點。我很幸運知道一些事情;-) – Hache 2011-04-13 06:22:51