如果minSdkVersion> 10,为什么WidgetTab中的图像不显示?

时间:2012-05-25 01:47:37

标签: android android-3.0-honeycomb android-tabhost

我一直试图用3个标签创建一个简单的TabActivity。如果我将android:minSdkVersion="11"放在清单文件中,则所有工作外,图标不会显示。如果我设置'minSdkVersion =“10”,一切都很好。

我看起来很高,但是我无法确定出了什么问题 我已将相同的图像放在看似合适的资源目录中:

  

RES /抽拉-HDPI-V5
  RES /抽拉-LDPI-V5
  RES /抽拉-MDPI-V5
  res / drawable-xhdpi-v5

代码很简单:

import android.app.TabActivity;
import android.content.res.Resources;
import android.os.Bundle;
import android.util.Log;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.TabHost;
import android.widget.TabWidget;

public class Review extends TabActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TabHost tabs = getTabHost();
        getLayoutInflater().inflate(R.layout.main, 
                                    tabs.getTabContentView(), true);
        Resources resources=getResources();
        Log.d("testing", String.format("icon: %d.%d",
                    resources.getDrawable(R.drawable.review).getIntrinsicWidth(), 
            resources.getDrawable(R.drawable.review).getIntrinsicHeight()));
        TabHost.TabSpec details = tabs.newTabSpec("review"). setContent(R.id.review). 
                setIndicator(getString(R.string.review), 
                        resources.getDrawable(R.drawable.review));        
        TabHost.TabSpec gallery=tabs.newTabSpec("gallery").setContent(R.id.photos)
                .setIndicator(getString(R.string.gallery), 
                        resources.getDrawable(R.drawable.photos));
        TabHost.TabSpec reservation=tabs.newTabSpec("reservation").
             setContent(R.id.reservation)
                .setIndicator(getString(R.string.reservation), 
                        resources.getDrawable(R.drawable.reservation));
        tabs.addTab(details);
        tabs.addTab(gallery);
        tabs.addTab(reservation);    
    }
}

在深入研究这个问题时,我在android 2.0 vs 3.0内部可以看到的唯一区别是Android在2.0实现中使用RelativeLayout而不是LinearLayout

为确保找到图标图片,上面Log.d显示:

  

icon:32.32 应该如此。

为什么这从Android 2.0转为3.0这样做?我希望其他人遇到这个问题很明显。非常感谢你的帮助!

- 更新:

我今天发现,当我更仔细地查看为Android 3.0+构建此代码时实际发生的情况时,我了解到调用ImageView时出现的SetIndeicator(string, drawable)每个TabSpec实际上都没有设置,实际上是NULLImageView.mDrawable==null)和INVISBLE

如果我强制设置要设置的那些drawable,调用ImageView.setVisiblity(View.VISIBLE)然后它们会出现。但是在android 2.0下,它们与上面的图像和下面的文本叠加在一起,如下所示:

<image>
<text>

在android 3.0下,它们会出现(如上所述),如下所示:

<image><text>

因此,似乎事情发生了很大变化,我需要更仔细地研究android 3.0的变化。

请继续关注更多...

- 最终更新:

最终,我放弃了这条大道并决定改变这种做法并且现在可能已经折旧了,还有其他更好的方法可以做到这一点,而且图标有点陈旧。

1 个答案:

答案 0 :(得分:0)

奇怪,这解决了问题

    //bmOptions.inSampleSize = 1;
    //or better
    bmOptions.inScaled = false;

更多信息: https://stackoverflow.com/a/12088287/1320686