Подтвердить что ты не робот

Использование нового режима IMMERSIVE в android kitkat

Я хочу сделать операцию, чтобы перейти в режим IMMERSIVE и скрыть верхние и нижние системные панели сразу после ее запуска.

В сайте разработчиков Android говорится, что я должен использовать setSystemUiVisibility() и предоставлять SYSTEM_UI_FLAG_IMMERSIVE и SYSTEM_UI_FLAG_HIDE_NAVIGATION.

Как я могу сделать это в методе OnCreate() активности? Я думаю, что setSystemUiVisibility не указан в классе Activity, и это должно произойти в представлении. Есть ли способ обхода?

UPDATE

ok В соответствии с doorstuck я добавил следующие строки, но я не вижу никаких изменений, панели навигации и кнопки buttom все еще видны:

public class MainActivity extends Activity {

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

        if (savedInstanceState == null) {
        }
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE);
    }

    //Rest of activity code
4b9b3361

Ответ 1

Получить представление декора:

getWindow().getDecorView().setSystemUiVisibility(...)

Помните, что аргументы представляют собой битовые флаги. Вызовите только один метод выше:

getWindow().getDecorView().setSystemUiVisibility(
          View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
        | View.SYSTEM_UI_FLAG_FULLSCREEN
        | View.SYSTEM_UI_FLAG_IMMERSIVE);

Ответ 2

Chris Banes gist показывает хороший класс помощников, который мы можем использовать, чтобы установить режим погружения для всех версий из HoneyComb в Lollipop https://gist.github.com/chrisbanes/73de18faffca571f7292.

Обновление: Я попробовал получить его из своего репетитора github, чтобы включить его в свой проект, но мне пришлось клонировать файлы gist в свой проект и приспосабливать пакет. Если кто-то знает, как правильно включить его в качестве зависимости, пожалуйста, помогите мне.

Я добавил его в свой FullScreenActivity, я хочу использовать ImmersiveStickyMode следующим образом:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);

        final int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_FULLSCREEN
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;

        SystemUiHelper uiHelper =  new SystemUiHelper(this, SystemUiHelper.LEVEL_IMMERSIVE ,flags);
        uiHelper.hide();



}

Ответ 3

Гораздо приятнее и благодарен Уильям Дж. Фрэнсис:

   public class GameActivity extends Activity{

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        /* my code you dont need this
        assets=getAssets();
        sGame= new GameView(this, GAME_WIDTH, GAME_HEIGHT);
        setContentView(sGame);  
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        */


        getWindow().getDecorView().setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
                | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
    }

@Override         
protected void onDoSomethingOtherImportantThing(){
...
}



}

Ответ 4

Вы можете создать глобальную функцию, чтобы перейти в режим погружения, например:

public static void enableImmersiveMode(final View decorView) {
        decorView.setSystemUiVisibility(setSystemUiVisibility());
        decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
            @Override
            public void onSystemUiVisibilityChange(int visibility) {
                if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
                    decorView.setSystemUiVisibility(setSystemUiVisibility());
                }
            }
        });
    }


public static int setSystemUiVisibility() {
        return View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_FULLSCREEN
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
 }

Вышеуказанный код также будет управлять изменением видимости интерфейса пользователя. Надеюсь, это поможет вам.

Ответ 5

Ответ уже задан, но вот Как использовать режим Immersive.

В вашей деятельности:

непосредственно перед setContentview().......

вызов метода: toggleHideyBar();

Следуйте документации документации от разработчика android и скопируйте этот метод в своей деятельности.

Ответ 6

android: immersive = "true" скроет нижнюю панель системы

<application> 
 <activity
        android:name=".CarrierActivity"
        android:label="@string/app_name"
        android:excludeFromRecents="true"
        android:immersive="true"
        android:configChanges="orientation|keyboardHidden|screenSize">
        <intent-filter>
         <action android:name="com.example.SetupWiz.SUW_CARRIER"/>
         <category android:name="android.intent.category.DEFAULT" />
       </intent-filter>
    </activity>
</application>