2016-12-09 15 views
2

私は、Javaからアンドロイドアプリケーションのナビゲーションバーを隠すことに関する記事や記事を見てきました。しかし、私が知りたいのは、です。完全なスクリーンアプリケーション(ゲーム)(純粋なアンドロイドC++ネイティブアクティビティアプリケーション)を使用してナビゲーションバーを削除するにはどうすればいいですか?()アンドロイドマニフェストのフルスクリーンは、トップバーを隠すときに機能しますが、ナビゲーションバーは表示されたままです。純粋なアンドロイドでナビゲーションバーを隠す

これは削除したいNavigation Barです。

私は運がない本を検索しましたが、ネイティブアクティビティとGoogle検索の結果は何も書かれていません。ヘッダーファイルの中には、たとえ助けにならない小さなコメントでもあるコメントしかありません。純粋なC++アンドロイドアプリケーションに関する話題は黒いスポットだが、市場で出てくるゲームの多くはC++で書かれているようだ。

私も試したセッティング:

AConfiguration_setNavHidden(m_app->config, ACONFIGURATION_NAVHIDDEN_YES); 

は、しかし、実際にはすべてのAConfiguratin_setXXXは何もしないように見える、何もしないようです。おそらく私は間違った場所でそれを呼んでいますか?私はウィンドウを作成した後にAPP_CMD_INIT_WINDOWの間にそれを呼び出しています。この機能をどこで呼びますか?

+0

AFAIK、あなたはJava APIを呼び出すことなくそれを行うことはできません。 'GetMethodID'と[related functions](https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html)を使って純粋なC++コードからJNI経由でjavaメソッドを呼び出さなければならないかもしれません)。 AC構成はおそらくあなたが必要とするものではありません - ドキュメントをすばやく見て、それはJavaの 'Configuration'オブジェクトを編集するためのものです。あなたの 'Activity'に対して' jobject'を取得し、 'JNIEnv'を取得し、それを使ってあなたの仕事に必要なJavaメソッドを呼び出す必要があります。 – user1643723

+0

今日私は就職インタビューをしていましたが、この問題について言及しました。明らかに同じ問題がありましたが、純粋なC++で解決しました。私が出発する前に彼らがどのようにしたのか尋ねるのを忘れていましたが、それが可能なように聞こえます。私の最後の手段は、答えを見つけることができない場合、通常の人間のように部分的にJavaを使用することです。あなたの入力をありがとう! – MightyMoo

+0

JNIでJavaメソッドを呼び出すためにC++を使用する*は「Java C++ APIを使用してJavaメソッドを呼び出すだけで、Javaコードを記述しないため*「純粋なC++」です。 – user1643723

答えて

2

だから!好奇心が強い人は、マイクロソフトのティーポットの例の1つを捜索して答えを出した。

public class NameOfActivity extends NativeActivity { 

void setImmersiveSticky() { 
    View decorView = getWindow().getDecorView(); 
    decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN 
      | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 
      | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY 
      | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
      | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
      | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    setContentView(R.layout.activity_main); 

    int SDK_INT = android.os.Build.VERSION.SDK_INT; 
    if (SDK_INT >= 19) { 
     setImmersiveSticky(); 

     View decorView = getWindow().getDecorView(); 
     decorView.setOnSystemUiVisibilityChangeListener 
       (new View.OnSystemUiVisibilityChangeListener() { 
        @Override 
        public void onSystemUiVisibilityChange(int visibility) { 
         setImmersiveSticky(); 
        } 
       }); 
    } 
    super.onCreate(savedInstanceState); 
} 

@Override 
protected void onResume() { 
    //Hide toolbar 
    int SDK_INT = android.os.Build.VERSION.SDK_INT; 
    if (SDK_INT >= 11 && SDK_INT < 14) { 
     getWindow().getDecorView().setSystemUiVisibility(View.STATUS_BAR_HIDDEN); 
    } else if (SDK_INT >= 14 && SDK_INT < 19) { 
     getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LOW_PROFILE); 
    } else if (SDK_INT >= 19) { 
     setImmersiveSticky(); 
    } 
    super.onResume(); 
} 

}

純粋なC++のアンドロイド開発はまだ、Javaのを使用しています、それはアンドロイドSDKディレクトリ内のソースからそれを取得します。そして、これは私が思い付いたものです。 NativeActivityをいくつか調整して拡張することができます。マニフェストインサイドあなたがしなければならないすべては次のとおりです。

android:hasCode="true" 

、その後ほとんどimportan部分は

 android:name="com.example.package.NameOfActivity" 

 android:name="android.app.NativeActivity" 

からアクティビティ名を変更することですそれはまだ呼び出しますアンドロイドのメインと定期的なネイティブの活動のように設定するが、今は完全にフルスクリーンを提供します。私はこれが誰かを助けることを願っています。答えを探すのに数日かかりましたが、これが私が思いつくことのできるものです!

GOOD LUCK!

+0

これはsfmlの完全なC++から見つかったもので、古いAPIバージョンを考慮しています:https://github.com/SFML/SFML/blob/fae3b65f0567f87fa9925cd42d28df15eb69e79c/src/SFML/Main/MainAndroid.cpp#L139 – user2591935

関連する問題