应用程序徽标位于操作栏的一半,一半位于mainActivity屏幕上

时间:2014-08-07 07:01:31

标签: android android-layout

在Android中可以实现这样的功能吗?我的猜测不是因为你可以指定两个不同的布局,一个用于ActionBar,一个用于活动,但我可能也错了

enter image description here

1 个答案:

答案 0 :(得分:1)

这是一个比之前建议的PopupWindow更加可靠的解决方案。

徽标叠加层的布局很简单ImageView,我们已将clickable属性设置为true,以防止触摸事件传播到View在下面。

logo.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类是View可以可以在布局XML中轻松设置和操作。

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);
            }
        }
    );
}