フルスクリーンアクティビティの不要なルートレイアウトを削除する 質問する

フルスクリーンアクティビティの不要なルートレイアウトを削除する 質問する

フルスクリーン アクティビティの不要なルート レイアウトを削除するにはどうすればよいでしょうか?

シンプルなフルスクリーン アクティビティがあります。レイアウト インスペクターには、Android によって提供されるルート レイアウトの大きな階層が表示されますが、これはフルスクリーンでは必要ありません。

<code>ツール > Android > レイアウト インスペクター</code>

それらを取り除くことはできますか?

  • はいの場合、どのようにですか?
  • いいえの場合、その理由は何ですか?

テストのセットアップ

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生成されたルート テンプレートを表示するには、を呼び出します。

HelloWorldフルスクリーンにするには、レイアウト内の TextView にID を追加して更新するだけです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ルート レイアウトをどの程度削除したかを確認します。スクリーンショットを表示します。コードを表示します。

ベストアンサー1

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が、一部のライブラリではそのようなビューが存在すると想定している可能性があります。

sについてaction_mode_bar_stubは、心配する必要はありません。ViewStubこれらは、ビュー階層に遅延インフレートされるため、全体的なパフォーマンスには影響しません。

おすすめ記事