2

このコードをa内で使用してVideoView、Android(CyanogenMod)4.1を実行しているタッチパッドのナビゲーションバーを非表示にしようとしています。

    setSystemUiVisibility(SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | SYSTEM_UI_FLAG_FULLSCREEN
            | SYSTEM_UI_FLAG_HIDE_NAVIGATION);

残念ながら、それはまったく効果がなく、エラーも発生しません。私は何を探すべきか途方に暮れています(そして「それは機能しない」はあまり役に立たないことを感謝しますが、それがあなたが使用する必要がある唯一のコード行であるという印象を受けています。エラーなし...)

私はさまざまなバリエーションを試しました-getWindow().getDecorView().setSystemUiVi...複数の場所で、タイマーでそれを実行します。コードのその行に確実に到達しますが、それは単に何もしません。

4

1 に答える 1

8

なんてばかげている。ソース コードを読んだ後 (多くの場合、Android の世界で物事を見つける唯一の方法です)、次の文書化されていない事実を発見しました。

setSystemUiVisibility() は、呼び出し元のビューが表示されている場合にのみ効果があります!

さらに: setSystemUiVisibility() を呼び出すビューは、ナビゲーション バーが非表示のままになるように表示されたままにする必要があります。みんなを記録してくれてありがとう、本当に素晴らしい。

関連するコードは次のとおりですView.java

void performCollectViewAttributes(AttachInfo attachInfo, int visibility) {
    if ((visibility & VISIBILITY_MASK) == VISIBLE) {
        if ((mViewFlags & KEEP_SCREEN_ON) == KEEP_SCREEN_ON) {
            attachInfo.mKeepScreenOn = true;
        }
        attachInfo.mSystemUiVisibility |= mSystemUiVisibility;
        ListenerInfo li = mListenerInfo;
        if (li != null && li.mOnSystemUiVisibilityChangeListener != null) {
            attachInfo.mHasSystemUiListeners = true;
        }
    }
}
于 2013-01-06T16:14:55.143 に答える