Android – 自定义操作栏sherlock选项卡

我试图自定义操作栏sherlock选项卡,以便它们显示选项卡图标下方的选项卡文本。 在搜索和阅读有关主题后,我仍然没有太多运气。

以下是我得到的结果:

已选择自定义tab1 选

未选择自定义选项卡1,选择标准选项卡2 未选中的

这是我到目前为止:

创建了我自己的styles.xml,我在其中更改了一些操作栏设置:

 @dimen/st__action_bar_default_height @style/Skoletube.TabView @style/Skoletube.Tab.Text   @drawable/abs__tab_indicator_holo 6dp 6dp   @android:style/TextAppearance.Medium @android:color/primary_text_dark 10sp  

创建了一个xml资源,我在其中更改并为操作栏设置了一些文本设置。 在这里,我增加了操作栏的高度,从而增加了标签的高度。 我还减小了文本的大小,以便为选项卡中的图标和文本添加空间

    58dip  10dp  6dp  -3dp  5dip  

然后我为要使用的选项卡定义了自定义布局,我将文本放在图标下方:

      

仅作为记录,作为相对布局的样式传递的属性指向:

  

然后我将这些更改应用到我的应用程序,如下所示,第一个选项卡具有我的自定义实现,第二个选项卡具有标准实现:

 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); 

虽然我认为我接近解决方案,但我认为我错过了某个地方。

显然文本后面/图像下方的蓝色条不需要存在,但我似乎也没有find可以设置聚焦图像的位置(我希望img在选择选项卡时更改颜色)和文本颜色。 我是否需要使imageview成为可调焦的并通过它来处理它?

我在这方面仍然相当新,所以如果有更好/更聪明的方法去做,我在这里采取的方法可能是错的,请说。

感谢任何建议和想法。

我不知道你是否find了这个或那个答案,但一个解决方案可能是修改标签图像以包含文本,使用GIMP或photoshop的东西,然后只需在标签中设置这些图像,而不是图像和文字。 这是一种尴尬的方式,但它会起作用。

希望这可以帮助!

我通过使用复合drawable解决了这个问题:

 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(this, "theaters", TheatersTabActivity.class))); 

为了处理选定或未选择的图像,我使用选择器:

 < ?xml version="1.0" encoding="utf-8"?>