【问题标题】:Android - How to deselect all tabs in the ActionBarAndroid - 如何取消选择 ActionBar 中的所有选项卡
【发布时间】:2012-10-14 02:15:46
【问题描述】:

我在我的应用程序中使用带有选项卡的 ActionBar 以及老式菜单。当您进入与菜单项关联的片段时,我想保持 ActionBar 可见,但取消选择所有选项卡。

我试过了:

_actionBar.selectTab(null);

但这会引发异常。

PS 我实际上是使用 ActionBarSherlock 来实现兼容性,如果这会有所不同的话。

【问题讨论】:

  • getActionBar().removeAllTabs();
  • 不,我不想删除标签;我只是不希望它们中的任何一个被选中。
  • @K_Anas getActionBar().removeAllTabs() 将完全删除所有标签

标签: android android-actionbar actionbarsherlock


【解决方案1】:

然后抓住它:)

我刚刚测试了这个,它有效,标签下的蓝色下划线消失了,这正是我想要做的。

       try {
          ActionBar actionbar = (ActionBar) getActionBar();
          actionbar.selectTab(null);
       } catch (Exception e) {}

程序流程继续......这是一个变通方法。

【讨论】:

  • 聪明。我一定会试试这个(下一次)。
  • 抛出运行时异常
  • 对于使用 Android 支持库(因此使用 getSupportActionBar())的我来说,这引发了 NullPointerException,然后被捕获,但蓝线选择栏仍然存在。所以没有任何操作栏选项卡被取消选择......总的来说,实际上没有发生任何事情。
  • 完美运行。可能值得指出的是,这个答案仅与 monodroid (xamarin) 相关。原始问题是针对原生 android 提出的。
【解决方案2】:

您无法取消选择选项卡,您认为会发生什么?应始终选择选项卡之一。

想想你的用户。他们不会期待这种行为。

【讨论】:

  • 好吧,至少我知道这是系统的限制。我没有想出这个应用程序的用户体验,我只是想按照提供的方式实现设计。谢谢。
  • 我认为他的意思是他需要一个根,顶部有标签。选择选项卡会将片段推到根的顶部。 Root 没有选择任何选项卡。我也有同样的问题。
【解决方案3】:

如何取消选择 ActionBar 中的所有选项卡

你没有。始终选择选项卡。

【讨论】:

  • 为什么这是真的。我有一个搜索屏幕。我有一个附近的标签和一个收藏夹标签。如果用户点击其上方的搜索图标,并返回结果,那么我不想选择任何选项卡。是的,我可以在其中添加第三个标签。但我也可以同时取消选择,对用户来说,它看起来像预期的那样。
  • @WallMobile:“那么我不想选择任何选项卡”——您的用户会这样做。 “是的,我可以在其中添加第三个选项卡”——如果用户进行搜索并且您没有显示任何结果,用户会认为您的应用程序存在错误。因此,有才华的程序员会在用户进行搜索时显示搜索结果。在现有选项卡中显示结果(应选中),添加第三个选项卡(应选中),或在新活动中显示结果(没有选项卡)。
  • 可能。我正在研究现在最适合用户的东西。如果他们没有得到任何结果,我会发信息。我明白你的意思,但需要通过这个过程来找到最佳的用户体验。
  • @WallMobile:“如果他们没有得到任何结果,我会给出一条消息”——油煎面包块是一种表示方式,它不会永久破坏你的 UI 的其余部分结构体。 github.com/keyboardsurfer/Crouton 和 johnkil.github.io/Android-AppMsg 是流行的解决方案。
  • 谢谢,更新您的帖子,以便我可以删除 -1。有点高兴:) 我想我要开辟一条新的活动路线。
【解决方案4】:

我知道我现在正在做死灵术……但我找到了一个可行的解决方案。因此,以防万一其他人尝试这样做,请执行此操作。

您只需创建一个虚拟选项卡,而不会将其添加到操作栏。选择虚拟选项卡,操作栏中的选项卡都未选中。如果您调试ActionBar.TabListener 的onTabSelected 等方法,虚拟对象的索引将为-1。

注意:这假设您在 Activity 中实现 ActionBar.TabListener。

String tabTitles[] = {"A", "B"};
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

for (String tabName : tabTitles) {
    actionBar.addTab(actionBar.newTab().setText(tabName).setTabListener(this), false);  
}

ActionBar.Tab dummyTab = actionBar.newTab().setText("Dummy").setTabListener(this);

try{
    actionBar.selectTab(dummnyTab);
}catch(Exception e){}

非常适合我。

【讨论】:

    【解决方案5】:

    为选定和未选定的文本颜色保存默认颜色状态列表的副本

    val tabStateTextColors = tabLayout.tabTextColors
    

    将选项卡选定指示器设置为透明

    tabLayout.setSelectedTabIndicatorColor(getColor(android.R.color.transparent))
    

    为未选中状态设置文本颜色

    tabLayout.setTabTextColors(getColor(R.color.gray),getColor(R.color.gray))
    

    当你想恢复正常时重置颜色

    tabLayout.setTabTextColors(tabStateTextColors)
    tabLayout.setSelectedTabIndicatorColor(getColor(R.color.black)
    

    所以这个的一般要点是设置相应的颜色,这样看起来标签没有被选中。

    【讨论】:

      【解决方案6】:

      TabLayout 也有类似的问题。作为一种解决方法,我首先将选定的选项卡指示器颜色设置为透明:

      int colorTransparent = getColor(R.color.transparent);
      tabLayout.setSelectedTabIndicatorColor(colorTransparent);
      

      并隐藏了 ViewPager/content - 所以它基本上看起来就像没有选择任何内容,没有当前页面可见。

      然后,当用户按下按钮时,我将选定的选项卡指示器颜色改回R.color.accent,并在 ViewPager/content 中淡出。

      【讨论】:

        猜你喜欢
        • 2021-09-19
        • 1970-01-01
        • 2012-04-11
        • 1970-01-01
        • 2018-10-14
        • 2015-04-13
        • 1970-01-01
        • 1970-01-01
        • 2018-05-18
        相关资源
        最近更新 更多