Создание небольших вкладок в Android

Я пытаюсь создать более мелкие вкладки в Android, но я не могу заставить его работать, потому что все, что происходит, когда я создаю меньшую вкладку, это то, что она показывает большую вкладку, но без возможности рисования.

Это мой код макета для вкладок сейчас, но высота по какой-то причине не обертывается – он просто подходит к обычной высоте макета Android.

<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"> <LinearLayout android:orientation="vertical" 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" /> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent"> </FrameLayout> </LinearLayout> </TabHost> 

Было бы здорово, если бы кто-то помог мне создать что-то вроде приложения Facebook – я думаю, что это выглядит действительно чистым, и я хотел бы реализовать что-то вроде этого:

Ну, это было гораздо сложнее, чем я думал, что это должно быть, но, тем не менее, это должно стать основной реализацией внешнего вида, который вы хотите …

  TabHost host = getTabHost(); TabSpec spec = null; TextView tab1 = null, tab2 = null; Intent intent = null; Resources resources = getResources(); XmlResourceParser parser = null; ColorStateList text = null; StateListDrawable[] drawables = new StateListDrawable[2]; int[] selected = {STATE_SELECTED}, unselected = {STATE_UNSELECTED}; Color selectedColor = Color.argb(255, 255, 255, 255), defaultColor = Color.argb(255, 119, 119, 119); // Load the colour lists. parser = resources.getXml(R.color.tab_text); text = ColorStateList.createFromXml(getResources(), parser); // Add an initial tab. ...Create Tab Contents Here... spec = host.newTabSpec("tab1"); tab1 = new TextView(this); tab1.setText(R.string.all_tab_title); tab1.setGravity(android.view.Gravity.CENTER); tab1.setTextSize(18.0f); tab1.setTextColor(text); spec.setIndicator(tab1); spec.setContent(intent); host.addTab(spec); // Add a second tab. ...Create Tab Contents Here... spec = host.newTabSpec("tab2"); tab2 = new TextView(this); tab2.setText(R.string.category_tab_title); tab2.setGravity(android.view.Gravity.CENTER); tab2.setTextSize(18.0f); tab2.setTextColor(text); spec.setIndicator(tab2); spec.setContent(intent); host.addTab(spec); // Set the background drawable for the tabs and select the first tab. drawables[0] = new StateListDrawable(); drawables[0].addState(selected, new ColorDrawable(selectedColor)); drawables[0].addState(unselected, new ColorDrawable(defaultColor)); drawables[1] = new StateListDrawable(); drawables[1].addState(selected, new ColorDrawable(selectedColor)); drawables[1].addState(unselected, new ColorDrawable(defaultColor)); tab1.setBackgroundDrawable(drawables[0]); tab2.setBackgroundDrawable(drawables[1]); host.setCurrentTab(0); 

Однако это не будет учитывать границы вкладок или расстояние между элементами. Вам также потребуется определение списка состояний цвета, как указано в каталоге ./res/color …

 <?xml version="1.0" encoding="UTF-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:color="#ff000000" /> <item android:state_selected="false" android:color="#ffaaaaaa" /> <item android:color="#ffffffff"/> </selector> 

Надеюсь, это поможет.

Видел это на другом форуме, но решил, что я передам его здесь.

 TabHost th = getTabHost(); .... // Setup all the tabs -- in my case, with text only -- no icons .... int iCnt = th.getTabWidget().getChildCount(); for(int i=0; i&ltiCnt; i++) th.getTabWidget().getChildAt(i).getLayoutParams().height /= 2; // Or the size desired