android - 动态使用 RelativeLayout 并以 px、dp、inch、mm 为单位设置边距

标签 android layout landscape margins

我的应用程序只是一个带有缩放和拖动选项的修改过的 ImageViewer。 包含修改后的 Imageviewer 有一个 RelativeLayout(我想用作 AbsoluteLayout)。

然后,可以将新元素添加到布局中,将它们放置在图像的特定位置。元素的像素位置 (x, y) 在数据库中,所以我想没有其他方法可以通过编程方式添加它们,而不是使用 XML。

然后,每次执行拖动或缩放操作时,这些元素的位置都会更新。

问题是图像的像素与 RelativeLayout 中的像素不匹配!所以这些项目“或多或少”位于但不在正确的位置(离 (0,0) 越远,错误越大)。

我已经尝试过的事情:

  • 尝试不同的转换,因为问题可能与 Bitmap 和 Layout 之间的密度差异有关:

    Resources r = getResources();
    float x = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100, r.getDisplayMetrics());
    
  • 尝试在布局中使用不同的方法来设置边距:

    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    params.leftMargin = (int) newPosition.x;
    params.topMargin = (int) newPosition.y;
    element.setLayoutParams(params);
    
  • 我还想在 XML 中使用 RelativeLayout 可用的选项,但我确实无法以编程方式找到它,但我可以找到指定维度的方法,我的意思是:

    android:layout_marginLeft ="50px" // or "50mm", or dp, or inches...
    

最佳答案

您可以通过以下代码设置高度、宽度和边距:

//headView
RelativeLayout.LayoutParams head_params = (RelativeLayout.LayoutParams)headView.getLayoutParams();
head_params.setMargins(80, 0, 0, 0); //substitute parameters for left, top, right, bottom
head_params.height = 60; head_params.width = 200;
headView.setLayoutParams(head_params);

headView 是您应用的 View 。

关于android - 动态使用 RelativeLayout 并以 px、dp、inch、mm 为单位设置边距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6025872/

相关文章:

ios - Phonegap横向未检测到90和-90的方向

Android获取当前日期(时间为0 :00:000) in Milliseconds?

android - Kivy&Buildozer:如何在加载Android应用程序时播放音频?

android - 复杂 ListView 项中的 TextView 文本颜色因设备而异

android - 如何从旋转矢量 (Sensor.TYPE_ROTATION_VECTOR) 获取欧拉角

Android Spinner 下拉箭头不显示

android - 如何在 4 个按钮上方布置 3 个按钮,居中?

java - 如何将组件堆叠在另一个组件上,以保持其垂直尺寸?

iphone - 在 viewDidLoad 中触发旋转

css - execCommand不会在IE8/9中禁用“缩小以适合”-横向