Android tabHost和tabWidget图标问题

时间:2012-05-17 07:34:34

标签: android tabs icons android-tabhost

我正在使用Android应用程序,该应用程序使用从互联网下载的标签主机图标,图标大小为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。任何人都知道问题是什么?

Here is the tabhost with icons from resources

Here is the tabhost with icons downloaded from internet

SOLUTION:

现在我使用下面的代码,而不是使用我之前的代码向对象主机添加对象,而且它运行良好。这两者之间的区别是新的一个是使用一个布局,其中有图像视图和文本视图来指示图标和下面的文本来设置意图的指示。因此,通过这种方式,我可以从图像视图调用方法,使图像适合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给我一个想法。

2 个答案:

答案 0 :(得分: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给我一个想法。

答案 1 :(得分:3)

高密度(hdpi)屏幕的标签图标尺寸: 全部资产:48 x 48像素 图标:42 x 42 px

中密度(mdpi)屏幕的标签图标尺寸: 完整资产:32 x 32 px 图标:28 x 28 px

低密度(ldpi)屏幕的标签图标尺寸: 完整资产:24 x 24像素 图标:22 x 22 px

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