2016-06-05 16 views
0

Ich verwende dimens.xml Datei Werte für verschiedene Layoutgrößen zuweisen (d [email protected] ​​, [email protected]).Assign match_parent als Dimen programmatisch

Beim Versuch, eine Dimen als wrap_Content zu setzen oder match_parent ich die folgende Art und Weise bin mit:

<resources> 
    <item name="match_parent" format="integer" type="dimen">-1</item> 
    <dimen name="popup_width">@dimen/match_parent</dimen> 
</resources> 

und es funktioniert perfekt, wenn diese Dimen im Layout-XML-Datei verwenden, aber wenn man versucht, es zu benutzen programmatisch wie wenn ein Popup-Fenster erklärt:

PopupWindow pw = new PopupWindow(layout, mContext.getResources().getDimension(R.dimen.popup_width), 
       ViewGroup.LayoutParams.MATCH_PARENT, true); 
pw.showAtLocation(layout, Gravity.CENTER, 40, 0); 

es überhaupt nicht funktioniert und es hält, wie wenn ich ein -1dp Werte an sie übergeben (es führt direkte Referenzierung), so dass das Layout ist überhaupt ruiniert.

Also wie kann ich das Match_parent Dimen in der Datei dimens.xml deklarieren, um es effizient in meinem Code zu verwenden? oder wie kann ich die aktuelle Dimenform auch effizient in meinem Code verwenden?

+0

'match_parent' und' wrap_content' nicht Dimensionen sind. – CommonsWare

+0

@CommonsWare also, gibt es keine Möglichkeit, irgendwelche von ihnen programmatisch als dynamische Dimension zu verwenden? !! oder noch etwas anderes? !! –

+0

Meine erste Frage ist, warum müssen Sie 'match_parent' als eine Dimension programmgesteuert verwenden? Sie könnten die Breite des Geräts finden und diese Breite programmatisch auf die Breite Ihres 'PopupWindow' setzen. –

Antwort

0

ich mein Problem gelöst -1.0px mit match_parent für die Darstellung und -2.0px zur Darstellung wrap_content als dp skaliert mit unterschiedlichem Dichte Bildschirm im Gegensatz zu px, die nicht auf andere Bildschirmdichten reagiert (und das, was in meiner Lösung Ich bin benötigen):

<dimen name="popup_width">-1.0px</dimen> <!-- for match_parent --> 

<dimen name="popup_height">-2.0px</dimen> <!-- for wrap_content --> 

und dann habe ich es programmatisch wie:

PopupWindow pw = new PopupWindow(layout, (int)mContext.getResources().getDimension(R.dimen.popup_width), 
     (int)mContext.getResources().getDimension(R.dimen.popup_height), true); // notice that they have to be casted as int