web-dev-qa-db-ja.com

AppCompat v.7でActionBarを表示および非表示にする方法

テキストを表示するシンプルなアプリがあります。

アプリは、いくつかのオプションを備えたメイン画面から始まります(例:アプリに関する情報を表示する情報ボタン、ユーザーが表示可能な個々のテキストをすべて表示できる参照ボタン)。メインボタンは、テキストが表示される別の画面につながります。左右にスワイプすることで、彼はテキストの異なる通路を見ることができます。これがアプリの主な目的です。

現在、ActionBarを実装しています。私のMainActivity.JavaはAppCompatActivityを拡張します。アプリ内のすべてがこのアクティビティに含まれています。

ここで、起動画面や「情報」/「閲覧」モードではなく、「表示」モードでのみアクションバーが表示されるようにします。

アプリの一部にActionBarを配置し、アプリの別の部分にnoActionBarを配置することはできますか? (そして、すべてを同じアクティビティに入れますか?)

私はこれを無駄に達成しようとしてきました。これが可能な場合、次に何を試してみる必要がありますか?

これまでのところ、私は次のことを試みました:

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は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を研究したことによるものです。 post:( アクティビティが作成される前にアクションバーを非表示にして、再び表示する方法

助言がありますか?

53
Timothy Steele

アクティビティではnoアクションバーTheme.AppCompat.NoActionBarまたはTheme.AppCompat.Light.NoActionBarから派生したテーマを使用します。このアクティビティは、setSupportActionBar(Toolbar)を介して独自のものを提供しない限り、アクションバーを表示することはできません。

アクティビティでアクションバーを表示する場所Theme.AppCompatTheme.AppCompat.Light、またはTheme.AppCompat.Light.DarkActionBarから派生したテーマを使用します。これにより、そのようなアクティビティのアクションバーを動的に非表示または表示できます。これらのテーマを使用して独自のアクションバーを提供することはできません。

appcompat-v7アクションバーの操作の場合、getSupportActionBar()の代わりにgetActionBar()を呼び出して取得する必要があります。

87
Eugen Pechanec

ActionBarをプログラムで非表示および表示できます。

隠れる

getSupportActionBar().hide();

表示する

getSupportActionBar().show();

フラグメントから

隠れる

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

表示する

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

編集:

@ RenniePet で述べたように、

ToolbarとしてActionBarを使用している場合は、((AppCompatActivity)getActivity()).getSupportActionBar()を呼び出す必要があります。

52
theapache64

アクティビティをAppCompatActivityとして拡張し、アクションバーを次のように使用します–

getSupportActionBar().hide();  // for hiding
getSupportActionBar().show();  // for showing
11
Pankaj
<style name="Theme.AppCompat.NoActionBar" parent="Theme.AppCompat.Light">
    <item name="Android:windowActionBar">false</item>  
    <item name="Android:windowNoTitle">true</item>
</style>

次のように、アイテムwindowActionbar。のAndroidを削除します。

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

それがあなたのお役に立てば幸いです。

5
paperhs

AppCompatActivityには独自の埋め込みツールバーがあります。メインxmlで追加のツールバー定義を使用する必要はありません。

getSupportActionBar()。show()を呼び出すだけです

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);
}
3
Selcuk Soydan

OnCreateメソッドで、setContentViewの後、これを使用して、各クラスの表示または非表示を単純にします。

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

タイトルを設定する場合は、

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

AppThemeですべてのアクティビティのツールバーを閉じます:
styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"><!-- .NoActionBar -->
0
Volodymyr Kulyk

AppCompatActivityを使用してINTENTのActionBarを表示/非表示にしようとすると、次の問題が発生します。

  • ポインターnull例外...
  • スレッドの問題...

以下の手順に従って、インテントへの同じ関連スレッドにアクセスします。

// 1) Calling the intent in the "main activity"
Intent intent = new Intent(context, YourClass.class);
startActivity(intent);

// 2) Get the context in your "Intent activity"
public class YourClass extends AppCompatActivity {
YourClass mContext;

@Override
protected void onCreate(Bundle savedInstanceState) {
    mContext = this;
}

// 3) Hide/Show Action bar from a method
public void yourMethod(YourClass mContext){

    mContext.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            mContext.getSupportActionBar().hide();
        }
    });

}
0
Thomas LeBlond

これが解決策になることを願っています。それは私のシステムで機能しました:

Android:theme="@Android:style/Theme.NoTitleBar.Fullscreen"
0
Rahul Raina