2011-12-13 28 views
11

Tôi hiện đang lập trình một ứng dụng Android. Có tôi đang mắc kẹt với xml-bố trí. Có thể gán một giá trị cho một thẻ xml bằng cách sử dụng một biến (hằng số) được định nghĩa trong một lớp không?android: chỉ định giá trị không đổi cho một phần tử xml

tôi có một lớp được gọi là Constants.java cho tất cả các hằng số chương trình của mình. tôi làm điều này để bảo trì tốt hơn. bây giờ tôi muốn sử dụng một trong các hằng số này, ví dụ: VAL như được định nghĩa dưới đây làm giá trị cho ui-widged.

public class Constants { 
public static final int VAL = 10; 
... 
} 

trong trường hợp của tôi, tiện ích là thanh tiến trình (kiểu nằm ngang) và tôi muốn xác định giá trị "android: max". thường người ta có thể viết:

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

nhưng tôi muốn sử dụng các giá trị được định nghĩa trong lớp hằng của tôi, một cái gì đó như:

android:max="Constants.VAL" 

là có một giải pháp cho điều đó?

cảm ơn

+0

Tôi không nghĩ rằng nếu có thể hay không, nhưng tôi sử dụng strings.xml cho các mục đích như vậy. Nó được sử dụng theo cách tương tự như lớp Constants của bạn. – belurd

Trả lời

16

Không, bạn không thể. Các giá trị không đổi trong các lớp chỉ có sẵn khi chạy và các tệp XML được biên dịch và tạo ra trước khi chạy.

Điều tốt nhất tiếp theo cần làm là khai báo các hằng số XML bạn muốn sử dụng trong res/values/integers.xml. Dưới đây là một ví dụ integers.xml file:

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

sử dụng giá trị này trong XML của bạn, làm điều này:

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

Nếu giá trị hằng số chỉ có sẵn khi chạy, làm thế nào chúng ta có thể viết 'layout_height =" match_parent "', vì 'match_parent' là một hằng số? –

0

Câu hỏi của bạn không rõ ràng, bạn muốn làm gì với điều đó? Nếu bạn muốn sử dụng giá trị không đổi thì chỉ cần tạo ui-widgets với các hằng số và chỉ bỏ qua xml.

+0

tôi lặp lại câu hỏi để hiểu rõ hơn. tôi không muốn mã hóa giá trị vào tệp xml vì lý do bảo trì. – grAPPfruit

0

Có thể sử dụng Data Binding.

Lớp nên tìm một cái gì đó như thế này:

class Constants extends BaseObservable { 

    private static final int MY_INT = 10; 

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

và xml như thế này:

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

... 

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

... 

</layout> 
  • Đừng quên để thiết lập các ràng buộc chính nó (binding.setConstants(constants)).
Các vấn đề liên quan