15

ナビゲーション バー (ICS のソフト ナビゲーション キー) の後ろに隠れている mediacontroller に問題があります。最初は問題ありませんが (最初の画像)、ナビゲーション バーが初めて非表示になると、mediacontroller は画面に合わせてサイズ変更されますが (正しい)、ナビゲーション バーが再び表示されたときにサイズが元に戻りません (2 番目の画像)。また、広告は後ろに移動されます (スクリーンショットのために非表示)。

ドキュメントの正しい適合を理解していれば、 SystemWindowsがサイズ変更を担当する必要があります。しかし、それは機能していません。

どうやってやるの?助けてくれてありがとう。

これをGalaxy Nexusでテストしています。

XML レイアウト:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/playerLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:animateLayoutChanges="true"
android:background="@color/black" >
<mynamespace.BKDVideoView
    android:id="@+id/videoview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"/>
<mynamespace.SubtitleTextView
    android:id="@+id/subtitleText"
    style="@style/SubtitleOverlayText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|center_horizontal"
    android:layout_marginBottom="30dp"
    android:gravity="center"
    android:visibility="gone"
    android:fitsSystemWindows="true"
    android:animateLayoutChanges="true"/>
<FrameLayout
    android:id="@+id/adLayout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="top|right"
    android:fitsSystemWindows="true"
    android:animateLayoutChanges="true"/>
<FrameLayout
    android:id="@+id/videoMediaControllerHolder"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:animateLayoutChanges="true"/>

BKDVideoView は、いくつかのカスタマイズを加えた VideoView の GrepCode からのコピーです。MediaController についても同じことを行いました。MediaController では、次のように非表示を呼び出しています。

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;
    }

    // mSystemUiHolder -> FrameLayout (playerLayout)
    mSystemUiHolder.setSystemUiVisibility(newVis);

大丈夫なとき 重ねると

更新:同じ問題がある場合は、受け入れられた回答のコメントも確認してください。フルスクリーンにする必要があるビューには、sammyboy コードを使用します。両方に感謝します。申し訳ありませんが、これを理解するのに時間がかかりすぎて、ポイントを与えることができませんでした:(

4

5 に答える 5

5

これはシステムバーの問題です。一部のデバイスfill_parentまたはmatch_parentエンティティはフルスクリーンサイズであり、システムバーの幅と高さを認識しません。私は次のことを提案します:プログラムでビューに整数値を与えます。(システムバーの幅と高さを計算します)。画面サイズからsbの幅または高さ(横向きまたは縦向きモード)を削除し、この値をビューに設定します。

ここで画面サイズなどを取得する方法の答え。

于 2012-11-14T11:25:37.053 に答える
4

これを見てください: http://bin-liu.blogspot.no/2012/03/how-to-hide-and-display-navigation-bar.html

public void onLayoutClicked(View v) {
    view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
}

.

Display display = getWindowManager().getDefaultDisplay();     
Method mGetRawH = Display.class.getMethod("getRawHeight");
Method mGetRawW = Display.class.getMethod("getRawWidth");
int rawWidth = (Integer) mGetRawW.invoke(display);
int rawHeight = (Integer) mGetRawH.invoke(display);
于 2012-11-14T17:10:53.257 に答える
1

android:fitsSystemWindows="false"surfaceview を含むフレームレイアウト内に追加 します。

そしてあなたの活動の中のこのコード

your_framelayout_here.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE |View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
于 2015-02-23T19:08:06.620 に答える
1

bringToFront()ビューが一番上になるように使用します

于 2012-11-05T18:04:03.123 に答える
1

VideoViews はs であるためSurfaceView、通常の と同じ動作をしませんView。次のように指定して、バックグラウンドに残るようにする必要があります。

videoview.setZOrderMediaOverlay(false);
于 2012-11-13T16:00:39.077 に答える