使用代码设置图像布局(Android Studio)
Setting image layouts using code (Android Studio)
我有一个 activity,其中包含布局。我在此布局中设置并隐藏(不可见)了 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”,编译器将不允许。
这个问题的答案是在另一个线程中找到的。这是我的最终代码:
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。
工作完美 ;)
我有一个 activity,其中包含布局。我在此布局中设置并隐藏(不可见)了 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”,编译器将不允许。
这个问题的答案是在另一个线程中找到的。这是我的最终代码:
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。
工作完美 ;)