Je construis customView étendant LinearLayout et ayant simple 3 enfants (2 TextView et ImageView). Je crée dynamiquement cette vue dans le code et l'ajoute au parent LinearLayout. Cette vue a un fond, donc je peux facilement repérer sur l'écran, qu'il est correctement gonflé à sa place, mais aucun enfant n'est visible. J'ai vérifié LayoutInspector et il montre que tout est paramétré correctement (valeurs de texte à TextViews et image pour ImageView), mais en quelque sorte lorsque je tente de les localiser sur inspecteur ils sont présentés comme petit point sur mon CustomView:Personnalisé LinearLayout - childs non visible
Mon CustomView s'appelle DayTileView et est carré avec un fond gris. Comme vous pouvez le voir sur l'inspecteur à gauche, les enfants sont remplis de contenu. Mise en page de vue:
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<merge>
<TextView
android:id="@+id/day"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:textColor="@android:color/white"
/>
<TextView
android:id="@+id/dayName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:textColor="@android:color/white"
/>
<ImageView
android:id="@+id/padlock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/ic_padlock"
/>
</merge>
</layout>
Et son code:
public class DayTileView extends LinearLayout {
private DayTileBinding mBinding;
public DayTileView(Context context) {
super(context);
init();
}
public DayTileView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}
public DayTileView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
mBinding = DataBindingUtil.inflate(LayoutInflater.from(getContext()), R.layout.day_tile, this, true);
setOrientation(VERTICAL);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
final int width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec);
setMeasuredDimension(width, width);
}
public void setDay(int day, int month, int year) {
DateTime settedDay = new DateTime().withYear(year).withMonthOfYear(month).withDayOfMonth(day);
mBinding.day.setText(String.valueOf(day));
String dayName = settedDay.dayOfWeek().getAsText();
mBinding.dayName.setText(dayName);
boolean isWeekend = settedDay.dayOfWeek().get() == 6 || settedDay.dayOfWeek().get() == 7;
setBackgroundColor(ContextCompat.getColor(getContext(), isWeekend ? R.color.weekend_bg : R.color.weekday_bg));
}
}
Son utilisation dans un autre CustomView qui est aussi LinearLayout mais l'orientation wiht horizontale (PlannedDayView sur l'inspecteur):
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<merge>
<*.customViews.DayTileView
android:id="@+id/dayTile"
android:layout_width="0dp"
android:layout_weight="0.2"
android:layout_height="wrap_content"/>
<LinearLayout
android:id="@+id/container"
android:orientation="vertical"
android:layout_weight="1.2"
android:layout_width="0dp"
android:layout_height="wrap_content"/>
</merge>
</layout>
Quelqu'un a-t-il une idée de ce qui pourrait se passer (enfants hors de vue)? Lorsque je remplace la fusion pour LinearLayout avec l'orientation verticale et le même arrière-plan tout en mode Conception de la mise en page est visible correctement, donc cela devrait fonctionner.
EDIT: J'ai découvert, que si je définis pendant View Initalization Padding Top à 10px alors le point descend. Donc, il semble que pour certaines raisons Android n'a pas fait pour gonfler correctement TextViews et ImageView
Essayez de supprimer
mmmatey
J'ai déplacé des déclarations d'espace de noms à fusionner, mais cela n'aide pas.Je ne peux pas supprimer la balise de mise en page, parce que je n'aurais aucune liaison.Tous mes customViews sont faites de cette manière et ils sont travail. Seulement celui-ci est désordonné – masztalski
Ok, qu'en est-il des poids, si vous essayez différents poids dans DayTileView. – mmmatey