2015-05-17 53 views
41

我有一個顯示文本的簡單應用程序。如何使用AppCompat v.7顯示和隱藏ActionBar

該應用程序以帶有幾個選項的主屏幕(例如,導致有關應用程序信息的信息按鈕,允許用戶查看可以顯示的所有單獨文本片段的瀏覽按鈕)開始。主按鈕導致顯示文本的另一個屏幕。通過左右滑動,他可以看到不同的文字段落。這是應用程序的主要目的。

目前我有一個ActionBar實現。我的MainActivity.Java擴展了AppCompatActivity。應用程序中的所有內容都在此活動中。

現在我想讓ActionBar僅在「顯示」模式下顯示,而不是在啓動屏幕或「信息」/「瀏覽」模式下顯示。

是否有可能在應用程序的一部分中有一個ActionBar,並且在應用程序的另一部分中有沒有 ActionBar? (並保持一切都在同一活動?)

我一直在努力完成這一無果。如果這是可能的,我應該接下來嘗試什麼?

到目前爲止,我已經嘗試以下操作:

1)創建這一主題

<style name="Theme.AppCompat.NoActionBar" parent="Theme.AppCompat.Light"> 
    <item name="android:windowActionBar">false</item> 
    <item name="android:windowNoTitle">true</item> 
</style> 

並將其應用到MainActivity ...

<activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:theme="@style/Theme.AppCompat.NoActionBar" > 

.... 做完這些之後,ActionBar仍然在那裏。 (這個來自S.O.的帖子(android:windowNoTitle will not hide actionbar with appcompat-v7 21.0.0

2)另一個嘗試是將此添加到onCreate。

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getWindow().requestFeature(Window.FEATURE_ACTION_BAR); 
    getActionBar().hide(); 

    setContentView(R.layout.activity_main); 

這是研究這個S.O. (How to hide action bar before activity is created, and then show it again?

有什麼建議嗎?

+1

Hlooooooooow,覈對答案花花公子。 – theapache64

回答

71

在你想有活動沒有行動起來吧使用來自Theme.AppCompat.NoActionBarTheme.AppCompat.Light.NoActionBar衍生的主題。除非您通過setSupportActionBar(Toolbar)提供您自己的活動,否則此活動將永遠無法顯示操作欄。

在你想有操作欄使用來自Theme.AppCompatTheme.AppCompat.LightTheme.AppCompat.Light.DarkActionBar衍生的主題活動。這將允許您動態地隱藏或顯示此活動中的操作欄。您將無法使用這些主題提供您自己的操作欄。

與程序兼容性-V7行動酒吧工作需要通過調用getSupportActionBar()而不是getActionBar()獲得它。

+0

感謝說熱得到吧 – lmiguelvargasf

38

您可以編程方式隱藏和顯示ActionBar。

要隱藏

getSupportActionBar().hide(); 

要顯示

getSupportActionBar().show(); 

它也可以做到從片段

要隱藏

getActivity().getSupportActionBar().hide(); 

爲了顯示

getActivity().getSupportActionBar().show(); 

編輯:

正如@RenniePet指出,

你需要調用((AppCompatActivity)getActivity()).getSupportActionBar(),如果你使用ToolbarActionBar

+2

爲了在片段中使用,我必須這樣做:「((AppCompatActivity)getActivity())。getSupportActionBar()。show();」 – RenniePet

+0

是的,這是正確的。 tnx兄弟。 @RenniePet – theapache64

9

擴展你的活動作爲AppCompatActivity,然後使用操作欄爲: -

getSupportActionBar().hide(); // for hiding 
getSupportActionBar().show(); // for showing 
+2

請注意,現在已棄用「ActionBarActivity」。應該使用'AppCompatActivity'來代替 –

+0

'hide'調用在我的應用中沒有效果。 –

0

我希望這可以解決。它的工作我的系統上:

android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
+0

這強制使用過時的主題,不包括appcompat。 –

4
<style name="Theme.AppCompat.NoActionBar" parent="Theme.AppCompat.Light"> 
    <item name="android:windowActionBar">false</item> 
    <item name="android:windowNoTitle">true</item> 
</style> 

刪除的Android項windowActionbar.just類似如下:

<style name="Theme.AppCompat.NoActionBar" parent="Theme.AppCompat.Light"> 
    <item name="windowActionBar">false</item> 
    <item name="android:windowNoTitle">true</item> 
</style> 

我希望它可以幫助你。

+1

也需要從android:windowNoTitle中刪除android。 –

0

辭退工具欄的所有活動,AppTheme
styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"><!-- .NoActionBar --> 
2

AppCompatActivity有它自己的嵌入式工具欄。你不需要在你的主要xml中使用額外的工具欄定義。

只需致電getSupportActionBar()。顯示()

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getSupportActionBar().show(); 
} 

public boolean onCreateOptionsMenu(Menu menu) 
{ 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return super.onCreateOptionsMenu(menu); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 

     TextView text1=(TextView)findViewById(R.id.textView); 
     text1.setText("I changed the text!"); 

    } 

    return super.onOptionsItemSelected(item); 
} 
2

在onCreate方法,後的setContentView,使用此簡單地顯示或隱藏爲每個類。

getSupportActionBar().hide(); 
getSupportActionBar().show(); 

如果你想設置標題,

getSupportActionBar().setTitle("This is ToolBar");