现在我正在开发一个启动器应用程序,我在其中创建了一个GridView
,它从设备中获取所有已安装的应用程序。但是只有应用程序图标,没有应用程序名称。我想在其下方放置应用名称,因此我尝试将TextView
放在我的应用图标ImageView
下方,但我的应用崩溃了。任何想法我该如何解决?这是我的代码:非常感谢你!
public View getView(int position, View convertView, ViewGroup parent) {
ImageView i;
if (convertView == null) {
i = new ImageView(Apps.this);
i.setScaleType(ImageView.ScaleType.FIT_CENTER);
i.setLayoutParams(new GridView.LayoutParams(93, 93));
i.setPadding(15, 15, 15, 15);
} else {
i = (ImageView) convertView;
}
ResolveInfo info = mApps.get(position);
i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));
return i;
}
答案 0 :(得分:1)
使用view
而不是构建包含TextView
和ImageView
的{{1}}。您只需实施一个CompoundDrawable
并使用所需图标设置TextView
。这将完成这项工作。
来自XML文件
DrawableTop
或者您可以使用以下方式以编程方式执行此操作:
<TextView
android:id="@+id/my_textview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableTop="@drawable/my_icon"
android:gravity="center"
/>
答案 1 :(得分:1)
只需使用TextView作为图像容器,使用复合drawable :http://developer.android.com/reference/android/widget/TextView.html#setCompoundDrawablesWithIntrinsicBounds(int,%20int,%20int,%20int)
因此,您将1 View to replace 2 ones
设置为 UI简化和性能改进,作为副作用。
一个小例子:
public View getView(int position, View convertView, ViewGroup parent) {
TextView t;
if (convertView == null) {
t = new TextView(Apps.this);
t.setLayoutParams(new GridView.LayoutParams(93, 93));
t.setPadding(15, 15, 15, 15);
ResolveInfo info = mApps.get(position);
Drawable drw = info.activityInfo.loadIcon(getPackageManager());
t.setCompoundDrawablesWithIntrinsicBounds(null, drw, null, null);
//t.setText("Some Text");
t.setText(info.activityInfo.loadLabel(getPackageManager()).toString());
} else {
t = (TextView) convertView;
}
return t;
}
<强> [编辑] 强>
返回视图(t,TextView)后,您可以使用getCompoundDrawables()
获取可绘制内容:http://developer.android.com/reference/android/widget/TextView.html#getCompoundDrawables()