2012-01-16 11 views
6

Chcę oddzielić wykorzystanie mojej aplikacji na urządzeniach Xlarge i użycie na innych urządzeniach, aby ograniczyć parametr layout_width o 720dp dla xlarge. W tym celu utworzyć Wartości/attrs.xml:Jak odnieść atrybut androida layout_width z niestandardowego atrybutu?

<?xml version="1.0" encoding="UTF-8"?> 
<resources> 
    <attr name="layoutWidth" format="reference|dimension" /> 
</resources> 

z niestandardowych parametrów layoutWidth aby ustawić go w

android:layout_width="?layoutWidth" 

Furtner, trzeba określić dwa themes.xml pliki do Xlarge i zwykłe urządzenia w wartościach Xlarge i wartości katalogach:

wartości-XLarge/mes.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="Theme" parent="android:Theme"> 
     <item name="layoutWidth">720dp</item> 
    </style> 
</resources> 

wartości/themes.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="Theme" parent="android:Theme"> 
     <item name="layoutWidth">What should I write here!?</item> 
    </style> 
</resources> 

Tak, jak mogę złożyć odwołanie na Androida parametru "fill_parent" w tym miejscu? Wydaje się @android: layout_width/fill_parent, ale mam błąd kompilacji:

No resource found that matches the given name (at 'layoutWidth' with value '@android:layout_width/fill_parent'). 

Odpowiedz

7

Znalazłem rozwiązanie poprzez zmianę Wartości/attrs.xml do:

<?xml version="1.0" encoding="UTF-8"?> 
<resources>  
    <attr name="layoutWidth" format="dimension"> 
     <enum name="fill_parent" value="-1" /> 
     <enum name="match_parent" value="-1" /> 
     <enum name="wrap_content" value="-2" /> 
    </attr> 
</resources> 

teraz mogę napisać w wartości/themes.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="Theme" parent="android:Theme"> 
     <item name="layoutWidth">match_parent</item> 
    </style> 
<resources> 

Pozostaje jednak pytanie: czy możliwe jest odwołanie się do parametru layout_width systemu Android z tego miejsca?

+0

dobrze .. to jest lepsze niż nic .... Ponieważ te stałe są w oficjalnym Javadoc nie należy zbyt szybko zmienić ... Szczerze fill_parent i match_parent została włączona do pojedyncza stała (-1) w pewnym punkcie. Na początku były inne. –

0

Nie jestem pewien, czy można dodać ten atrybut gdzieś w swoich zasobach lub tagi stylu, ale może pomóc (jeśli jego prawny)

xmlns: android = "http://schemas.android.com/apk/ res/android "

Określa przestrzeń nazw, w której zdefiniowano szerokość układu i wysokość_klosu (a także stałe fill_parent i wrap_content).

1

Cóż, jest to późna reakcja ... ale dla potomności i rozsądku, odpowiedź można znaleźć poniżej, a więcej informacji można znaleźć na stronie http://developer.android.com/guide/topics/ui/themes.html

styles.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<style name="YourStyle" parent="@android:style/TextAppearance.Medium"> 
     <item name="android:layout_width">fill_parent</item> 
     <item name="android:layout_height">wrap_content</item> 
    </style> 
</resources> 

Powinno to działać dla każdego stylu macierzystego, który używa Androida: layout_width, na przykład parent = "@ android: style/Widget.TextView"

0

Powinieneś utworzyć plik attrs.xml w folderze wartości, a następnie dodać poniższy kod:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <item name="custom_match_parent" type="dimen">-1</item> 
    <item name="custom_wrap_content" type="dimen">-2</item> 
</resources> 

Aby uzyskać dostęp do powyższego pliku attrs.xml, należy dodać poniżej linię do swoich wymiarów.plik xml następująco:

<dimen name="max_layout_width">@dimen/custom_match_parent</dimen> 

teraz aby uzyskać dostęp do pliku z układu musi coś zrobić jak

<FrameLayout 
    android:layout_width="@dimen/max_layout_width" 
    android:layout_height="match_parent"> 
    <!--Do what you like to do here--> 
</FrameLayout> 

nadzieję, że to pomaga! :-)

Powiązane problemy