显示片段时自动展开ActionView

时间:2013-05-03 12:40:42

标签: android android-actionbar

我想要一些非常简单的东西(无论如何,恕我直言应该是默认的!):

[logo] [---------------expanded action view--------------] [other actionview]

Android默认执行此操作:

[logo] [----stupid empty space----][collapsed action view] [other actionview]

很好,我想:让我们选择MenuItem,并在onCreateOptionsMenu中调用“expandActionView()”。

都能跟得上!

Android现在可以做到这一点:

[back symbol] [logo] [---------------expanded action view--------------] [other actionview]

但是......那背后来自哪里?为什么是按钮?它在做什么?

  1. 禁用home-as-up:getActionBar()。setDisplayHomeAsUpEnabled(false);
  2. home已禁用:getActionBar()。setHomeButtonEnabled(false);
  3. 如果你点击它... Android完全删除了ACTIONVIEW。咦?
  4. 这是Android中的错误吗?两个错误,甚至?我在文档中找不到任何提及这种神奇的行为,并且它删除了actionview的位似乎非常非常错误:(。应该调用“expandActionView()”真的删除了ActionBar配置并替换为新的吗?

1 个答案:

答案 0 :(得分:2)

似乎是按照设计的,但设计很差。

  1. “不可避免的”主页按钮是因为硬编码假设每个“展开”都是由用户点击折叠视图并要求它展开而触发的(显然,如果你这样做,通常情况并非如此)以编程方式执行此操作)。它似乎也没有使用后堆栈,这是奇怪的

  2. “令人失望”的观点是因为我从我的动作视图中删除了该图标(它应该始终展开),当按下主页按钮时,它会将其展开。

  3. 解决方法:

    1. 不要使用MenuItem.collapseActionView / .expandActionView - 它们设计糟糕,无法正常工作,大多数Android版本都不支持!
    2. 相反:
      1. 使用自定义ActionLayouts
        1. 注意:onOptionsItemSelected已损坏:它未检测到自定义操作视图上的点击
        2. 注意:setOnMenuItemClickListener已损坏:它未检测到自定义操作视图上的点击
      2. 将onClickListener添加到onCreateOptionsMenu
      3. 中的每个ActionView
      4. 使用View.setVisibility(View.GONE)折叠项目
        1. 在同一版面中设置“折叠”视图和“展开”视图。
        2. 在任何时候,其中一个为GONE,另一个为VISIBLE
    3. 注意:基本上这意味着重新实现整个ActionView崩溃/展开,但有以下不同之处:

      1. 如果您自己动手,它可以正常使用
      2. 适用于所有Android版本
      3. 布局是正确的(Google的ActionBar扩展ActionViews的布局计算已知略有错误,因为决定“多少空间”的算法不正确,并忽略了标题+ app-icon的实际大小)