2017-04-26 184 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) { 

    } 
});