2010-01-08 30 views
28

Chúng tôi có trong dự án của chúng tôi một bàn phím với các yếu tố "Key", yếu tố Key này có các thuộc tính như android: codes = "119", android: keyLabel = "w" và cứ thế.Làm cách nào để tạo thuộc tính tùy chỉnh trên xml cho Android?

Câu hỏi của tôi là làm cách nào để có thể bao gồm thuộc tính tùy chỉnh như "android: alternativeKeyLabel" để làm điều gì đó khác.

Trả lời

0

android: keyLabel là một trong nhiều thuộc tính XML được sử dụng bởi lớp Keyboard.Key cho mỗi khóa trên bàn phím của bạn. android: keyLabel là những gì bạn muốn gắn nhãn bằng (giống như "w" như ở trên). Các thuộc tính được xác định trước cho lớp. "W" không phải là android: keyLabel. Nếu bạn có thể tạo android: alternativeKeyLabel, bạn sẽ mong đợi lớp học làm gì với nó? Tôi nghĩ có lẽ bạn nên cố gắng giải thích thêm những gì bạn đang cố gắng hoàn thành.

4

Bạn có thể tạo thuộc tính tùy chỉnh cho các lớp của riêng bạn mở rộng Chế độ xem hoặc phân lớp. Quá trình này được diễn tả trong "sẵn các loại tài nguyên" của Dev Guide Android dưới tiêu đề "Custom Layout Tài":

https://developer.android.com/guide/topics/resources/available-resources.html#customresources

Có một ví dụ trong Demo API gọi LabelView:

https://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/LabelView.html

https://developer.android.com/resources/samples/ApiDemos/res/values/attrs.html

52

liên kết này cung cấp cho một lời giải thích hời hợt: http://developer.android.com/guide/topics/ui/custom-components.html

Xét bạn có một CustomKeyboard được thừa kế từ KeyboardView/Xem:

  1. Tạo thuộc tính tùy chỉnh của bạn trong res/values ​​/ file attrs.xml (tạo file nếu nó không tồn tại):
<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <declare-styleable name="custom_keyboard"> 
     <attr name="alternative_key_label" format="string" /> 
    </declare-styleable> 

</resources> 
  1. Tạo một constructor trong phần overri tùy chỉnh của bạn ding constructor mặc định nhận tập thuộc tính vì nó sẽ được gọi khi layout được nạp.

    public CustomKeyboard(Context context, AttributeSet set) { 
        super(context, set); 
        TypedArray a = context.obtainStyledAttributes(set,R.styleable.custom_keyboard); 
        CharSequence s = a.getString(R.styleable.custom_keyboard_alternative_key_label); 
        if (s != null) { 
         this.setAlternativeKeyLabel(s.toString()); 
        } 
        a.recycle(); 
    } 
    
  2. Trong tệp bố cục, thêm thành phần tùy chỉnh và liên kết đến tài nguyên của bạn.

<Layout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res/your.package.ProjectName" 
    .../> 
    ... 
    <your.package.projectname.CustomKeyboard 
     android:id="@+id/my_keyboard" 
     ... 
     app:alternative_key_label="F"> 
    </your.package.projectname.CustomKeyboard> 
</Layout> 
+6

Khi cố gắng sử dụng quan điểm tuỳ chỉnh với các thuộc tính tùy chỉnh từ các thư viện (ví dụTùy chỉnh nút đăng nhập Facebook), bố cục sử dụng thuộc tính tùy chỉnh phải sử dụng URI không gian tên "http://schemas.android.com/apk/res-auto" thay vì URI bao gồm tên gói ứng dụng. URI này được thay thế bằng ứng dụng cụ thể tại thời điểm xây dựng. Tức là, "xmlns: app ..." phải được thay thế bằng: xmlns: custom = "http://schemas.android.com/apk/res-auto" Và khi sử dụng, "app: custom_property. .. "với: " tùy chỉnh: custom_property ... " Obs .: chỉ sửa đổi ADT 17+ hỗ trợ thêm cho việc này. – JPMagalhaes

+1

Để người đọc trong tương lai: Hãy cẩn thận để đọc ví dụ mã cuối cùng hoàn chỉnh. Dòng 'xmlns: app =" http: // schemas.android.com/apk/res/your.package.ProjectName' trong phần tử cấp cao nhất là bắt buộc để có thể truy cập vào không gian tên ứng dụng – Bjorninn

+1

theo thông tin @JPMagalhaes : xmlns: custom = "schemas.android.com/apk/res-auto làm việc cho tôi. cảm ơn bạn! – drdrej

8

Đối với bất kỳ mục đích nào khác, tuyên bố một tài sản tùy chỉnh trong file XML có thể được lấy với tham số attrs constructor.

Trong trường hợp của tôi, tôi tái sử dụng một hộp thoại sở thích tùy chỉnh, và thiết lập những thứ như thế:

<?xml version="1.0" encoding="utf-8"?> 
<!-- something here --> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > 
    <your.package.projectname.CustomView 
     foo="bar" 
    /> 
</PreferenceScreen> 

Sau đó, trong lớp contructor của tôi:

public CustomView(Context context, AttributeSet attrs) { 
    String bar = attrs.getAttributeValue(null, "foo"); 
    Log.d("CustomView", "foo=" + bar); 
} 
Các vấn đề liên quan