【问题标题】:SearchView and Activity Title in ActionBarActionBar 中的 SearchView 和 Activity 标题
【发布时间】:2013-11-26 11:26:03
【问题描述】:

非常简单的问题,不需要太多代码:

我正在使用 Android 的默认 ActionBar(没有 Sherlock),其中有几个 MenuItem。其中之一是用于典型搜索场景的可折叠操作视图 (android:showAsAction="collapseActionView|always"):用户单击图标 → 搜索框展开 → 当用户键入任何内容时,onQueryTextChange 就会发挥作用。

SearchView sv = new SearchView(this);
sv.setLayoutParams(new ActionBar.LayoutParams(Gravity.RIGHT));
// Yada, yada...
sv.setOnQueryTextListener(new OnQueryTextListener() {
    // The methods for onQueryTextSubmit and onQueryTextChange ... they apply filtering on the activity's list adapter and apparently work fine
}
menuItem.setActionView(sv); // menuItem is the item for the search action
searchAnswers.setOnActionExpandListener(new OnActionExpandListener() {
    // The listener's methods for expand/collapse as I need some business logic behind them
}

以上所有都可以正常工作。

当设备处于纵向模式并且屏幕空间有限时,SearchView 几乎占据了整个操作栏,隐藏了其他 MenuItems(具有android:showAsAction="ifRoom")以及 Activity 的标题,这对我来说是可以的。

问题是,如果设备处于横向模式(因此仍有可用的 ActionBar 空间),SearchView 不会占用整个 ActionBar(再次,我很好),但 Activity 的标题消失(即使有足够的空间可以显示它!)。所以我的问题是我得到了这个可以显示活动标题的空白空间。

展开前:

展开后:

(两张截图均来自手机横向模式。已在 Android 4.0.4 和 4.3 上测试。)

关于如何在有足够空间的情况下保持 Activity 的标题的任何提示?

【问题讨论】:

    标签: java android android-layout android-actionbar


    【解决方案1】:

    不确定您是否找到了此问题的答案。但我在这个帖子上找到了一个可能有帮助的答案 - 它确实对我有帮助。

    ActionBar SearchView not fully expanding in landscape mode

    从链接复制的代码:

    searchView.setOnSearchClickListener(new OnClickListener() {
        private boolean extended = false;
    
        @Override
        public void onClick(View v) {
            if (!extended) {
            extended = true;
                LayoutParams lp = v.getLayoutParams();
                lp.width = LayoutParams.MATCH_PARENT;
            }
        }
    });
    

    【讨论】:

    • 谢谢你,Jun。问题是关于保留 Activity 标题(而不是关于如何让 SearchView 填充父项),但考虑到问题的年龄,你的答案似乎已经足够好了。
    • @user1987392 这不是和你想要的相反吗?
    【解决方案2】:
    searchView.setMaxWidth(Integer.MAX_VALUE);
    

    【讨论】:

      【解决方案3】:

      基于 CoolMind 的答案,我可以将最大宽度设置为较小的值:

      searchView.setMaxWidth(375);
      

      setMaxWidth() 将其参数解释为像素。

      【讨论】:

        猜你喜欢
        • 2023-04-04
        • 2014-12-07
        • 2015-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-23
        • 2012-04-24
        • 1970-01-01
        相关资源
        最近更新 更多