2014-07-02 45 views
0

我是Android新手。 我想要做的是,當我按下操作欄上的圖標時,LinearLayout顯示。Android使用MenuItem來隱藏LinearLayout

這裏的圖片 enter image description here

正如你可以看到,有一個放大鏡圖標。 當我按下該圖標時,它下面的搜索欄將消失。 當我再次按下圖標時,它會再次顯示。

我已經嘗試使用setVisibility,但它的顯示錯誤。

這裏是我的Java代碼

MenuItem searchBar; 

    searchBar = (MenuItem) findViewById(R.id.search); 
    searchBar.setVisibility(View.GONE); 
} 

public void toggle_contents(View v){ 

     if(searchBar.isShown()){ 
     Fx.slide_up(this, searchBar); 
     searchBar.setVisibility(View.GONE); 
     } 
     else{ 
     searchBar.setVisibility(View.VISIBLE); 
     Fx.slide_down(this, searchBar); 
     } 
} 

這是我的XML代碼

<LinearLayout 
    android:id="@+id/search" 
    android:background="@color/gray74" 
    android:layout_width="fill_parent" 
    android:layout_height="0dip" 
    android:layout_weight="1" 
    android:paddingLeft="10dip" 
    android:paddingRight="10dip" 
    android:paddingTop="7dip" 
    android:paddingBottom="7dip" > 

    <EditText 
     android:id="@+id/search_global" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center" 
     android:background="@drawable/searchbackground" 
     android:text="Search" 
     android:textColor="@color/gray74" /> 

</LinearLayout> 

由於之前

+0

顯示你的logcat –

回答

0

第一:一個MenuItem不是View,因此它不是屬於你佈局。所以你不應該使用:

MenuItem searchBar = (MenuItem) findViewById(R.id.search); 

但是相反:

MenuItem searchBar = menu.findItem(R.id.search); 

二:當你改變你的菜單,你應該叫invalidateOptionsMenu()

通過這樣做,您基本上可以告訴菜單已對其進行了一些更改。這將使菜單重新創建並請求系統調用onPrepareOptionsMenu()