3

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

[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. 主页被禁用:getActionBar().setHomeButtonEnabled(false);
  3. 如果你点击它... Android 会完全删除 ACTIONVIEW。嗯?

这是Android中的错误吗?两个错误,甚至?我在文档中找不到任何关于这种神奇行为的提及,它删除动作视图的位置似乎非常非常错误:(。调用“expandActionView()”真的应该删除 ActionBar 配置并替换为新配置吗?

4

1 回答 1

2

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

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

  2. “消失”视图是因为我已经从我的操作视图中删除了图标(它应该总是展开),并且在点击主页按钮时它会取消展开它。

解决方法:

  1. 不要使用 MenuItem.collapseActionView / .expandActionView - 它们的设计很糟糕,不能正常工作,并且大多数 Android 版本都不支持!
  2. 反而:
    1. 使用自定义 ActionLayout
      1. 注意:onOptionsItemSelected 已损坏:它未检测到自定义操作视图上的点击
      2. 注意:setOnMenuItemClickListener 坏了:它没有检测到自定义操作视图上的点击
    2. 在 onCreateOptionsMenu 中的每个 ActionView 中添加一个 onClickListener
    3. 使用 View.setVisibility( View.GONE ) 折叠项目
      1. 在同一布局中有一个“折叠”视图和一个“展开”视图。
      2. 始终将其中一个设为 GONE,另一个设为 VISIBLE

注意:本质上这意味着重新实现整个 ActionView 折叠/展开,有以下区别:

  1. 如果你自己做,它会起作用
  2. 它适用于所有版本的 Android
  3. 布局是正确的(Google 对 ActionBar 展开的 ActionViews 的布局计算已知有轻微错误,因为决定“多少空间”的算法不正确,并且忽略了标题 + 应用图标的实际大小)
于 2013-05-03T13:21:50.233 回答