Hello亲爱的Android程序员
我正坐在我想要显示联系人的应用程序上(实现为framelayouts) 在2xn网格中。
为此我使用ScrollView,其中我放置了一个FrameLayout来保存所有其他FrameLayouts。
我正在使用FrameLayouts,因为我遇到了与LinearLayout相同的问题。
出于测试目的,我将其更改为FrameLayout,现在我自己设置x和y坐标,而不是相信线性布局为我完成工作。
我遇到的问题是它只显示了我的应用程序中的2个FrameLayouts aka联系人,如图所示,尽管所有内容都设置正确,但是x,y coodrdinates,width,height等......
您在此处看到的方法是将联系人创建为包含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:
那么我是如何实现包含我的联系人的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{
}
...
}
}
}
答案 0 :(得分:0)
问题已解决:如果要显示网格,请不要使用ListView。改为使用GridView:D