2011-12-13 13 views
11

Aktualnie programuję aplikację na Androida. Tam utknąłem z układem xml. Czy można przypisać wartość do znacznika xml za pomocą zmiennej (stałej) zdefiniowanej w klasie?android: przypisywanie stałej wartości elementowi xml

Mam klasy o nazwie Constants.java dla wszystkich moich stałych programu. Robię to dla lepszej łatwości konserwacji. teraz chciałbym użyć jednej z tych stałych, np. VAL zdefiniowany poniżej jako wartość dla interfejsu użytkownika widiowego.

w moim przypadku widget to pasek postępu (styl poziomy) i chciałbym zdefiniować wartość "android: max". normalnie można napisać:

android:max="10" 
android:max="@Integer/val 

ale chciałbym użyć wartości zdefiniowanej w klasie stałe, coś takiego:

android:max="Constants.VAL" 

Czy istnieje rozwiązanie tego?

dzięki

+0

Nie sądzę, czy to możliwe, czy nie, ale do takich celów używam ciągów strings.xml. Jest używany w taki sam sposób, jak twoja klasa Constants. – belurd

Odpowiedz

16

Nie, nie możesz. Stałe wartości w klasach są dostępne tylko w środowisku wykonawczym, a pliki XML są kompilowane i generowane przed uruchomieniem.

Kolejną najlepszą rzeczą do zrobienia jest zadeklarowanie stałych XML, których chcesz użyć w res/values/integers.xml. Oto przykład integers.xml file:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <integer name="max">10</integer> 
</resources> 

użyć tej wartości w swojej XML, to zrobić:

<YourComponent 
    android:yourattr="@integer/max"/> 
+0

Jeśli wartości stałe są dostępne tylko w środowisku wykonawczym, w jaki sposób możemy napisać 'layout_height =" match_parent "', ponieważ 'match_parent' jest stałą? –

0

Twoje pytanie nie jest bardzo jasne, co chcesz z tym zrobić? Jeśli chcesz użyć stałej wartości, po prostu utwórz widgety interfejsu ze stałymi i po prostu zignoruj ​​xml.

+0

Przeformułowałem pytanie w celu lepszego zrozumienia. Nie chcę twardej kodu wartości do pliku xml ze względu na łatwość konserwacji. – grAPPfruit

0

Jest to możliwe przy użyciu Data Binding.

Klasa powinna wyglądać mniej więcej tak:

class Constants extends BaseObservable { 

    private static final int MY_INT = 10; 

    @Bindable 
    public int getMyInt() { 
     return MY_INT; 
    } 
} 

i xml tak:

<layout 
    ... 
    > 
    <data> 
     <variable 
      name="constants" 
      type="your.package.Constants" /> 
    </data> 

... 

<YourComponent 
    android:max='@{constamts.myInt}' 

... 

</layout> 
  • Nie zapomnij ustawić wiązania się (binding.setConstants(constants)).
Powiązane problemy