Android – настройка вкладок sherlock для панели действий

Я пытаюсь настроить вкладки sherlock для панели действий, чтобы они отображали текст вкладки под значком вкладки. После поиска и чтения о предмете мне все еще не очень повезло.

Вот результаты, которые я получаю:

Пользовательская вкладка1 выбрана выбранный

Пользовательская вкладка1 не выбрана, выбрана стандартная вкладка2 Не выбран

Это то, что у меня есть до сих пор:

Создал мой собственный styles.xml, где я изменяю некоторые параметры панели действий:

<style name="SkoletubeTheme" parent="Theme.Sherlock"> <item name="actionBarSize">@dimen/st__action_bar_default_height</item> <item name="actionBarTabStyle">@style/Skoletube.TabView</item> <item name="actionBarTabTextStyle">@style/Skoletube.Tab.Text</item> </style> <style name="Skoletube.TabView" parent="Widget.Sherlock.ActionBar.TabView"> <item name="android:background">@drawable/abs__tab_indicator_holo</item> <item name="android:paddingLeft">6dp</item> <item name="android:paddingRight">6dp</item> </style> <style name="Skoletube.Tab.Text" parent="Widget.Sherlock.ActionBar.TabText"> <item name="android:textAppearance">@android:style/TextAppearance.Medium</item> <item name="android:textColor">@android:color/primary_text_dark</item> <item name="android:textSize">10sp</item> </style> 

Создал xml ressource, где я изменяю и перезаписываю некоторые текстовые настройки для панели действий. Здесь я увеличил высоту панели действий, что, в свою очередь, увеличивает высоту вкладок. Я также уменьшил размер текста, чтобы освободить место для установки значка и текста на вкладке

 <?xml version="1.0" encoding="utf-8"?> <resources> <!-- Default height of an action bar. --> <dimen name="st__action_bar_default_height">58dip</dimen> <!-- Text size for action bar titles --> <dimen name="ab__action_bar_title_text_size">10dp</dimen> <!-- Text size for action bar subtitles --> <dimen name="ab__action_bar_subtitle_text_size">6dp</dimen> <!-- Top margin for action bar subtitles --> <dimen name="ab__action_bar_subtitle_top_margin">-3dp</dimen> <!-- Bottom margin for action bar subtitles --> <dimen name="ab__action_bar_subtitle_bottom_margin">5dip</dimen> </resources> 

Затем я определил пользовательский макет для вкладок, где я размещаю текст под значком:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/customTabLayout" android:layout_width="wrap_content" android:layout_height="fill_parent" android:orientation="vertical" android:layout_weight="1" android:focusable="true" android:gravity="center" style="?attr/actionBarTabStyle" > <ImageView android:id="@+id/sk_abs__tab_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:background="@android:color/transparent" /> <com.actionbarsherlock.internal.widget.ScrollingTextView android:id="@+id/sk_abs__tab_txt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/sk_abs__tab_icon" android:layout_alignWithParentIfMissing="true" android:layout_weight="1" android:layout_centerHorizontal="true" android:lines="1" android:scrollHorizontally="true" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" style="@style/Skoletube.Tab.Text" /> <FrameLayout android:id="@+id/abs__tab_custom" android:layout_width="wrap_content" android:layout_height="fill_parent" android:padding="5dip" android:layout_weight="1" android:visibility="gone" /> 

Только для записи атрибут передан как стиль для относительного макета указывает на это:

 <style name="Widget.Sherlock.ActionBar.TabBar" parent="android:Widget"></style> 

Затем я применил эти изменения в своем приложении следующим образом: первая вкладка имеет мою индивидуальную реализацию, вторая вкладка имеет стандартную реализацию:

 final ActionBar actionBar; actionBar = getSupportActionBar(); actionBar.setDisplayHomeAsUpEnabled(false); actionBar.setDisplayUseLogoEnabled(true); // Set up tabs myMediaTab = actionBar.newTab(); myMediaTab.setCustomView(R.layout.skoletube_tab_layout); ImageView myMediaImg = (ImageView) myMediaTab.getCustomView().findViewById(R.id.sk_abs__tab_icon); myMediaImg.setImageResource(R.drawable.tab_mymedia); ScrollingTextView myMediaText = (ScrollingTextView) myMediaTab.getCustomView().findViewById(R.id.sk_abs__tab_txt); myMediaText.setText("Tab1"); myMediaTab.setTabListener(this); myMediaTab.setTag("MyMediaTab"); actionBar.addTab(myMediaTab); myChannelsTab = actionBar.newTab(); myChannelsTab.setIcon(drawable.tab_mychannels); myChannelsTab.setText("Tab2"); myChannelsTab.setTabListener(this); myChannelsTab.setTag("myChannelsTab"); actionBar.addTab(myChannelsTab); 

Хотя я думаю, что я близок к решению, я думаю, что я где-то пропустил шаг.

Очевидно, что синяя полоска за текстом / под изображением не должна быть там, но мне также не показалось, что я могу установить сфокусированное изображение (я хочу, чтобы img менял цвет при выборе вкладки) и цвет текста , Должен ли я сделать просмотр изображений ориентированным и обработать его через это или?

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

Цените любые предложения и идеи.

Solutions Collecting From Web of "Android – настройка вкладок sherlock для панели действий"

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

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

Я решил, что, используя составную форму :

 tv = new TextView(this); tv.setText(R.string.tab_movies); tv.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.nav_movies, 0, 0); mBar.addTab(mBar .newTab() .setCustomView(tv) .setTabListener( new TabListenerImpl<TheatersTabActivity>(this, "theaters", TheatersTabActivity.class))); 

Чтобы обработать выбранное или не выбранное изображение, я использую селектор:

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_selected="true" android:drawable="@drawable/nav_movies_on"/> <item android:state_selected="false" android:drawable="@drawable/nav_movies_off"/> </selector>