我有一个包含布局的活动。我在此布局中设置了10个图像按钮,并隐藏(不可见)。我试图以编程方式将图像加载到这些图像按钮,然后在屏幕上设置它们的位置。
我之前的讨论已经找到了:How to set margin of ImageView using code, not xml
然而,这不起作用。尽管设置了高度和宽度参数,但我得到了微小的图像按钮。这是我的代码:
RelativeLayout.LayoutParams lp1 = new RelativeLayout.LayoutParams(btnGP1.getLayoutParams());
lp1.leftMargin = P1leftValue;
lp1.topMargin = P1topValue;
lp1.height = 80;
lp1.width = 80;
btnGP1.setLayoutParams(lp1);
关于这一点是不对的,但我没有运气找到更准确的资源。有什么想法吗?
更新
我已经编辑了我的代码:
RelativeLayout.LayoutParams lp1 = (RelativeLayout.LayoutParams)btnGP1.getLayoutParams();
lp1.leftMargin = P1leftValue;
lp1.topMargin = P1topValue;
lp1.height = 280;
lp1.width = 280;
btnGP1.setLayoutParams(lp1);
它似乎几乎正常工作。现在唯一剩下的就是上面的函数似乎只允许我输入像素大小。我需要能够输入像素密度,因为并非所有的屏幕尺寸都相同。
我的新问题是:我该如何解决这个问题?这里有一个简单的答案吗?如果我尝试280dp或" 280dp"编译器不允许它。
答案 0 :(得分:0)
在另一个帖子中找到了答案。这是我的最终代码:
final float SCALE = getResources().getDisplayMetrics().density;
RelativeLayout.LayoutParams LP = new RelativeLayout.LayoutParams(btnGP15.getLayoutParams());
LP.leftMargin = (int) (P1leftValue * SCALE + 0.5f);
LP.topMargin = (int) (P1topValue * SCALE + 0.5f);
LP.height = (int) (tileSize * SCALE + 0.5f);
LP.width = (int) (tileSize * SCALE + 0.5f);
btnGP15是我的图像,P1leftValue和P1topValue存储我所需位置的dp值,例如100和150。 tileSize存储我的图像大小的dp值,在我的情况下为70。
完美地工作;)