J'ai une simple activité en plein écran. L'inspecteur de structure affiche une grande hiérarchie de structures racine fournies par Android, dont je n'ai pas besoin en plein écran.
Ouvrez Android Studio. Créez un nouveau projet. Acceptez les paramètres par défaut. Choisissez "Activité vide". Vous obtenez ce manifeste:
<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>
Vous obtenez ce 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>
Appelez Tools > Android > Layout Inspector
pour voir les modèles racine générés.
Pour le rendre en plein écran, ajoutez simplement un identifiant HelloWorld
à TextView dans la présentation et mettez à jour 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
);
}
}
Les drapeaux cachent la navigation, mais ils ne suppriment pas les présentations inutilisées.
Utilisez un simple TextView. Afficher en plein écran. Vérifiez par Tools > Android > Layout Inspector
à quelle distance vous avez supprimé les mises en page racine. Montrer une capture d'écran. Montrez votre code.
Vous pouvez vous débarrasser de action_bar_container
après avoir changé le thème de votre activité de DarkActionBar
à NoActionBar
:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
</style>
Ensuite, vous aurez l'arbre suivant:
Si vous voulez aller encore plus loin et vous débarrasser de ContentFrameLayout
, vous pouvez le faire:
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)
}
Ce sera l'arbre de la hiérarchie des vues:
Vous ne savez pas si vous devez supprimer la vue Android.R.id.content
; peut-être que certaines bibliothèques supposent qu'il devrait exister une telle vue.
En ce qui concerne action_mode_bar_stub
s: vous ne devez pas vous en préoccuper, dans la mesure où il s'agit de ViewStub
s, qui n'affectent pas les performances globales, car ils sont gonflés paresseusement dans la hiérarchie des vues.
Oui, vous recherchez probablement ConstraintLayout . C'est semblable à un RelativeLayout
, mais avec plus de possibilités et plus facile à utiliser. Comme vous pouvez positionner des vues partout dans la variable ConstraintLayout
, vous pouvez vous débarrasser de toutes ces dispositions inutiles et ainsi aplanir la hiérarchie.
Code d'activité
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"?>
<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>
styles.xml
<style name="AppTheme2" parent="@Android:style/Theme"/>
AndroidManifest.xml
<activity Android:name=".ThirdActivity" Android:theme="@style/AppTheme2">
S'il vous plaît ne vous dérange pas l'indentation.
Merci,
Oui, vous POUVEZ vous en débarrasser
Il s'agit d'un exemple généré, comme je peux le constater, et comme je le sais, l'activité de base est d'abord générée, puis les paramètres plein écran sont ajoutés. Vous pouvez supprimer tout ce dont vous n’avez pas besoin dans n’importe quel fichier xml. Cependant, vous devriez garder les bases:
<?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>
Il y a mon fichier racine et ça marche:
<?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>