5

わかりました、これは私を狂わせています-私は見つけることができるすべての参照と例を検索しました、そして私はまだ本当に明白な何かを逃しているようです。これらは7日間のTVガイドのタブです(通常は赤い矢印は付いていませんが、明らかに:))...

ここに画像の説明を入力してください

私が知る必要があるのは、タブ自体の本体/背景を構成するオブジェクト(私が想定しているビューまたはドローアブル)とは何ですか?(赤い矢印で示されているように)どうすればアクセスできますか、または状態の色を選択したリストに自動的に変更できますか?また、インジケーターTextViewの状態の色を追跡するにはどうすればよいですか?

例:上記のキャプチャでは、textColorを静的な灰色に設定したため(選択したタブで消えた明るい白ではなく)、読みやすくなっています。しかし、私はそれが自動的に白いタブ(選択された)の黒いテキストと黒い(選択されていない)上の明るい白いテキストになることを望みます。

すべての助けがありがたく受けました。

4

2 に答える 2

6

各タブを表すビューは、を使用して変更できます。

setIndicator(View)

私はこのコードを使用して各タブを作成しています:

View view = buildTabView(this, "Friday");
TabHost.TabSpec spec = tabHost.newTabSpec("cat1").setIndicator(view).setContent(intent);
tabHost.addTab(spec);

public static LinearLayout buildTabView(Context context, String label){
    LayoutInflater li = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);          
    final LinearLayout ll = (LinearLayout)li.inflate(R.layout.tab, null);

    // the following lines will change the tabs size depending on the label (text) length.
    // the longer tab text - the wider tabs
    LinearLayout.LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, label.length() + 1);
    ll.setLayoutParams(layoutParams);

    final TextView tv = (TextView)ll.findViewById(R.id.tab_tv);         
    tv.setOnTouchListener(new OnTouchListener() {               
        public boolean onTouch(View v, MotionEvent event) {
            ll.onTouchEvent(event);
            return false;
        }
    });

    tv.setText(label);          
    return ll;
}

そしてここにlayout/tab.xmlがあります

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:background="@drawable/tab_bg_selector"
  android:clickable="true"
  >

  <TextView
  android:id="@+id/tab_tv"
  android:layout_width="wrap_content"
  android:layout_height="33dip"
  android:text="Text 1"
  android:textStyle="bold"
  android:textSize="16dip"
  android:gravity="center"
  android:textColor="@drawable/tab_color_selector"
  android:layout_weight="1.0"
  android:clickable="true"
  />

</LinearLayout>

LinearLayoutの背景にはセレクターがあり(バックラウンドを変更するため、明らかに:))、TextViewにはtextColorにセレクターがあります(選択/押したときにテキストの色を変更するなど)。このようにして、タブが押されているときはテキストを黒く見せ、押されていないときは白く見せることができます:)

于 2011-04-14T23:43:12.530 に答える
2

使用するコードで質問を更新してください..タブをアニメーション化するためにドローアブル内でxmlを使用しますか? これは、xml を使用したタブ アクション処理のサンプルです。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- When selected, use grey -->
    <item android:drawable="@drawable/ic_tab_about_grey"
          android:state_selected="false" />
    <!-- When not selected, use white-->
    <item android:drawable="@drawable/ic_tab_about_color" android:state_selected="true"/>
</selector>

この xml ファイルを使用して、タブの動作とアイコンをカスタマイズします。

タブでこのアニメーション/カスタマイズ オプションを設定するコードは次のとおりです。

intent = new Intent().setClass(this, sms.class);
spec = tabHost.newTabSpec("sms").setIndicator("SMS",
       res.getDrawable(R.drawable.ic_tab_sms))
       .setContent(intent);
tabHost.addTab(spec);

タブホストとタブウィジェットを定義するレイアウトの XML になりました。

<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            />
</TabHost>

この xml レイアウトを独自の色、フォント、および構造でカスタマイズします。

于 2011-04-18T07:03:16.343 に答える