Android版面未显示所有子版

时间:2017-01-22 19:49:52

标签: android

Hello亲爱的Android程序员

我正坐在我想要显示联系人的应用程序上(实现为framelayouts) 在2xn网格中。

为此我使用ScrollView,其中我放置了一个FrameLayout来保存所有其他FrameLayouts。

我正在使用FrameLayouts,因为我遇到了与LinearLayout相同的问题。

出于测试目的,我将其更改为FrameLayout,现在我自己设置x和y坐标,而不是相信线性布局为我完成工作。

我遇到的问题是它只显示了我的应用程序中的2个FrameLayouts aka联系人,如图所示,尽管所有内容都设置正确,但是x,y coodrdinates,width,height等...... enter image description here

您在此处看到的方法是将联系人创建为包含Imageview和TextView的视图组。

contactsparent是用于保存联系人的framelayout。

public void addContactItem(Person... p)
{
    Display display = main.getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);

    int width=size.x;
    for(Person pers:p)
    {
        String name=pers.name;
        Bitmap photo=pers.photo;
//////////////////////////////////////////////////////////
        FrameLayout lltmp=new FrameLayout(main);
        lltmp.setLayoutParams(new ViewGroup.LayoutParams((int) (0.375 * width), (int) (0.4 * width)));
        lltmp.setBackgroundColor(Color.YELLOW);

//////////////////////////////////////////////////////////
        ImageView imgtmp=new ImageView(main);
        imgtmp.setLayoutParams(new ViewGroup.LayoutParams((int) (0.375 * width), (int) (0.3 * width)));
        imgtmp.setImageBitmap(photo);

//////////////////////////////////////////////////////////
        TextView tvtmp=new TextView(main);
        tvtmp.setLayoutParams(new ViewGroup.LayoutParams((int) (0.375 * width), (int) (0.1 * width)));
        tvtmp.setText(pers.name);
        tvtmp.setBackgroundColor(Color.RED);
        tvtmp.setY((int) (0.3 * width));


        lltmp.setX(contactsparent.getChildCount() % 2 == 0 ? 0 : ((int) (0.375 * width)));
        lltmp.setY(contactsparent.getChildCount() / 2 * (int) (0.4 * width));

        lltmp.addView(imgtmp);
        lltmp.addView(tvtmp);

        contactsparent.addView(lltmp);

        Log.w("fdsfsf", contactsparent.getChildCount() + " x= " + (contactsparent.getChildCount() % 2 == 0 ? 0 : ((int) (0.375 * width))) + " | y=" + contactsparent.getChildCount() / 2 * (int) (0.4 * width));
    }
}

这里出了什么问题?!为什么我的应用程序只显示2个联系人,虽然我知道必须有10个,因为(Person ... p)参数将是10个人的数组,我称之为上述方法。

方法结尾的Log.v给出了这个输出:

01-22 19:29:34.408 820-820/com.jaielsoft.www.emergencyapp W/fdsfsf: 1 x= 405 | y=0
01-22 19:29:34.409 820-820/com.jaielsoft.www.emergencyapp W/fdsfsf: 2 x= 0 | y=432
01-22 19:29:34.410 820-820/com.jaielsoft.www.emergencyapp W/fdsfsf: 3 x= 405 | y=432
01-22 19:29:34.461 820-820/com.jaielsoft.www.emergencyapp W/fdsfsf: 4 x= 0 | y=864
01-22 19:29:34.462 820-820/com.jaielsoft.www.emergencyapp W/fdsfsf: 5 x= 405 | y=864
01-22 19:29:34.463 820-820/com.jaielsoft.www.emergencyapp W/fdsfsf: 6 x= 0 | y=1296
01-22 19:29:34.464 820-820/com.jaielsoft.www.emergencyapp W/fdsfsf: 7 x= 405 | y=1296
01-22 19:29:34.466 820-820/com.jaielsoft.www.emergencyapp W/fdsfsf: 8 x= 0 | y=1728
01-22 19:29:34.467 820-820/com.jaielsoft.www.emergencyapp W/fdsfsf: 9 x= 405 | y=1728
01-22 19:29:34.468 820-820/com.jaielsoft.www.emergencyapp W/fdsfsf: 10 x= 0 | y=2160

更新:

显然有这个问题为什么我看不到Childviews:

enter image description here

那么我是如何实现包含我的联系人的ViewGroups的问题:

    contactlayoutparent=new ScrollView(main);

    contactlayoutparent.setLayoutParams(new ViewGroup.LayoutParams((int) (0.75 * width), (int) (0.725 * height)));
    contactlayoutparent.setX(0.125f * width);
    contactlayoutparent.setY(0.18f * height);
    contactlayoutparent.setBackgroundColor(Color.BLUE);

    contactsparent=new FrameLayout(main);
    contactsparent.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.MATCH_PARENT));

    contactlayoutparent.addView(contactsparent);

EDIT2:

关于xml的问题:没有xml,但在xml中它就像:

FrameLayout{
    ...
    //Here comes the Contacts layout
    ScrollView{
        FrameLayout{
            //Child1
            FrameLayout{
            }
            //Child2
            FrameLayout{
            }
            //Child3
            FrameLayout{
            }
            ...
        }
    }
}

1 个答案:

答案 0 :(得分:0)

问题已解决:如果要显示网格,请不要使用ListView。改为使用GridView:D