2017-04-26 167 views
3

更新:最後找到一點點哈克解決方案。但這是不可接受的。所有想法都可能有用。初始屏幕奇怪的黑色矩形屏幕上

我有一個啓動畫面活動,我不使用setContentView()。 我設置背景從styles.xml使用安卓windowBackground

當閃屏開始,一個黑色矩形不知從何處出現時,位於屏幕左側下部。導航欄的高度與導航欄完全相同,從屏幕左側開始,到屏幕中心結束。

這個黑色矩形只在設備上出現,其中有導航欄。不是物理按鈕。也只有當試圖隱藏或顯示導航欄FullScreen活動時纔可見。

問題:這個錯誤的原因是什麼?我該如何解決它?

您可以在下面看到整個事件。 (初始屏幕登錄屏幕過渡)

這裏我潑活動風格:

<style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
    <item name="android:windowBackground">@drawable/background_splash</item> 
    <item name="windowNoTitle">true</item> 
    <item name="windowActionBar">false</item> 
    <item name="android:windowFullscreen">true</item> 
    <item name="android:windowContentOverlay">@null</item> 
</style> 

background_splash.xml

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    //Tried different colored layer at bottom level but did not affect 
    <item> 
     <shape android:shape="rectangle"> 
      <solid android:color="@color/grey_Dark"/> 
     </shape> 
    </item> 

    //Background image 
    <item 
     android:drawable="@drawable/bg" 
     android:gravity="center"/> 

    //9-patch Logo at the center 
    <item 
     android:drawable="@drawable/splash_logo" 
     android:gravity="center"/> 

</layer-list> 

ActivitySplash

public class ActivitySplash extends BaseActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     final View decorView = getWindow().getDecorView(); 
     decorView.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 
        | View.SYSTEM_UI_FLAG_IMMERSIVE); 


     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       Intent intent = new Intent(ActivitySplash.this, ActivityLogin.class); 
       startActivity(intent); 
       finish(); 
      } 
     }, 2000); 

    } 
} 
+0

您是否檢查過「show layout bounds」這個問題?那其實是一些觀點嗎? – azizbekian

+0

@azizbekian發佈了一個答案,你可以檢查。 –

回答

1

終於找到一點點哈克解決方案。但這是不可接受的。任何想法都可能有用。

首先,使用佈局督察,並得到這樣的結果:

enter image description here

DecorView,有一個奇怪的不必要查看創建啓動飛濺活動後。

它在半秒鐘內閃爍並消失。

閃爍後,如果用戶觸發顯示導航欄的屏幕,該奇怪的視圖再次出現(永久)。

閃爍視圖添加

<item name="android:windowIsTranslucent">true</item> 

我activitty風格後消失。

其他部分比較複雜。 增加了一個OnHierarchyChangeListener DecorView的活動。將我的DecorView轉換爲FrameLayout,並覆蓋onChildViewAdded()回調刪除所有的孩子後添加到DecorView

final FrameLayout myDecorView = (FrameLayout) decorView; 
myDecorView.setOnHierarchyChangeListener(new ViewGroup.OnHierarchyChangeListener() { 
    @Override 
    public void onChildViewAdded(View parent, View child) { 
     myDecorView.removeView(child); 
    } 

    @Override 
    public void onChildViewRemoved(View parent, View child) { 

    } 
});