Android操作栏:自定义标签和溢出

时间:2011-03-21 00:02:33

标签: android tabs customization android-3.0-honeycomb android-actionbar

我很难为动作栏实现自定义样式标签:我需要制作标签(我的意思是按钮),为正常状态和选定状态使用自定义图形。

我已经能够使用

杀死所有本机样式
<style name="customActionBarTabStyle">
    <item name="android:background">#00000000</item>
</style>

然后使用Tab.setIcon()使标签看起来像我需要的方式,但我需要它们对切换做出反应(通过在两个Drawable之间切换 - 用于开启和关闭状态)。

我尝试过像这样创建一个Drawable选择器:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:drawable="@drawable/btn_on" />
    <item android:drawable="@drawable/btn_off" />
</selector>

但选中时标签不会切换到按下模式。

另外,我尝试在TabListener.onTabSelected()和.onTabUnselected()中调用Tab.setIcon() - 也没有运气。

有没有人知道这个问题的好方法?

另外,我需要显示一个自定义视图而不是溢出菜单 - 我已经搜索了一堆“提示”来重新思考我的UI“按照Android方式”但问题是UI不是实际的重新思考 - 这是客户的:)所以我真的想找到一种方法来解决ActionBar的定制缺点。

任何建议都非常感谢,提前谢谢。

4 个答案:

答案 0 :(得分:1)

尝试使用state_selected而不是state_pressed,只是尝试在此处执行类似的操作(完全更改选项卡的背景图像),似乎操作栏选项卡只输入选定的true / false但不是按下状态...

编辑:似乎背景属性进入该状态,但不是选项卡上使用的文字颜色......

答案 1 :(得分:0)

我认为你必须使用 android:selectableItemBackground 看看this 它可能有所帮助。

祝你好运

答案 2 :(得分:0)

只是为了使解决方案更具现实性:

@ taf表示解决方案:您需要在父级布局中设置android:duplicateParentState="true",将其用作标签的自定义视图。

答案 3 :(得分:0)

选择选项卡时,我的代码和图标会发生变化,未选中时会更改。

    public class MainActivity extends FragmentActivity implements ActionBar.TabListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       requestWindowFeature(Window.FEATURE_ACTION_BAR);
       setContentView(R.layout.activity_main);

       // Set up the action bar.
       final ActionBar actionBar = getActionBar();
       actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
       actionBar.setBackgroundDrawable(null);

    icons = new int[] {
            R.drawable.ic_facebook,
            R.drawable.ic_facebook,
            R.drawable.ic_facebook,
            R.drawable.ic_facebook,
    };
    icons_selected = new int[] {
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
    };


    // For each of the sections in the app, add a tab to the action bar.
    for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
        // Create a tab with text corresponding to the page title defined by
        // the adapter. Also specify this Activity object, which implements
        // the TabListener interface, as the callback (listener) for when
        // this tab is selected.
        actionBar.addTab(
                actionBar.newTab()
                        .setText(mSectionsPagerAdapter.getPageTitle(i))
                        .setIcon(icons[i])
                        .setTabListener(this)
        );
    }
    }

和这个

    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction){

    getActionBar().getSelectedTab().setIcon(icons_selected[tab.getPosition()]);
    }

    @Override
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
    getActionBar().getSelectedTab().setIcon(icons[tab.getPosition()]);
    }

    @Override
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
    }