我使用第三方Android软件包,它定义了一个HeaderBar UI类。这个类有一个私有成员,它是一个弹出窗口。
我想重置弹出窗口的宽度,但是我无法从HeaderBar的实例获得弹出窗口的引用。有什么方法可以从Android的视图层次结构中获取它的引用吗?
答案 0 :(得分:0)
我最终使用java反射来获取弹出窗口的引用,即使它是私有的。
class MyHeaderBar extends HeaderBar {
private int defaultWidth = 0;
...
private PopupWindow getPopupWindow() {
try{
Field field = HeaderBar.class.getDeclaredField("mPopupWindow");
field.setAccessible(true);
Object value = field.get(this);
field.setAccessible(false);
if (value != null && PopupWindow.class.isAssignableFrom(value.getClass())) {
return (PopupWindow) value;
}
} catch (NoSuchFieldException e) {
} catch (IllegalAccessException e) {}
return null;
}
@Override
public vod showPopupWindow() {
super.showPopupWindow();
PopupWindow pw = getPopupWindow();
if (defaultWidth == 0)
defaultWidth = pw.getWidth();
pw.setFixedWidth((int)(defaultWidth * 1.15));
}
...
}