摆脱全屏活动的不必要的根布局

如何摆脱全屏活动的不必要的根布局?

我有一个简单的全屏活动。 布局检查器显示Android提供的大型根布局层次结构,我不需要全屏显示。

<img src="http://img.androidcookie.com/android/WW2Ob.png" alt="工具> Android>布局检查器“>

我可以摆脱它们吗?

  • 如果是,怎么样?
  • 如果不是,为什么不呢?

测试设置

打开Android Studio。 创建一个新项目。 接受默认设置。 选择“空活动”。 你得到这个清单:

        

你得到这个layout/activity_main.xml

     

调用Tools > Android > Layout Inspector以查看生成的根模板。

要使其全屏,只需在布局中向TextView添加一个id HelloWorld并更新MainActivity.java

 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView layout = findViewById(R.id.HelloWorld); layout.setSystemUiVisibility( View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION ); } } 

标志正在隐藏导航,但它们不会删除未使用的布局。

你的答案

使用简单的TextView。 全屏显示。 通过Tools > Android > Layout Inspector您删除根布局的距离。 显示截图。 显示你的代码。

您可以摆脱action_bar_container活动主题从DarkActionBarNoActionBar

  

然后你会得到以下树:

在此处输入图像描述

如果你想要更多并且摆脱ContentFrameLayout ,那么你可以这样做:

override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val contentView = findViewById(android.R.id.content) val parent = contentView.parent as ViewGroup parent.removeView(contentView) LayoutInflater.from(this).inflate(R.layout.activity_main, parent) }
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val contentView = findViewById(android.R.id.content) val parent = contentView.parent as ViewGroup parent.removeView(contentView) LayoutInflater.from(this).inflate(R.layout.activity_main, parent) } 

这将是视图层次结构树:

在此处输入图像描述

不确定是否应该删除android.R.id.content视图,也许有些库假设应该存在这样的视图。

至于action_mode_bar_stub s:你不应该关心它们,只要它们是ViewStub ,它们不会影响整体性能,因为它们会被懒惰地膨胀到视图层次结构中。

是的,您可能正在寻找ConstraintLayout 。 它与RelativeLayout类似,但具有更多可能性且更易于使用。 因为您可以在ConstraintLayout任何位置放置视图,所以可以摆脱所有不必要的布局,从而使层次结构变得平坦。

布局检查器

活动代码

 import android.app.Activity; import android.os.Bundle; import android.support.annotation.Nullable; import android.view.Window; import android.view.WindowManager; public class ThirdActivity extends Activity { @Override public void onCreate(@Nullable Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); super.onCreate(savedInstanceState); setContentView(R.layout.activity_third); } } 

R.layout.third_activity

 < ?xml version="1.0" encoding="utf-8"?>   

styles.xml

  

AndroidManifest.xml中

  

请不要介意缩进。

谢谢,

是的,你可以摆脱它们
正如我所知,它是生成的样本,据我所知,首先生成基本活动,然后添加全屏设置。 您可以删除任何xml文件中不需要的所有内容。 虽然,你应该保持基础:

  < ?xml version="1.0" encoding="utf-8"?>    

有我的根文件,它的工作原理:

  < ?xml version="1.0" encoding="utf-8"?>