タブのカラーステート /サイズのタブの制御タバクティブで?
-
29-10-2019 - |
質問
わかりました、これは私を夢中にさせています - 私は私が見つけることができるすべての参照と例を検索しましたが、私はまだ本当に明白な何かを欠いているようです。これらは、7日間のテレビガイドのタブです(通常は赤い矢印ではなく、明らかに:))...
私が知っておくべきことは、タブ自体の本体/背景を構成するオブジェクト(表示または描画可能なもの)は何ですか? (赤い矢印で示されているように)そして、どのようにアクセスするか、またはその状態の色を自動的に私の選択のリストに変更するにはどうすればよいですか?また、スーツをフォローするためにインジケータテキストビューの状態色を取得するにはどうすればよいですか?
例:上記のキャプチャでは、テキストコラーを静的なグレーに設定したため、読みやすいです(選択したタブで消えた明るい白の代わりに)。しかし、私はそれが白いタブの黒いテキスト(選択された)で自動的に黒いテキストになり、黒の明るい白いテキスト(選択されていない場合)になることを望んでいます。
すべての助けが感謝します。
解決
各タブを表すビューは、使用して変更できます
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;
}
そして、ここにレイアウト/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にセレクターがあります(選択 /押したときにテキスト色を変更するなど)。このようにして、タブが押されたときにテキストを黒く見せ、そうでないときは白に見せることができます:)
他のヒント
使用するコードで質問を更新します。タブをアニメーション化するために描画可能な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レイアウトをカスタマイズします。