0

写真を表示する別のフルスクリーンアクティビティ (B) を起動するアクション バーが表示された通常のアクティビティ (A) があります。(B) が終了し、アクティビティ (A) が表示されると、次の図が表示されることがあります。

アクション バーとナビゲーション領域のアーティファクト

アクション バーとナビゲーション領域の視覚的な歪みに注意してください。上記のアーティファクトは、アクティビティとのやり取りやスクロールなどを開始したときにのみ消えます。

フルスクリーン アクティビティ コード:

protected void onCreate(Bundle savedInstanceState) {
    supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

    super.onCreate(savedInstanceState);

    ActionBar supportActionBar = getSupportActionBar();
    supportActionBar.hide();
}
  1. AndroidManifest.xml のヒントは使用されません。
  2. サポート ライブラリが使用されている (appcompat)
  3. Nexus 4、Android 5.0.1で再現

私が持っている唯一のスタイルのカスタマイズ:

 <style name="Theme.MyApp" parent="@style/Theme.AppCompat" tools:ignore="NewApi">
    <!-- Text appearance -->
    <item name="android:textColorLink">@color/linkColor</item>
</style>

それがなぜなのか、誰も手がかりを知っていますか?

4

2 に答える 2

2

Lollipop Nexus デバイスのバグです。回避策として、マニフェスト アクティビティの宣言でハードウェア アクセラレーションを無効にすることができます android:hardwareAccelerated="false"(これにより、グラフィック パフォーマンスが低下します)。

于 2015-04-08T09:39:24.000 に答える
0

私は私のアプリケーションで同じことを得ました。ただし、次のことはそれを修正するようです(私のリストで):

 @Override
protected void onResume() {
    super.onResume();

    findViewById(R.id.root).setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            findViewById(R.id.root).setLayerType(View.LAYER_TYPE_HARDWARE, null);
        }
    }, 500);
}

ご覧のとおり、ハードウェア アクセラレーションをオフにしてから、レイアウトのメイン ルート ビューで再度オンにしようとしています。ビュータイプの変更が機能した理由は実際にはわかりません。これはHA Threadで見つけることができるためです。

注: 現在、ビュー レベルでハードウェア アクセラレーションを有効にすることはできません。ビュー レイヤーには、ハードウェア アクセラレーションを無効にする以外の機能があります。使用方法の詳細については、ビュー レイヤーを参照してください。

于 2015-04-08T11:28:12.803 に答える