web-dev-qa-db-ja.com

全画面モードでタイトルを非表示にしますか?

全画面モードで表示されないようにウィンドウタイトルを非表示にする方法はありますか(

getWindow().setFlags(LayoutParams.FLAG_FULLSCREEN,
                LayoutParams.FLAG_FULLSCREEN)

)しかし、その後に表示されます

getWindow().clearFlags(LayoutParams.FLAG_FULLSCREEN)

requestWindowFeature(Window.FEATURE_NO_TITLE)

もちろん、これを元に戻すことはできません。

25
yanchenko

私のAndroidゲームでこれを処理する方法は、私のアクティビティのonCreate()で次の行を呼び出すことです

requestWindowFeature(Window.FEATURE_NO_TITLE);

次に、アクティビティクラス(通常はメニューオプションから呼び出されます)で次のコードを使用して全画面機能をオフまたはオンにできます(m_contentView変数は、setContentView()を呼び出すときに使用したIDを使用して、findViewById()からのビューですあなたの作成)

private void updateFullscreenStatus(boolean bUseFullscreen)
{   
   if(bUseFullscreen)
   {
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
    }
    else
    {
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }

    m_contentView.requestLayout();
}

私はすべてのゲームでこのテクニックを問題なく使用しています。

なぜあなたは言うのですか

requestWindowFeature(Window.FEATURE_NO_TITLE);もちろんオプションではありません

::編集::

まあ、アクティビティの存続期間中に動的に表示または非表示にしようとしている場合、ウィンドウの機能についてsetContentView()の前に設定する必要があるという注記があるため、公式のウィンドウタイトルでそれを実行できるかどうかはわかりません。 ( リンク )と呼ばれます

あなたができることの1つは、独自のタイトルバーを実装し、それを動的に表示および非表示にすることです...この例では、正しいトラックを設定する必要があります

ここにレイアウトファイルがあります

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android" 
    Android:layout_width="fill_parent" 
    Android:layout_height="fill_parent"
    Android:orientation="vertical"
    Android:fadingEdgeLength="0sp"
    >

    <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:id="@+id/myTitleBarLayout" 
        Android:layout_width="fill_parent" 
        Android:layout_height="wrap_content"
        Android:orientation="vertical"
        >

        <TextView
            Android:id="@+id/myTitleBarTextView"
            Android:layout_width="fill_parent" 
            Android:layout_height="wrap_content"
            Android:text="@string/app_name"
            Android:paddingTop="4dip"
            Android:paddingBottom="4dip"
            Android:paddingLeft="6dip"
            Android:textStyle="bold"
            Android:shadowColor="#BB000000"
            Android:shadowRadius="3.0"
            Android:shadowDy=".25"

        />

        <View
            Android:layout_width="fill_parent"
            Android:layout_height="1dip"
            Android:background="#CCEEEEEE"
            Android:padding="10dip"
        />
    </LinearLayout>

    <ScrollView  xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:layout_width="fill_parent" 
        Android:layout_height="fill_parent"
        Android:layout_weight="1"
        >

        <!-- Insert your regular layout stuff here -->

        <Button Android:id="@+id/toggle_title_button" 
            Android:layout_width="wrap_content" 
            Android:layout_height="wrap_content"
            Android:text="Toggle Title" 
        />
    </ScrollView>
</LinearLayout>

そしてここに、カスタムタイトルバーのオンとオフを切り替えることができるメインアクティビティのコードがあります。

package com.snctln.test.HelloGridView;

import Android.app.Activity;
import Android.os.Bundle;
import Android.view.View;
import Android.view.Window;
import Android.view.View.OnClickListener;
import Android.widget.Button;
import Android.widget.LinearLayout;
import Android.widget.TextView;

public class HelloGridView extends Activity
{
    public void onCreate(Bundle savedInstanceState)
    {
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        TextView tv = (TextView)this.findViewById(R.id.myTitleBarTextView);
        tv.setBackgroundColor(0xFF848284);
        tv.setTextColor(0xFFFFFFFF);

        Button toggleTitleButton = (Button)this.findViewById(R.id.toggle_title_button);

        toggleTitleButton.setOnClickListener( new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    LinearLayout ll = (LinearLayout)findViewById(R.id.myTitleBarLayout);

                    if(ll.getVisibility() == View.GONE)
                    {
                        ll.setVisibility(View.VISIBLE);
                    }
                    else
                    {
                        ll.setVisibility(View.GONE);
                    }
                }
            });
    }
}

見た目は完璧ではありませんが、いつでもレイアウトをいじることができます。

alt text

私のもう1つの考えは、プログレスバーを表示するためにすべてを非表示にする場合は、なぜ ProgressDialog

このクラスはかなり使いやすいです...

progressDlg = ProgressDialog.show(context, getString(R.string.progress_dialog_title_prepare), getString(R.string.progress_dialog_body_prepare));

// do long running operation

if(operationFailed)
{
    progressDlg.cancel();
}
else
{
    progressDlg.dismiss();
}
57
snctln

マニフェストファイルのアプリケーションタグにAndroid:theme="@Android:style/Theme.NoTitleBar.Fullscreen"を追加すると、すべてのアクティビティが全画面になります。

13
user1154664

アプリケーションのタイトルを無効にするには(アプリの名前です)

_requestWindowFeature(Window.FEATURE_NO_TITLE)
_

上部の通知バーを無効にする(Android全画面表示を許可するアプリマネージャーへのリクエスト)

getWindow().addFlags(LayoutParams.FLAG_FULLSCREEN)

これが違いを知りたい人に役立つことを願っています!!

11
omni.present
if(useFullscreen)  
{  
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);  
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);  
}  
else  
{  
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);  
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);  
}  

これは私のために働きました... onResumeメソッドで

10
David

Android 3+では、getActionBar().hide()およびgetActionBar().show()を呼び出してそれぞれ標準のアクションバーを表示および非表示にすることで簡単に実現できます。

Android 1,2最良の解決策(おそらく)は、「タイトルバー」にカスタムビューを実装し、オンデマンドで非表示にすることです(もちろん、requestWindowFeature(Window.FEATURE_NO_TITLE);を呼び出す)初めに)。

3
Alex Semeniuk

ドキュメントとAndroid-developersのgoogleグループによると、それは不可能です。それを実装するには、テキストとプログレスバーを含む「タイトルバーのような」レイアウト項目を追加し、必要に応じて非表示/表示する必要があります。現在、タイトルバーコントロールはsetContentView呼び出しの前にのみ実行でき、その後は変更できないため、他の方法はありません。

1
reflog