Почему изображения в WidgetTab не отображаются, если minSdkVersion>10?

Я пытался создать простой TabActivity с 3 вкладками. Все работает кроме если я поставлю android:minSdkVersion="11" в файле манифеста значки не отображаются. Если я установлю `minSdkVersion="10", все будет хорошо.

Я выглядел высоко и низко, но я не смог определить, что не так.
Я поместил те же изображения в, казалось бы, соответствующие каталоги ресурсов:

RES / вытяжка-ИПЧР-v5
RES / вытяжке-ldpi-v5
RES / вытяжке-MDPI-v5
RES / вытяжке-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 и 3.0, заключается в том, что Android использует RelativeLayout вместо LinearLayout в реализации 2.0.

Просто чтобы быть уверенным, что изображения значков находят, Log.d из вышеперечисленных шоу:

иконка: 32.32 как и должно быть.

Почему этот переход с Android 2.0 на 3.0 делает это???? Я надеюсь, что кто-то еще столкнулся с этим, и это очевидно. Большое спасибо за вашу помощь!

-- ОБНОВИТЬ:

Сегодня я обнаружил, что при более внимательном рассмотрении того, что на самом деле происходит, когда этот код создается для Android 3.0+, я узнал, что ImageViewэто происходит, когда SetIndeicator(string, drawable) называется для каждого TabSpec, на самом деле никогда не установлены и на самом деле NULL (ImageView.mDrawable==null) а также INVISBLE,

Если я заставлю установить те drawables, которые будут установлены, и вызову ImageView.setVisiblity(View.VISIBLE) тогда они появляются. Однако в Android 2.0 они выглядят сложенными с изображением выше и текстом ниже, как в:

<image>
<text>

Под Android 3.0 они появляются (когда принудительно, как указано выше) бок о бок, как в:

<image><text>

Таким образом, похоже, что многое изменилось, и мне нужно более тщательно исследовать изменения для Android 3.0.

Оставайтесь с нами, чтобы узнать больше...

- Окончательное обновление:

В конечном итоге я отказался от этой авеню и решил, что этот стиль ведения дел изменился, и, возможно, теперь он устарел, и есть другие более эффективные способы сделать это, а значки немного старомодны.

1 ответ

Странно, это решает проблему

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

больше на: /questions/16918202/android-zagruzka-izobrazheniya-s-veb-adresa/16918216#16918216

Другие вопросы по тегам