2015-03-31 4 views
0

Я использую сторонний пакет Android, который определяет класс пользовательского интерфейса HeaderBar. Этот класс имеет закрытый член, который является всплывающим окном.В Android, как получить ссылку на popupwindow, который является частным членом настраиваемого HeaderBar

Я хочу сбросить ширину всплывающего окна, но я не могу получить ссылку всплывающего окна из экземпляра HeaderBar. Есть ли способ получить ссылку на него из иерархии представлений Android?

+2

Можете ли вы разместить код? – androidevil

+0

Извините. Возможно, я не смогу отправить код. – HChen

ответ

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)); 
} 
... 
}