2

TabActivity私は3つのタブでシンプルなものを作ろうとしています。マニフェストファイルを入れた場合を除いて、すべて動作android:minSdkVersion="11"し、アイコンは表示されません。`minSdkVersion="10" を設定すると、すべて問題ありません。

私は高低を見てきましたが、何が悪いのかを判断できませんでした.
一見適切なリソース ディレクトリに同じ画像を配置しました。

res/drawable-hdpi-v5
res/drawable-ldpi-v5
res/drawable-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 と 3.0 で内部的に見られる唯一の違いは、Android が2.0 の実装 RelativeLayoutで a ではなく a を使用していることです。LinearLayout

上記のショーのアイコン画像が見つかっていることを確認するためだけにLog.d:

アイコン: 32.32です。

Android 2.0 から 3.0 への移行でこれが行われるのはなぜですか???? 他の誰かがこれに遭遇したことを願っていますが、それは明らかです。どうもありがとうございました!

- アップデート:

このコードが android 3.0+ 用にビルドされたときに実際に何が起こっているかを詳しく調べたところ、が呼び出されImageViewたときに発生するは、実際には決して設定されず、実際には( ) であることがわかりました。 SetIndeicator(string, drawable)TabSpecNULLImageView.mDrawable==nullINVISBLE

これらのドローアブルを強制的に設定し呼び出すとImageView.setVisiblity(View.VISIBLE)、それらが表示されます。ただし、Android 2.0 では、次のように上の画像と下のテキストが重ねて表示されます。

<image>
<text>

Android 3.0 では、(上記のように強制された場合) 次のように並べて表示されます。

<image><text>

このように、物事は大きく変わったようで、Android 3.0 の変更をより注意深く調査する必要があります。

詳細をお楽しみに...

-- 最終更新:

最終的に、私はこの道を断念し、物事を行うこのスタイルが変更され、おそらく現在は減価償却されていると判断しました。これを行うには他に良い方法があり、アイコンは少し古いスタイルです.

4

1 に答える 1

0

奇妙な、これは問題を解決します

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

詳細: https://stackoverflow.com/a/12088287/1320686

于 2013-11-07T07:48:45.640 に答える