我正在尝试创建一个允许用户存储和保存联系人的应用。它可以保存,但列出有问题。
我有一个贯穿数据库的for循环,并为每个联系人(每行)打印一组数据,一个图像(实际上是一个字符串,因为它通过了路径)和一个字符串。它将它们打印在一个滚动视图中,每个联系人都有一个线性布局(每个联系人都有自己的线性布局,这样我可以让一个联系人各占一行)。然而,图像出来了,文本观点无处可寻。
使用log.d(textview.getText());它确认文本视图已创建并占用空间。 http://chesnutcase.heliohost.org/derpbox/itv1.png 两个"联系人"有名字,没有打印出来。中间的空间是由textview预先决定的。 http://chesnutcase.heliohost.org/derpbox/itv2.png 另外两个"联系人",但没有名字。彼此之间没有空间。或者至少是一个明显更小的空间。 代码:
DatabaseHandler db = new DatabaseHandler(this);
int a = (int) (long) db.countRows();
LinearLayout theLayout = (LinearLayout)findViewById(R.id.contactsList);
for(int i = 0;i<a;i++){
ImageButton image = new ImageButton(this);
int density=getResources().getDisplayMetrics().densityDpi;
LinearLayout.LayoutParams vp = new LinearLayout.LayoutParams(density,density, 0.5f);
image.setLayoutParams(vp);
image.setScaleType(ImageView.ScaleType.FIT_END);
int b = a - i;
try {
image.setImageBitmap(decodeUri(Uri.parse(db.getContactData("photo_path")[i])));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
theLayout.addView(image);
TextView tv = new TextView(this);
tv.setText(db.getContactData("name")[i]);
Log.d("UserLog","name is " + db.getContactData("name")[i]);
Log.d("UserLog","textfield contains " + tv.getText());
LinearLayout.LayoutParams vp2 = new LinearLayout.LayoutParams(0,0,1f);
tv.setLayoutParams(vp2);
tv.setBackgroundColor(Color.RED);
theLayout.addView(tv);
}
任何解决方案?提前致谢
答案 0 :(得分:2)
仔细检查您应用于联系人列表的LinearLayout
的方向。
您将LayoutParams
设置为错误TextView
。你的TextView
0px乘以0px,权重为1。
LinearLayout.LayoutParams vp2 = new LinearLayout.LayoutParams(0,0,1f);
tv.setLayoutParams(vp2);
尝试使用MATCH_PARENT
或WRAP_CONTENT
常量之一。它们列在此处:http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html#MATCH_PARENT
如果您希望TextView
占据屏幕的剩余宽度,我会将权重保留为1,宽度为0,但您需要将高度设置为常量,如WRAP_CONTENT
您还要将ImageView
的大小设置为设备屏幕密度(这是一个常量),而不是根据屏幕密度设置缩放大小。
答案 1 :(得分:1)
您可能需要调用 requestLayout(); 才能更新当前的视图布局。
theLayout.requestLayout();
此外,您似乎正在使用该布局参数创建一个宽度为0且高度为0的视图:
LinearLayout.LayoutParams vp2 = new LinearLayout.LayoutParams(0,0,1f);
答案 2 :(得分:0)
答案 3 :(得分:0)
我建议使用CursorAdapter
和布局xml文件,这样您就可以将其设计为完全符合您的要求并进行预览。这比设置所有那些繁琐LayoutParams
如果您必须动态创建它们,您可能会发现文本颜色与背景相同,请尝试将其设置为可见的亮红色以进行测试。如果您仍然没有看到文本,那么它的可见性可能不会设置为View.VISIBLE
,最终布局可能不是正确的大小,为此设置一个方便的提示将背景设置为适当引人注目的颜色,即使没有文字你也应该看到阴影块。