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

Blc*_*knx 22 android android-layout android-view android-activity kotlin

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

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

<code>layout/activity_main.xml</code>:</p>

<pre><code><application
    android:allowBackup=Run Code Online (Sandbox Code Playgroud)

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

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

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.blcknx.myapplication.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

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

你的答案

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

azi*_*ian 8

您可以摆脱action_bar_container将活动的主题更改DarkActionBarNoActionBar:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    ...
</style>
Run Code Online (Sandbox Code Playgroud)

然后你会得到以下树:

在此输入图像描述

如果你想要更多并且摆脱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)
    }

这将是视图层次结构树:

在此输入图像描述

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

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


Osc*_*uit 2

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

  • 再次强调,这与 xml 无关。您只需将一个空的 `ConstraintLayout` 放入 xml 中即可。Android 会将所有这些操作栏内容放在其之上。您不会在 xml 中找到此内容。您可以在正在运行的应用程序中找到它。 (2认同)