Android enfant de voir la hauteur correspond pas parent de l'élément ListView
Comme décrit, mon élément de la Liste est un FrameLayout
, il y a deux points de vue à l'intérieur.
ColorView
est une vue personnalisée que j'ai fait pour montrer la couleur dans l'ensemble de la vue.
(FrameLayout
hauteur est "wrap_content")
Il semble bien fonctionner sur mon dispositif ICS, mais ne fonctionne pas sur mon Android 2.2 émulateur Android 1.6 G1.
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<org.mariotaku.twidere.view.ColorView
android:id="@+id/status_background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:background="@drawable/ic_label_user"/>
<RelativeLayout
android:id="@+id/status_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="6dp"
android:paddingRight="6dp"
android:paddingTop="6dp">
<org.mariotaku.twidere.view.RoundCorneredImageView
android:id="@+id/profile_image"
android:layout_width="@dimen/profile_image_size"
android:layout_height="@dimen/profile_image_size"
android:layout_marginLeft="6dp"
android:scaleType="fitCenter"/>
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignWithParentIfMissing="true"
android:layout_marginLeft="6dp"
android:layout_toLeftOf="@+id/time"
android:layout_toRightOf="@+id/profile_image"
android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?android:attr/textColorPrimary"
android:textStyle="bold"/>
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/name"
android:layout_alignParentRight="true"
android:layout_alignWithParentIfMissing="true"
android:layout_below="@+id/name"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?android:attr/textColorSecondary"/>
<TextView
android:id="@+id/time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/name"
android:layout_alignParentRight="true"
android:layout_alignWithParentIfMissing="true"
android:drawablePadding="3dp"
android:gravity="center_vertical|right"
android:textColor="?android:attr/textColorSecondary"/>
<ImageView
android:id="@+id/image_preview"
android:layout_width="@dimen/preview_image_size"
android:layout_height="@dimen/preview_image_size"
android:layout_alignWithParentIfMissing="true"
android:layout_below="@+id/text"
android:layout_marginLeft="16dp"
android:layout_marginTop="3dp"
android:layout_toRightOf="@+id/profile_image"
android:background="@drawable/image_preview_background"
android:drawablePadding="3dp"
android:scaleType="fitCenter"
android:visibility="gone"/>
<TextView
android:id="@+id/reply_retweet_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignWithParentIfMissing="true"
android:layout_below="@+id/image_preview"
android:layout_toRightOf="@+id/profile_image"
android:drawablePadding="3dp"
android:paddingLeft="6dp"
android:paddingTop="3dp"
android:textColor="?android:attr/textColorSecondary"/>
</RelativeLayout>
<TextView
android:id="@+id/list_gap_text"
android:layout_width="wrap_content"
android:layout_height="48dp"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/tap_to_load_more"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textStyle="bold"
android:visibility="gone"/>
</FrameLayout>
n'y a aucune solution de contournement ou d'autres façon de résoudre ce problème?
MODIFIER
code pour ColorView
package org.mariotaku.twidere.view;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.View;
public class ColorView extends View {
private int mColor = Color.TRANSPARENT;
public ColorView(Context context) {
this(context, null);
}
public ColorView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public ColorView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void setColor(int color) {
mColor = color;
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(mColor);
}
}
Upvote pour vous aider à obtenir de l'attention.
Pouvez-vous ajouter le code pour
ajoutée, c'est très simple.
Et dont l'une des vues de disposition est la bande sur la gauche?
un fond de
Pouvez-vous ajouter le code pour
ColorView
?ajoutée, c'est très simple.
Et dont l'une des vues de disposition est la bande sur la gauche?
un fond de
ColorView
, un 9patch drawable. !IMGOriginalL'auteur mariotaku | 2012-08-31
Vous devez vous connecter pour publier un commentaire.
Nous avons juste eu à faire face à un problème similaire. Nous avons remarqué que l'utilisation de match_height sur une vue qui fait partie d'un élément de liste ne fonctionnera pas comme prévu. Le code suivant devrait fonctionner:
Le truc, c'est essentiellement à harmoniser la couleur de la vue en haut et en bas de l'affichage du contenu. Quelle que soit la hauteur du contenu, il sera adopté par la couleur de la vue.
Sur une note de côté, comme indiqué dans le Android documentation, vous ne devriez pas utiliser un FrameLayout pour contenir plus d'un enfant.
MODIFIER
Mon collègue m'a fait remarquer que si nous utilisons un LinearLayout comme l'élément racine de la liste élément, match_parent fonctionne comme prévu:
J'ai testé cela sur un appareil avec Android 2.2 et il a fonctionné correctement.
OriginalL'auteur argenkiwi
si triste, personne ne sait comment faire face à cela.
mais finalement, j'ai utilisé une solution de contournement pour résoudre ce problème.
nouvelle mise en page XML:
code pour
ColorLabelRelativeLayout
:il fonctionne vraiment bien pour moi.
OriginalL'auteur mariotaku
Est l'obligation d'utiliser le
ColorView
? Je demande cela parce que si vous ne l'utilisez pas pour quoi que ce soit d'autre, c'est juste un gaspillage de l'utiliser. Vous avez le parentFrameLayout
et vous devez définir le drawable utilisé sur laColorView
comme arrière-plan pour le parentFrameLayout
.ColorView
n'est pas seulement utilisé pour le fond, mais aussi de la couleur de l'étiquette.Multi en mode de sélection de sens qu'(menu contextuel de la barre d'action)? N'est-ce pas plus simple de changer l'arrière-plan sur la
Framelayout
en fonction de la situation actuelle?pour la compatibilité ascendante j'ai utilisé des solutions de contournement i.imgur.com/F4X9t.png cela fonctionne sur Android 1.6, en changeant
FrameLayout
arrière-plan. vous pouvez voir le code source ici. github.com/mariotaku/twidereLe code de base est de gros pour moi de chercher et de trouver le problème. Vous devriez réviser le code de la ligne de la liste, j'ai le sentiment que vous compliqué la logique. Également 1.6 représente environ 0,5% des téléphones android là-bas, vous pourriez tomber 1.6 et passer à Eclair(si cela vous forçant à utiliser divers "hacks").
OriginalL'auteur Luksprog
Créer une Mise en page personnalisée s'étend FrameLayout, ou d'autres modèles que ce soit, puis remplacer le onLayout méthode.
OriginalL'auteur tuoxie007
Une mise à jour de @softlete réponse:
La "hauteur Minimale" est donné par les marges(haut+bas) de
@+id/imageContainer
plus +hauteur de@+id/image
(vous pouvez utiliser n'importe quel affichage/mise en page que vous voulez)OriginalL'auteur pkarc