6

我正在开发一个 Android 应用程序,它使用从 Internet 下载的 Tab Host 图标,图标大小为 30x30。

for(int i = 0; i < titleNames.size(); i++) 
{
    intent = new Intent().setClass(context, Gallery.class);
    sp = tabHost.newTabSpec(titleNames.get(i)).setIndicator(titleNames.get(i), res.getDrawable(R.drawable.icon)).setContent(intent);
    tabHost.addTab(sp);
}

如果我使用上面的代码(来自资源的图标)来设置指示器文本和图标,它工作得很好,并且图标适合选项卡小部件。

for(int i = 0; i < titleNames.size(); i++) 
{
    intent = new Intent().setClass(context, Gallery.class);
    sp = tabHost.newTabSpec(titleNames.get(i)).setIndicator(titleNames.get(i), Drawable.createFromPath(path+iconNames.get(i))).setContent(intent);
    tabHost.addTab(sp);
}

但是如果我使用这个代码(从互联网下载的图像及其在内存中)而不是前一个,图标看起来太小了,甚至两个图标的高度和宽度值都相同。从互联网下载图标时,我不会缩放图标,而是将它们保存为 PNG。任何人都知道问题是什么?

这是带有资源图标的标签主机

这是带有从互联网下载的图标的tabhost

解决方案:

现在我使用下面的代码,而不是使用我以前的代码将对象添加到选项卡主机,它工作得很好。这两者之间的区别是新的一个是使用具有图像视图和文本视图来指示图标和下面的文本来设置意图指示符的布局。因此,通过这种方式,我可以从图像视图调用该方法,以使图像适合其在 xml 文件中定义的边界。这是使用 View 的方法。

    private void addTab(String labelId, Drawable drawable, Class<?> c) {

    tabHost = getTabHost();
    intent = new Intent(this, c);
    spec = tabHost.newTabSpec("tab" + labelId);

    View tabIndicator = LayoutInflater.from(this).inflate(R.layout.tab_indicator, getTabWidget(), false);
    TextView title = (TextView) tabIndicator.findViewById(R.id.title);
    title.setText(labelId);

    ImageView icon = (ImageView) tabIndicator.findViewById(R.id.icon);
    icon.setImageDrawable(drawable);
    icon.setScaleType(ImageView.ScaleType.FIT_CENTER);

    spec.setIndicator(tabIndicator);
    spec.setContent(intent);
    tabHost.addTab(spec);
}

这是带有图像视图和文本视图的布局。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="0dip"
android:layout_height="55dip"    
android:layout_weight="1"
android:orientation="vertical"
android:padding="5dp"
android:weightSum="55" >
<ImageView 
    android:id="@+id/icon"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:src="@drawable/icon"
    android:adjustViewBounds="false"
    android:layout_weight="30"
/>
<TextView 
    android:id="@+id/title"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="25"
    android:gravity="center_horizontal"
/> 
</LinearLayout>

感谢@Venky 和@SpK 给了我一个想法。

4

2 回答 2

11

现在我使用下面的代码,而不是使用我以前的代码将对象添加到选项卡主机,它工作得很好。这两者之间的区别是新的一个是使用具有图像视图和文本视图来指示图标和下面的文本来设置意图指示符的布局。因此,通过这种方式,我可以从图像视图调用该方法,以使图像适合其在 xml 文件中定义的边界。这是使用 View 的方法。

private void addTab(String labelId, Drawable drawable, Class<?> c) {

tabHost = getTabHost();
intent = new Intent(this, c);
spec = tabHost.newTabSpec("tab" + labelId);

View tabIndicator = LayoutInflater.from(this).inflate(R.layout.tab_indicator, getTabWidget(), false);
TextView title = (TextView) tabIndicator.findViewById(R.id.title);
title.setText(labelId);

ImageView icon = (ImageView) tabIndicator.findViewById(R.id.icon);
icon.setImageDrawable(drawable);
icon.setScaleType(ImageView.ScaleType.FIT_CENTER);

spec.setIndicator(tabIndicator);
spec.setContent(intent);
tabHost.addTab(spec);
}

这是带有图像视图和文本视图的布局。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="0dip"
android:layout_height="55dip"    
android:layout_weight="1"
android:orientation="vertical"
android:padding="5dp"
android:weightSum="55" >
<ImageView 
    android:id="@+id/icon"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:src="@drawable/icon"
    android:adjustViewBounds="false"
    android:layout_weight="30"
/>
<TextView 
    android:id="@+id/title"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="25"
    android:gravity="center_horizontal"
/> 
</LinearLayout>

感谢@Venky 和@SpK 给了我一个想法。

于 2012-09-18T07:52:18.657 回答
3

高密度 (hdpi) 屏幕的选项卡图标尺寸:完整资源:48 x 48 像素图标:42 x 42 像素

中等密度 (mdpi) 屏幕的选项卡图标尺寸:完整资源:32 x 32 像素图标:28 x 28 像素

低密度 (ldpi) 屏幕的选项卡图标尺寸:完整资源:24 x 24 像素图标:22 x 22 像素

你可以看到这个:http: //developer.android.com/guide/practices/ui_guidelines/icon_design_tab.html

于 2012-05-17T09:50:33.350 回答