0

我想为操作按钮制作教练标记,但我现在不知道如何在操作栏上获取他们的位置和填充。你可以看到我的想法,但我无法在这张照片中看到:

在此处输入图像描述

我有一个半透明的覆盖布局,但我想以完全透明的方式显示我正在描述的图标。

有没有办法做到这一点?提前致谢

编辑:实际上这些是我需要找到的值,因为它们在不同的设备中是不同的

在此处输入图像描述

EDIT2:使用 Nigam Patro 的解决方案,我结束了这个:

在此处输入图像描述

代码:

...
int[] filterPosition = new int[2];
findViewById(R.id.action_filter).getLocationOnScreen(filterPosition);
View filterDummy = coachMark.findViewById(R.id.filter_dummy);
filterDummy.setX(filterPosition[0]);
filterDummy.setY(filterPosition[1]);
...

布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/translucent"
    android:fitsSystemWindows="true"
    android:paddingBottom="@dimen/activity_vertical_margin" >

    <ImageView
        android:id="@+id/filter_dummy"
        android:layout_width="?android:attr/actionBarSize"
        android:layout_height="?android:attr/actionBarSize"
        android:padding="9dp"
        android:src="@drawable/ic_filter_false" />

</RelativeLayout

EDIT3:代码:

...
int[] filterPosition = new int[2];
View filterView = findViewById(R.id.action_filter);
filterView.getLocationOnScreen(filterPosition);
int paddingTop = filterView.getPaddingTop();
int paddingBottom = filterView.getPaddingBottom();
int paddingLeft = filterView.getPaddingLeft();
int paddingRight = filterView.getPaddingRight();
View filterDummy = coachMark.findViewById(R.id.filter_dummy);
int statusBarHeight = 0;
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
    statusBarHeight = getResources().getDimensionPixelSize(resourceId);
}
filterDummy.setX(filterPosition[0]);
filterDummy.setY(filterPosition[1] - statusBarHeight);
filterDummy.setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom);
...

结果: 在此处输入图像描述

非常接近,但仍然不对

4

1 回答 1

1

通过以下您可以从操作栏中获取视图

findViewById(R.id.menu_item);

通过使用这种方法,您可以获得视图的 X & Y 位置

View.getLocationOnScreen()

所以,在得到 X & Y 位置后得到状态栏的高度,

public int getStatusBarHeight() { 
      int result = 0;
      int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
      if (resourceId > 0) {
          result = getResources().getDimensionPixelSize(resourceId);
      } 
      return result;
} 

现在将 Y 与状态栏高度区分开来,您将获得活动内项目的原始高度 y 位置。

X 值是左边距,Y 值是上边距。

于 2015-12-11T10:54:46.617 回答