0

Objective-C を使用して iOS にタブ バーを作成し、Titanium を使用して Android のタブ バーをできるだけ近くに表示しようとしています。不思議なんだけど:

  1. タブバー自体に背景画像を与えるにはどうすればよいですか? 私ができる唯一のことは、背景色を与えることです。backgroundImageプロパティは効果がありません。

  2. 選択したタブの背景色を変更するにはどうすればよいですか? 仕方なく交換してみましたactiveTabBackgroundSelectedColor

  3. アクティブなタブのアイコンをどのように変更しますか? 選択されていないときはアイコンが灰色になり、選択されているときは白になります。ドローアブルを作成しようとしましたが、Android アプリにそれを認識させることができませんTitanium.App.Android.R.drawable.ic_tab_coupon 。ご協力ありがとうございます。

-

PS価値があるのは、私が取り組んでいるコードのスニペットです。同じ方法でインスタンス化/追加された他のタブがあることに注意してください。簡潔にするためにそれらを示していません。

var self = Ti.UI.createTabGroup({
    backgroundColor: 'red',
    activeTabBackgroundColor: 'blue',
});

var win1 = new Window(L('SpintoWin'));

var tab1 = Ti.UI.createTab({
    backgroundColor: 'none',
    title: L('SpintoWin'),
    icon: '/images/tab-icon-gift.png',
    window: win1
});

win1.containingTab = tab1;

self.addTab(tab1);
4

2 に答える 2

0

1.TabWidgetandroid:background属性を定義する必要があります。例えば:

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <FrameLayout
        android:id="@android:id/tabcontent"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_above="@android:id/tabs" />

    <TabWidget
        android:id="@android:id/tabs"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"

        android:background="@drawable/tab_backgrnd" />

</RelativeLayout>

drawableはどこtab_backgrndにありますか。

2 & 3.まず、Android 自体が行うように、タブのレイアウトを定義します。Android のタブ レイアウトは次のようになります。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="0dip"
    android:layout_height="64dip"
    android:layout_weight="1"
    android:layout_marginLeft="-3dip"
    android:layout_marginRight="-3dip"
    android:orientation="vertical"
    android:background="@drawable/tab_indicator">

    <ImageView android:id="@+id/icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true" />

    <TextView android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        style="?android:attr/tabWidgetStyle" />

</RelativeLayout>

このレイアウトには、 oneImageViewと oneだけでなく、好きなものを入れることができますTextView。押された/選択されたときにタブを変更するにStateListDrawableは、 をルート レイアウトの背景として、およびタブに含まれる他の要素の背景として設定します (上記の例ではImageViewおよびTextView)。

次に、このレイアウトを拡張して、タブ インジケーターとして設定します。

    TabHost tabHost = getTabHost();
    TabHost.TabSpec tabSpec;  // Reusable TabSpec for each tab
    Intent intent;  // Reusable Intent for each tab
    View tabView;
    LayoutInflater inflater = getLayoutInflater();

    intent = new Intent().setClass(this, YourActivity1.class);
    tabView = inflater.inflate(R.layout.tab_layout, tabHost.getTabWidget(), false);
    tabSpec = tabHost.newTabSpec(TAG_TAB_1).setIndicator(tabView).setContent(intent);
    tabHost.addTab(tabSpec);

    // Do the same for the other tabs
    ...

各タブのアイコンとテキストをプログラムで設定することも (Android がIDandroid:id="@+id/icon"を利用するようにandroid:id="@+id/title")、タブごとに個別のレイアウトを定義することもできます。

于 2012-07-05T18:03:40.067 に答える
0

これは古い質問ですが、この質問は用語の検索エンジンの結果でかなり上位にあるため、これに関する追加の詳細を提供すると考えました.

http://developer.appcelerator.com/question/53851/android-tab-icon-states

Titanium 1.7 では、これを可能にするドローアブル リソースをサポートするようにタブが変更されました (サンプル コードを含む以下を参照)。

https://jira.appcelerator.org/browse/TIMOB-3179

その後、タブのアイコンとして描画可能なリソースを指定する機能が削除された問題を修正しました。

.icon次の論理的なステップは、次の質問で説明されているように、フォーカスを取得または失ったときにタブのプロパティを変更しようとすることでした。

http://developer.appcelerator.com/question/135063/how-to-change-active-tab-icon

ネイティブの Android コードは文字列値ではなくドローアブル リソースを受け取るため、タブのアイコンは描画後に更新できません。

https://jira.appcelerator.org/browse/TIMOB-9962

したがって、質問に対する答えは次のとおりです。

  • アイコンを描画可能なリソースに設定することはできません
  • タブの描画後にタブ アイコンを変更することはできません

上記のいずれかが利用可能になるまでは、Ti.UI.TabGroup / Ti.UI.Tab を使用するときに選択されているタブのアイコンを変更することはできません。

于 2013-02-15T21:20:04.870 に答える