0
votes

Pourquoi est-ce qu'un seul fragment prend l'écran entier d'une activité avec d'autres points de vue que la mise en page usesSonstraint?

Il y a deux framaries dans mon activité principale qui sera remplacée par deux fragments pendant le temps d'exécution. J'utilise la mise en page de contrainte pour les aligner. Un fragment particulier qui occupe une frente d'identité avec ID Crotfragment remplace l'écran entier et ne donne aucun endroit à d'autres framayoutes.

Lorsque j'affiche individuellement les fragments avec leurs fragments, la vue est exactement comme prévu.

Activity_main.xml xxx

J'ai essayé différent alignements pour eux sans chance. Je veux utiliser la mise en page de contrainte en particulier. Toute aide est appréciée. Merci.


2 commentaires

Essayez de modifier les deux Framelayout Tags aux contraintes correspondant, Android: Layout_width = "0DP" et android: layout_height = "0DP"


Merci pour la réponse mais cela n'a pas résolu le problème.


6 Réponses :


0
votes

Essayez ce XML:

<androidx.constraintlayout.widget.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="wrap_content">


<FrameLayout
    android:id="@+id/allnotesfragment"
    android:layout_width="395dp"
    android:layout_height="327dp"
    android:layout_marginStart="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginRight="8dp"
    app:layout_constraintBottom_toTopOf="@+id/view"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"></FrameLayout>

<view
    android:id="@+id/view"
    class="android.widget.Button"
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:layout_marginStart="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginBottom="8dp"
    android:background="@android:color/darker_gray"
    app:layout_constraintBottom_toTopOf="@id/recentsfragment"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/allnotesfragment" />

<FrameLayout
    android:id="@+id/recentsfragment"
    android:layout_width="395dp"
    android:layout_height="325dp"
    android:layout_marginStart="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginBottom="8dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/view"></FrameLayout>


4 commentaires

ça ne marche pas aussi. L'autre fragment gonfle l'écran entier


Pouvez-vous envisager d'utiliser une autre mise en page telle que linearlayout, si oui, j'ai un XML pour que vous puissiez essayer.


J'ai ajouté une mise en page linéaire et quand j'essaie d'initialiser le deuxième fragment de l'activité principale, je reçois une erreur "Aucune vue trouvée pour ID .... pour fragment".


D'accord, voici @override protégé Void Oncreate (Bundle SavedInstanCetate) {Super.Oncreate (SavedInstancestate); setContentView (r.layout.activity_main); Recentfragment recentfragment = nouveau recentfragment (); Blankfragment Blankfragment = Nouveaufragment blanc (); fragmentmanager = getupportfragmentManager (); fragmentanager.begintransaction (). Ajouter (r.id.recentsfragment, recentfragment) .com mit (); fragmentanager.begintransaction (). Ajouter (R.Id.Allnotesfragment, Blankfragment) .commez-le ();



0
votes

Essayez cette mise en page linéaire: xxx

ajoutez ces trois méthodes à votre classe d'activité: xxx

et aussi ce code dans l'Oncreate : xxx


2 commentaires

Cela n'a pas résolu le problème .now La nouvelle erreur apparaît. ** "Aucune vue trouvée pour ID 0X7F070044 (COM.Example.diary: ID / ALLNOTESFRAGMAGEMENT) pour fragmenterfragment" **


OK Essayez d'éditer votre question, puis joignez la capture d'écran de l'erreur ou incluez le code tel qu'il est dans la question car les deux méthodes fonctionnent bien ici, je pense que le problème est ailleurs dans le code.



1
votes

Vérifiez votre contrainte. Contrainte supérieure et inférieure que vous donnez mal. Essayez ci-dessous.

 Entrez la description de l'image ici xxx


1 commentaires

Superbe réponse, tu as mon upvote. Vérifiez ma réponse ci-dessous, je crois que c'est plus simple. De plus, il peut changer la hauteur (sensible à toutes les tailles d'écran) des deux dispositions de trame en quelques secondes. Peut-être que vous pouvez apprendre quelque chose de nouveau forme ma réponse. Et chaque fois que vous apprenez quelque chose de nouveau, vous devenez un meilleur développeur



0
votes

Il vous suffit de changer vos deux Framelayout comme 0dp comme android: layout_height = "0DP" . .


0 commentaires

1
votes

Vous pouvez utiliser app: layout_constraintheheight_percent = ". 5" pour vos deux Framelayouts et obtenez 2 vues qui prennent la moitié de la taille de l'écran sans avoir même besoin d'OYUR Voir dans le XML - comme ceci: xxx

Il ressemblera à ceci:

 Entrez la description de l'image ici


0 commentaires

0
votes

Le problème n'est pas vraiment à cause des mises en page, mais parce que dans l'un des fragments au-dessus, j'ai utilisé des données de liaison de données de manière inappropriée et qui occupait tout l'écran de l'application ne laissant aucun espace pour un autre fragment. Merci


0 commentaires