android - AppCompat v7 :21 Split Action Bar Broken?

标签 android android-actionbar android-appcompat

我目前正在开发一个应用程序,我在其中使用经过大量修改的 Split Action Bar。这是应用程序当前状态的链接:

screenshot

您会注意到顶部有一个透明的操作栏,其中包含一个自定义 View ,底部有一个拼接在一起的拆分操作栏。底部 View 实际上是一个单独的操作项,其中包含一个自定义 View 并 showAlways=true。

目前我只支持 SDK v15+,我真的不打算改变它,但是有了刚刚发布的 Lollipop AppCompat 库,我决定实现它,这样我就可以在我的应用程序中获得一些很棒的东西。

我已将主题更改为 Theme.AppCompat.Light,我的 MainActivity 现在扩展了 ActionBarActivity 而不是 Activity。

所有对 getActionBar 的引用现在都已切换到 getSupportActionBar,仅进行了这些更改,这就是我的 Activity 现在的样子:

another screenshot

您会注意到我从设备监视器中获得了一个 UI 转储,它将底部操作栏插入一个奇怪的空间并将其称为操作栏,并摆脱了我的顶部自定义 View 。

这是我设置操作栏的代码:

public void initializeActionBar(){
    View customNav = LayoutInflater.from(this).inflate(R.layout.action_bar_top, null);

    actionBar = getSupportActionBar();
    actionBar.setBackgroundDrawable(getResources().getDrawable(R.drawable.transparent_fifty_percent));

    final PopupWindow window = addPopupWindow();

    actionBarOptions = (ImageView)customNav.findViewById(R.id.options);
    actionBarOptions.setVisibility(View.GONE);
    actionBarOptions.setImageDrawable(app.svgToBitmapDrawable(getResources(), R.raw.vertical_ellipsis, app.scaleByDensity(48)));
    actionBarOptions.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            window.showAsDropDown(actionBarOptions, 0, 0);
        }
    });
    TextView title = (TextView) customNav.findViewById(R.id.screen_title);
    Typeface font1 = Typeface.createFromAsset(getAssets(), "Merriweather-Italic.ttf");

    title.setText("Parsley");
    title.setTypeface(font1);

    actionBar.setCustomView(customNav);
    actionBar.setDisplayShowCustomEnabled(true);
    actionBar.setDisplayShowTitleEnabled(false);
    actionBar.setDisplayShowHomeEnabled(false);
    actionBar.setDisplayUseLogoEnabled(false);

}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    new MenuInflater(this).inflate(R.menu.test, menu);


    LinearLayout fullMenu = (LinearLayout) menu.findItem(R.id.full_menu).getActionView();


    ViewGroup.LayoutParams params;

    icon1 = (ImageView) fullMenu.findViewById(R.id.action_item1);
    params = icon1.getLayoutParams();
    params.width = getResources().getDisplayMetrics().widthPixels / 4;
    params.height = (int) (48 * getResources().getDisplayMetrics().density);

    icon1.setImageDrawable(app.svgToBitmapDrawable(getResources(), R.raw.shopping_list_icon, app.scaleByDensity(32)));
    icon2 = (ImageView) fullMenu.findViewById(R.id.action_item2);
    icon3 = (ImageView) fullMenu.findViewById(R.id.action_item3);
    icon4 = (ImageView) fullMenu.findViewById(R.id.action_item4);
    icon2.setImageDrawable(app.svgToBitmapDrawable(getResources(), R.raw.recipe_box_icon, app.scaleByDensity(32)));
    icon3.setImageDrawable(app.svgToBitmapDrawable(getResources(), R.raw.icon_search, app.scaleByDensity(32)));
    icon4.setImageDrawable(app.svgToBitmapDrawable(getResources(), R.raw.icon_add, app.scaleByDensity(32)));
    params = icon2.getLayoutParams();
    params.width = getResources().getDisplayMetrics().widthPixels / 4;
    params.height = (int) (48 * getResources().getDisplayMetrics().density);
    params = icon3.getLayoutParams();
    params.width = getResources().getDisplayMetrics().widthPixels / 4;
    params.height = (int) (48 * getResources().getDisplayMetrics().density);
    params = icon4.getLayoutParams();
    params.width = getResources().getDisplayMetrics().widthPixels / 4;
    params.height = (int) (48 * getResources().getDisplayMetrics().density);
    if (!firstLoad) {
        setBottomActionBarActive();
        setActiveTab(0);
    }

    optionsLoaded = true;

    return true;
}

initializeActionBar() 在我的 Activity 中从 onCreate 调用。知道我做错了什么吗?

最佳答案

应该使用工具栏。在您的情况下,它是顶部的一个工具栏,底部的一个。查看 android 团队博客,他们有很好的集成指南。

关于android - AppCompat v7 :21 Split Action Bar Broken?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26552039/

相关文章:

android-actionbar - 如何在 Lollipop 工具栏中显示图标应用程序?

java - (Android)我的简单抽屉导航 fragment 不起作用 - 请参阅错误图片

java - 如何将 TextWatcher 添加到多个编辑文本

android - 如何创建半透明的圆形工具栏/操作栏项目?

机器人: fragment 的 Recyclerview?

android - 当主题在两个库中声明样式时出现 gradle 错误

android - AppCompat 的 AccountAuthenticatorActivity

java - 单击按钮时创建 EditText

java.lang.IllegalArgumentException : bad base-64 when decrypting image 异常

android - 操作栏设置不显示