Je travaille dans Android Studio sur un projet, qui a un jeu de quiz avec des images ou un texte comme des options de réponse, en fonction de la question (les deux ne sont que des boutons du fichier XML). Actuellement, ces boutons sont affichés dans 2 colonnes, mais dans le cas où les boutons affichent du texte au lieu d'images, le nombre de colonnes doit être 1 car la taille du bouton doit être plus large pour afficher le texte entier.
dans mon adaptateur Le tinbindviewholder em> Obtient une liste des options de réponse et définit le contenu du bouton en fonction du type d'option (images / texte). Pour certains tests, j'ai créé la sous-classe AutofitrecyClerView em> de recylview pour calculer le nombre de colonnes automatiquement mais cela n'a pas résolu mon problème. À l'intérieur de AutofitrecyClerView em> J'ai défini un centréedgridlayoutManager em>. En outre, j'ai expérimenté la méthode SetSpansizElookUp em> mais cela n'a pas non plus aidé. P> AutofitrecyClerview: strong> P> <?xml version="1.0" encoding="utf-8"?>
<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="match_parent"
tools:context="de.lmu.treeapp.activities.minigames.chooseAnswer.GameActivity_ChooseAnswer">
<TextView
android:id="@+id/game_description"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="25dp"
android:layout_marginEnd="20dp"
android:layout_marginBottom="20dp"
android:text="@string/game_description_placeholder"
app:layout_constraintTop_toTopOf="@+id/guideline_top"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintVertical_bias="0.04" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.02" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.98" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_top"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.02" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_mid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.3" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_bot"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.98" />
<de.lmu.treeapp.activities.minigames.chooseAnswer.AutofitRecyclerView
android:id="@+id/auto_fit_recycler_view"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="10dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="10dp"
android:layout_marginBottom="20dp"
android:clipToPadding="false"
android:columnWidth="150dp"
android:numColumns="auto_fit"
app:layout_constraintBottom_toBottomOf="@id/guideline_bot"
app:layout_constraintEnd_toEndOf="@id/guideline_right"
app:layout_constraintStart_toStartOf="@id/guideline_left"
app:layout_constraintTop_toBottomOf="@+id/guideline_mid" />
</androidx.constraintlayout.widget.ConstraintLayout>
3 Réponses :
Vous pouvez utiliser un framelayout et mettre les deux boutons dedans et faire disparaître les deux boutons. Un Framelayout n'ayerait qu'une seule vue unique, donc si la réponse est un texte, vous ne pouvez rendre que le bouton de texte visible sinon, vous rendez l'image -Button visible. P>
Ok, j'ai maintenant changé la mise en page à Framelayout, mais il reste toujours le problème que les deux images et le texte sont présentés dans deux colonnes au lieu de différencier les autres. Dans le Onbindviewholder i> de mon adaptateur, je fais une distinction de cas et définir le bouton correspondant visible. Existe-t-il une option pour clarifier le nombre de colonnes à ce point ou ailleurs? - Merci pour ton aide.
J'ai mis le code de la mise en page ci-dessous. Les colums sont maintenant calculés dans la catégorie autofitrecyclerview i> où un GridlayoutManager i> est utilisé pour configurer le recyclerview i>.
a finalement trouvé un moyen de déterminer le numéro de colonne. Dans ma classe d'adaptateur, j'ai écrit une méthode qui obtient une liste des options de réponse actuelles et renvoie true si le type est Image em>. Dans la classe autofitrecyclerview em>, j'ai remplacé la méthode OnMeasure em> avec le code suivant afin de définir le Spanount em> vers 1 ou 2: @Override
protected void onMeasure(int widthSpec, int heightSpec) {
super.onMeasure(widthSpec, heightSpec);
if (columnWidth > 0) {
int spanCount;
if(RecyclerViewAdapter.isImage(RecyclerViewAdapter.options)){
spanCount = 2;
} else spanCount = 1;
manager.setSpanCount(spanCount);
}
}
La visibilité des deux boutons est définie sur parti em> et sera modifiée dans le code à Runtime. p> p>