12

setSystemUiVisibility() と戦って、しばらくの間 (ビデオ プレーヤーの場合) ソフト ナビゲーション ボタンを非表示にしようとしました。宣伝どおりには機能しないようです。これが私のコードですFrameLayout

void setNavVisibility(boolean visible)
{
    int newVis = SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
    if (!visible)
    {
        newVis |= SYSTEM_UI_FLAG_LOW_PROFILE | SYSTEM_UI_FLAG_HIDE_NAVIGATION;
    }
    setSystemUiVisibility(newVis);
}

SDK の例から少し変更:

    void setNavVisibility(boolean visible) {
        int newVis = SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                | SYSTEM_UI_FLAG_LAYOUT_STABLE;
        if (!visible) {
            newVis |= SYSTEM_UI_FLAG_LOW_PROFILE | SYSTEM_UI_FLAG_FULLSCREEN
                    | SYSTEM_UI_FLAG_HIDE_NAVIGATION;
        }

呼び出されても何もしません。別の からそれらを呼び出すと、ある程度成功しましたViewが、ドキュメントには、View呼び出し元に何らかの効果があるとは記載されていませんか? ここでは、ドキュメンテーションが (驚きの驚き) やや欠けていると思います。本当に何が起こっているのか知っている人はいますか?

4

6 に答える 6

31

うーん、どうやら私は自分の質問を複製しました! しかし、とにかく私は答えを見つけました: ソース コードを読んだ後 (多くの場合、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:16:17.747 に答える
1

ユーザーとのやり取りが行われていないと確信していますか? つまり、コントロールを即座に再表示させるタッチをエミュレートしますか?

ドキュメントから:

SYSTEM_UI_FLAG_HIDE_NAVIGATION: 制限があります。ナビゲーション コントロールは非常に重要であるため、ユーザーの操作を最小限に抑えるとすぐに再表示されます。これが発生すると、このフラグと の両方SYSTEM_UI_FLAG_FULLSCREENが自動的にクリアされるため、両方の要素が同時に再表示されます。

余談ですが、JB のストック ビデオ プレーヤーを使用しても、状況によってはビューのサイズが変更されないという問題があることに気付きました。バグだと思います(またはバグでした)。

于 2013-01-06T01:11:36.900 に答える