2016-12-09 22 views
2

자바를 통해 안드로이드 애플리케이션의 탐색 바를 숨기는 기사와 기사를 보았습니다. 그러나, 내가 알고 싶은 것은 전체 화면 응용 프로그램 (게임) (순수한 안드로이드 C++ 네이티브 활동 응용 프로그램)을 통해 탐색 모음을 제거하는 방법입니다 (모두 Java가 아닙니다!). 안드로이드 매니페스트의 전체 화면은 상단 막대를 숨길 때 작동하지만 탐색 막대는 계속 표시됩니다.순수한 안드로이드 네비게이션 내비게이션 막대 숨기기

이것은 제거하고자하는 Navigation Bar입니다.

나는 행운과 함께 책을 검색했지만, 실제 활동에 대한 실제 문서가없고 Google 검색 결과는 아무 것도 나오지 않습니다. 헤더 파일의 일부에는 주석이 있지만 작은 주석은 도움이되지 않습니다. 순수한 C++ 안드로이드 응용 프로그램에 관한 주제는 검은 점이지만 시장에서 나오는 많은 게임은 C++로 작성되었습니다.

나는 또한 시도했다 설정 :

AConfiguration_setNavHidden(m_app->config, ACONFIGURATION_NAVHIDDEN_YES); 

는하지만 사실 모든 AConfiguratin_setXXX는 아무것도하지 않는 것, 아무것도하지 않는 것 같다. 아마도 나는 잘못된 장소에서 그것을 부를 것인가? 창을 만든 후 APP_CMD_INIT_WINDOW 동안 전화했습니다. 이 함수를 어디에서 호출해야합니까?

+0

AFAIK, Java API를 호출하지 않으면이를 수행 할 수 없습니다. 'GetMethodID' 및 [관련 함수] (https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html)를 사용하여 순수 C++ 코드에서 JNI를 통해 Java 메소드를 호출해야 할 수도 있습니다.). 구성은 아마 당신이 필요로하는 것이 아닙니다 - 문서를 빠르게 볼 수 있기 때문에, 그것은 Java'Configuration' 객체를 편집하기위한 것입니다. 'Activity'에'jobject'를 가져 와서'JNIEnv'를 얻어서 작업에 필요한 Java 메소드를 호출해야합니다. – user1643723

+0

오늘 저는 취업 인터뷰를 통해이 문제에 대해 언급했으며 분명히 같은 문제가 있었지만 순수한 C++로 해결했습니다. 내가 떠나기 전에 그들이 어떻게했는지 묻는 것을 잊어 버렸지 만 가능한 것처럼 들린다. 나의 최후의 수단은, 내가 대답을 찾을 수 없다면, 정상적인 인간처럼 자바를 부분적으로 사용하는 것이다.귀하의 의견을 주셔서 감사합니다! – MightyMoo

+0

JNI *로 Java 메소드를 호출하기 위해 C++을 사용하는 것은 Java 코드를 작성하지 않기 때문에 * "순수 C++"입니다. JVM C++ API를 사용하여 Java 메소드를 호출하기 만합니다. – user1643723

답변

2

그래서! 호기심이 생긴 사람은 마이크로 소프트의 주전자 예를 뒤적 거리며 대답했다.

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++ 안드로이드 개발은 여전히 ​​자바를 사용는 안드로이드 SDK 디렉토리 안에 소스를 가져옵니다 그리고 이것이 내가 생각 해낸 것입니다. NativeActivity를 몇 가지 추가 조정을 통해 확장 할 수 있습니다. 매니페스트 내부 당신이해야 할 모든은 다음과 같습니다

android:hasCode="true" 

후 가장 importan 부분이 여전히를 호출합니다

 android:name="android.app.NativeActivity" 

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

에에서 활동 이름을 변경하는 것입니다 안드로이드 메인과 정기적 인 네이티브 활동처럼 설정,하지만 지금은 당신에게 완전히 전체 화면을 제공합니다. 나는 이것이 누군가를 돕기를 바란다. 답변을 검색하는 데 며칠이 걸렸습니다. 그리고 이것은 내가 생각해 낼 수있는 것입니다!

GOOD LUCK!

+0

sfml에서 전체 C++을 발견했으며 이전 API 버전을 고려합니다. https://github.com/SFML/SFML/blob/fae3b65f0567f87fa9925cd42d28df15eb69e79c/src/SFML/Main/MainAndroid.cpp#L139 – user2591935

관련 문제