我使用以下代码:
String[] UIItems = new String[5];
UIItems[0] = "game_area_holder";
UIItems[1] = "topListBtn";
UIItems[2] = "bigBtn";
UIItems[3] = "reposBtn";
UIItems[4] = "sectorStateColorLine";
for (int number = 0; number < UIItems.length; number++) {
itemID = getResources().getIdentifier(UIItems[number],"id",getPackageName());
ImageView aktUIItem = (ImageView) findViewById(itemID);
FrameLayout.LayoutParams aktUIItemParams = (FrameLayout.LayoutParams)aktUIItem.getLayoutParams();
.
. doing things here with aktUIItemParams
.
}
这样可以正常工作,但如果我将其中一个图像放入另一个布局(线性,相对等),那么我会收到一条错误消息:
java.lang.ClassCastException:android.widget.RelativeLayout $ LayoutParams无法强制转换为android.widget.FrameLayout $ LayoutParams
当然,这是因为父级不是FrameLayout ......但是如何以编程方式检查图像的父级布局类型?或者我如何将getLayoutParams()转换为&#34;标准&#34;的LayoutParams?
答案 0 :(得分:2)
如果ViewGroup.LayoutParams
不适用于你,那么你需要进行instanceof
检查,看看布局参数是否属于你可以使用的类型:
ViewGroup.LayoutParams layoutParams = aktUIItem.getLayoutParams();
if (layoutParams instanceof FrameLayout.LayoutParams) {
FrameLayout.LayoutParams frameLayoutParams = (FrameLayout.LayoutParams)layoutParams;
...// do that old school logic
}
// ignore layoutParams or do another instance of check.
我建议您查看google文档PPartisan链接(here)中列出的子类(直接和间接),以确定哪些子类提供了您需要调用的方法。然后调用仍然拥有所需方法的最超级类。这样就可以最大限度地减少所需的实例检查次数。
答案 1 :(得分:0)
我在不了解父级的情况下也遇到了更改布局边距的问题,解决方法如下
ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) containerLayout.getLayoutParams();
lp.setMargins(0, 0,0, Helper.getDPI(8,context));
containerLayout.setLayoutParams(lp);