6

インターネットからダウンロードしたタブ ホスト アイコンを使用する 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 として保存します。誰でも問題が何であるかについて何か考えがありますか?

これは、リソースのアイコンを含むタブホストです

これは、インターネットからダウンロードされたアイコンを含むタブホストです

解決:

以前のコードでタブ ホストにオブジェクトを追加する代わりに、以下のコードを使用すると、非常にうまく機能します。これら 2 つの違いは、イメージ ビューとテキスト ビューを持つレイアウトを使用してアイコンを示し、その下にテキストを使用してインテントのインジケーターを設定するという新しいものです。このようにして、画像ビューからメソッドを呼び出して、xml ファイルで定義されている境界に画像を合わせることができます。ビューでそれを行う方法は次のとおりです。

    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

以前のコードでタブ ホストにオブジェクトを追加する代わりに、以下のコードを使用すると、非常にうまく機能します。これら 2 つの違いは、イメージ ビューとテキスト ビューを持つレイアウトを使用してアイコンを示し、その下にテキストを使用してインテントのインジケーターを設定するという新しいものです。このようにして、画像ビューからメソッドを呼び出して、xml ファイルで定義されている境界に画像を合わせることができます。ビューでそれを行う方法は次のとおりです。

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 に答える