我正在处理我的应用中的一项功能,我需要知道父视图的确切高度。但显然这个值在某些设备上是错误的(例如我的华为P8 lite)。
当我尝试在点(x,view.getheight)绘制一些东西时,我意识到这是错误的,其中点没有出现在底部,而是靠近屏幕的中间。我的Google Nexus不是这种情况。
以下是问题所在的代码片段:
final OverlayBuilder builder = new OverlayBuilder(context, parentView, tag);
builder.setOnLayoutListener(new ServiceCallback<OverlayBuilder.OverlayRelativeLayout>() {
@Override
public void onSuccess(OverlayBuilder.OverlayRelativeLayout overlayLayout) {
ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) createAgentBtn.getLayoutParams();
LinearLayout childContainer = overlayLayout.getChildContainer();
int parentHeight = parentView.getHeight();
View iconView = childContainer.getChildAt(0);
View textView = childContainer.getChildAt(1);
int noContentViewHeight = iconView.getHeight() + textView.getHeight();
int btnHeight = createAgentBtn.getHeight() + lp.topMargin + lp.bottomMargin;
int bottomOffset = ((parentHeight - btnHeight) / 2) - (noContentViewHeight / 2);
int aStartY = bottomOffset + noContentViewHeight;
int aEndY = parentHeight - btnHeight;
ArrayList<Integer> layoutRules = new ArrayList<>(RelativeLayout.ALIGN_PARENT_BOTTOM);
builder.setGroupParams(layoutRules, RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT, 0, bottomOffset, LinearLayout.VERTICAL)
.drawCurvedArrow(300, aStartY, 300, aEndY, -225, R.color.turtle_green, OverlayBuilder.STANDARD_LINESIZE, OverlayBuilder.STANDARD_ARROWSIZE).layout().commit();
}
@Override
public void onFail(Throwable t) {
Log.e(tag, "Failed to display empty state onboarding");
}
});
对于记录,名为OverlayBuilder的类是一个构建器类,用于在运行时在屏幕上绘制不同的东西。如果我在两点之间画一个箭头,但是我的华为P8上的线/箭头的开头和结尾都是完全错误的。
我怀疑getHeight()在某些情况下会返回dp,而在我的Google Nexus中会返回px。如果是这种情况,如何正确修复? 变量parentHeight是包含错误高度的变量。