我构建自定义视图扩展LinearLayout和简单3儿童(2 TextView和ImageView)。我在代码中动态创建这个视图并将其添加到父LinearLayout。这个视图有背景,所以我可以很容易地在屏幕上看到它在它的位置正确膨胀,但是任何一个孩子都不可见。我检查LayoutInspector它表明,一切都正确设置好的(文本值TextViews和图片ImageView的),但不知何故,当我试图找到他们在检查它们显示为小点了我的customView:自定义LinearLayout - 孩子不可见
我的CustomView被称为DayTileView,这是灰色背景的正方形。正如你在左边的检查员看到的,孩子们充满了内容。查看的布局:
<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>
而其代码:
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));
}
}
它在另一个CustomView这也是使用的LinearLayout,但室内用水平方向(PlannedDayView上检查员):
<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>
有没有人有任何想法什么可能会造成这种情况(孩子的视线)?当我将LinearLayout的合并替换为垂直方向和相同背景时,布局的设计模式中的所有内容都可以正确显示,因此它应该可以正常工作。
编辑: 我发现,如果我在查看initalization Padding Top期间设置为10px,则点正在向下移动。所以它看起来像Android没有正确膨胀TextViews和ImageView
尝试删除<布局标签 “的xmlns:机器人=” HTTP://模式.android.com/apk/res/android“ xmlns:app =”http://schemas.android.com/apk/res-auto“并将这两个属性移动到”
mmmatey
我移动了命名空间声明来合并,但它没有帮助。我无法删除布局标记,因为我不会得到任何绑定。我所有的customView都是以这种方式创建的,它们是加工。只有这个很混乱 – masztalski
好的,如果你在DayTileView中尝试不同的权重,那么权重呢? – mmmatey