应用程序图标位于ActionBar的一半和mainActivity屏幕的一半

3
这样的功能在Android中能实现吗?我的猜测是不行,因为你可以为ActionBar和Activity指定两个不同的布局,但我也可能错了。

1
可以实现。我的想法是制作自己的ActionBar,并使用FrameLayout将图标放置在您想要的位置。 - Mladen Rakonjac
我以前实现过自己的ActionBar布局,但是我无法将图标放在ActionBar和Activity屏幕的中间。 - Libathos
你尝试过使用包含图标布局和其他所有内容布局的Framelayout吗? - Mladen Rakonjac
不,布局的结尾应该在ActionBar的结尾处,我无法克服这个问题。 - Libathos
你可以有点作弊,使用一个覆盖ActionBar和主布局的PopupWindow。 - Mike M.
我该如何使用PopupWindow?它不会占据所有的焦点吗?我以前从未使用过,所以想问一下。 - Libathos
1个回答

1
这是比之前建议的 PopupWindow 更可靠的解决方案。
标志覆盖层的布局是一个简单的 ImageView,我们已将 clickable 属性设置为 true,以防止触摸事件传播到下面的 Viewlogo.xml 布局:
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000000"
    android:scaleType="fitXY"
    android:src="@drawable/ic_launcher"
    android:clickable="true" />

这种方法旨在与旧版的 ActionBar 一起使用,并依赖于主页 View 作为覆盖层的锚点。但是,它可以很容易地修改为与支持 Toolbar 类和其徽标 View 一起使用,尽管这可能是不必要的,因为 Toolbar 类是一个可以在布局 XML 中轻松设置和操作的 View
private void showLogoOverlay() {
    final View anchor = findViewById(android.R.id.home);
    if(anchor == null) {
        return;
    }

    final View overlay = getLayoutInflater().inflate(R.layout.logo, null, false);
    final ViewGroup decor = (ViewGroup) getWindow().getDecorView();

    anchor.addOnLayoutChangeListener(new OnLayoutChangeListener() {
            @Override
            public void onLayoutChange(View v, int left, int top, int right,
                                       int bottom, int oldLeft, int oldTop,
                                       int oldRight, int oldBottom) {

                int[] offset = new int[2];
                anchor.getLocationOnScreen(offset);

                decor.addView(overlay, 200, 200);
                overlay.setX(offset[0]);
                overlay.setY(offset[1]);

                anchor.removeOnLayoutChangeListener(this);
            }
        }
    );
}

1
非常感谢!请给我一些时间来检查它! - Libathos
1
好的,不用担心,我知道如何为ActionBar制作自定义布局,只是图标的位置让我困扰,如果我遇到任何问题,我会再联系你。 - Libathos
嘿,抱歉我离开了一会儿。我刚试了你的代码,它很棒,非常感谢!但是我在调用pop.showAsDropDown时遇到了问题,它需要最低API 19,是否有适用于API 10及以上版本的解决方法? - Libathos
抱歉再次打扰您,我已在Android 4.4中测试了我的应用程序,弹出窗口卡在屏幕左边框旁边。这在2.3.3中不会发生。您知道我可以尝试什么吗?再次抱歉... - Libathos
我正在使用ActionBarSherlock。 - Libathos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接