我有一个简单的全屏活动。布局检查器显示Android提供的大型根布局层次结构,我不需要全屏显示。
打开Android Studio。创建一个新项目。接受默认设置。选择"清空活动"。你得到这个清单:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
你得到这个layout/activity_main.xml
:
<?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>
调用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
检查您删除根布局的距离。显示截图。显示你的代码。
答案 0 :(得分:8)
您可以摆脱action_bar_container
已将您的活动主题从DarkActionBar
更改为NoActionBar
:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
</style>
然后你会得到以下树:
如果你想要更多并且摆脱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_stub
:您不应该关注它们,只要它们是ViewStub
,它们不会影响整体性能,因为它们会被懒惰地膨胀到视图层次结构中。
答案 1 :(得分:2)
是的,您可能正在寻找ConstraintLayout。它类似于RelativeLayout
,但具有更多可能性且更易于使用。因为您可以在ConstraintLayout
中的任何位置定位视图,所以您可以摆脱所有不必要的布局,从而使层次结构变得平坦。
答案 2 :(得分:2)
活动代码
return
R.layout.third_activity
exit
styles.xml
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);
}
}
的AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".ThirdActivity"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Hello World"
android:gravity="center">
</TextView>
请不要介意缩进。
谢谢,
答案 3 :(得分:0)
是的,你可以摆脱它们
正如我所知,它是生成的样本,据我所知,首先生成基本活动,然后添加全屏设置。您可以删除任何xml文件中不需要的所有内容。虽然,你应该保持基础:
<?xml version="1.0" encoding="utf-8"?>
<YOUR_ROOT_LAYOUT
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="YOUR.COMPANY.DOMAIN.MainActivity">
<YOUR_VIEW
android:id="@+id/SOME_UNIQUE_ID"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</YOUR_ROOT_LAYOUT>
我的根文件有效:
<?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:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:fitsSystemWindows="true"
tools:context="tv.kenar.kenarapp.MainActivity">
<android.support.v4.view.ViewPager
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.constraint.ConstraintLayout>