为什么要使用 setX 和 setY?
Why use setX and setY?
好的,现在我知道这个问题似乎有一个明显的答案,但实际上 setX 和 setY 函数有什么问题,为什么它们不能按预期工作。我正在尝试动态移动视图,而应用 运行 某些 positions.They 在我的带有 mdp 的测试设备上运行良好,但是当我使用具有不同密度的设备时一切都会改变 value.The Y 轴始终关闭按一个常数值,不,这不是填充或边距问题我什至试图将它除以 context.getResources().getDisplayMetrics().density;
考虑到密度差异,但它也没有用。
最后我在这个 post 中使用了答案并且它有效但我仍然有其他密度设备的问题。
这是它的建议:
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
//WRAP_CONTENT param can be FILL_PARENT
params.leftMargin = 206; //XCOORD
params.topMargin = 206; //YCOORD
childView.setLayoutParams(params);
有人能告诉我为什么会这样吗? setX 和 setY 应该让它更容易......对吧?如果我只是说 none 感觉,你可以帮我解决这个问题,我将不胜感激,我最近尝试了一切!
This explains how to convert dp to px programmatically
长话短说:您在 xml 中可以表示为 dp 值的 View 对象上设置的每个数值,在您以编程方式设置它们时都表示为原始像素。以下代码片段告诉您如何将 dp 转换为原始像素:
// The gesture threshold expressed in dp
private static final float GESTURE_THRESHOLD_DP = 16.0f;
// Get the screen's density scale
final float scale = getResources().getDisplayMetrics().density;
// Convert the dps to pixels, based on density scale
mGestureThreshold = (int) (GESTURE_THRESHOLD_DP * scale + 0.5f);
// Use mGestureThreshold as a distance in pixels...
希望对您有所帮助!
经过大量研究,我终于解决了这个问题。我所拥有的是一个 GridView 和几个 LinearLayout 都包裹在一个 relativeLayout 中,我使用 getLocationOnScreen() 来获取 gridView 中一个单元格的坐标,这样我就可以在它上面放置视图,由于某种原因,Y 轴始终存在固定值差异,随设备密度的不同而变化,最后我将 GridView 单独放在 relativeLayout 中,因此它是唯一的 child 并使用 getX() getY () 获取视图直接 parent 内的坐标 ,结果正是我想要的,我什至不必计算不同密度的屏幕。
希望这对可能遇到同样问题的人有所帮助。
好的,现在我知道这个问题似乎有一个明显的答案,但实际上 setX 和 setY 函数有什么问题,为什么它们不能按预期工作。我正在尝试动态移动视图,而应用 运行 某些 positions.They 在我的带有 mdp 的测试设备上运行良好,但是当我使用具有不同密度的设备时一切都会改变 value.The Y 轴始终关闭按一个常数值,不,这不是填充或边距问题我什至试图将它除以 context.getResources().getDisplayMetrics().density;
考虑到密度差异,但它也没有用。
最后我在这个 post 中使用了答案并且它有效但我仍然有其他密度设备的问题。
这是它的建议:
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
//WRAP_CONTENT param can be FILL_PARENT
params.leftMargin = 206; //XCOORD
params.topMargin = 206; //YCOORD
childView.setLayoutParams(params);
有人能告诉我为什么会这样吗? setX 和 setY 应该让它更容易......对吧?如果我只是说 none 感觉,你可以帮我解决这个问题,我将不胜感激,我最近尝试了一切!
This explains how to convert dp to px programmatically
长话短说:您在 xml 中可以表示为 dp 值的 View 对象上设置的每个数值,在您以编程方式设置它们时都表示为原始像素。以下代码片段告诉您如何将 dp 转换为原始像素:
// The gesture threshold expressed in dp
private static final float GESTURE_THRESHOLD_DP = 16.0f;
// Get the screen's density scale
final float scale = getResources().getDisplayMetrics().density;
// Convert the dps to pixels, based on density scale
mGestureThreshold = (int) (GESTURE_THRESHOLD_DP * scale + 0.5f);
// Use mGestureThreshold as a distance in pixels...
希望对您有所帮助!
经过大量研究,我终于解决了这个问题。我所拥有的是一个 GridView 和几个 LinearLayout 都包裹在一个 relativeLayout 中,我使用 getLocationOnScreen() 来获取 gridView 中一个单元格的坐标,这样我就可以在它上面放置视图,由于某种原因,Y 轴始终存在固定值差异,随设备密度的不同而变化,最后我将 GridView 单独放在 relativeLayout 中,因此它是唯一的 child 并使用 getX() getY () 获取视图直接 parent 内的坐标 ,结果正是我想要的,我什至不必计算不同密度的屏幕。 希望这对可能遇到同样问题的人有所帮助。