将视图添加到ViewGroup后,视图将不可见

时间:2016-07-28 09:11:55

标签: java android view viewgroup

我以编程方式将视图添加到FrameLayout

public class PixelGridView extends FrameLayout {
...
     public void addViewWithoutCoords(TableView view, int column, int row) {
            float x = column * mCellSideSize;
            float y = row * mCellSideSize;

            FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                        ViewGroup.LayoutParams.WRAP_CONTENT);
                view.setLayoutParams(lp);

            view.setLeft(0);
            view.setTop(0);

            view.setX(x);
            view.setY(y);
            view.setVisibility(VISIBLE);
            addView(view);
        }
...
}

但是,它们都是隐形的。 getChildCount()会返回所有这些值的计数。每个添加的视图的getVisibility()也会返回VISIBLE

我可以将这些视图从另一个ViewGroup拖放到我的Framelayout中,当我这样做时,所有之前添加的视图都会显示。

view布局文件:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">
    <ImageView
        android:id="@+id/ivTable"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"/>
    <EditText
        android:id="@+id/ivTableName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:background="@color/style_table_grey"
        android:textColor="@android:color/white"/>
</RelativeLayout>

即使我在没有拖动的情况下添加新视图,一切都会变得可见。

2 个答案:

答案 0 :(得分:1)

FrameLayoutRelativeLayout的项目视图可能重叠。如果两个项目视图位于FrameLayout的相同位置,则第一个加载的项目将被后一项目覆盖。

答案 1 :(得分:0)

尝试启用Android设备的开发者选项中的show layout bounds,然后找到商品的位置。