2015-12-15 17 views
5

Tôi đã nhìn thấy rất nhiều bài đăng với những người muốn biết cách nhận thuộc tính tùy chỉnh cho thành phần tùy chỉnh nhưng đó không phải là câu hỏi của tôi. Tôi đã tạo ra một thành phần tùy chỉnh và tôi đang cố gắng thêm thuộc tính nhưng khi tôi thêm không gian tên ở đầu tệp xml của tôi, nó chỉ tìm thấy hai thuộc tính tuỳ chỉnh ngẫu nhiên "paddingEnd" và "paddingStart".Thuộc tính tùy chỉnh Android không hiển thị

<resources> 
    <declare-styleable name="menu_item_attrs"> 
     <attr name="imageId" format="integer" /> 
     <attr name="menuText" format="string" /> 
    </declare-styleable> 
</resources> 

Đây là tệp attrs.xml.

public MenuListItem(Context context, AttributeSet set) { 
    super(context, set); 

    TypedArray a = context.obtainStyledAttributes(set, R.styleable.menu_item_attrs); 
    if (a == null) { 
     return; 
    } 
    CharSequence s = a.getString(R.styleable.menu_item_attrs_menuText); 
    if (s != null) { 
     // do something 
    } 
} 

Đây là hàm tạo trong lớp tùy chỉnh của tôi.

 <LinearLayout 
      xmlns:custom="http://schemas.android.com/apk/res-auto" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:id="@+id/expanding_layout" 
      android:background="#029eed"> 

      <aaron.testappanim.MenuListItem 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content"/> 
     </LinearLayout> 

Đây là thành phần của tôi đang được sử dụng. Tôi muốn thêm các giá trị vào "imageId" và "menuText" nhưng chúng không có sẵn. Những điều duy nhất hiển thị là padding liên quan như hình dưới đây.

enter image description here

Bất kỳ ý tưởng nào?

Trả lời

12

Tìm thấy giải pháp.

Vì điều đó xảy ra, bạn cần có tên có thể tạo kiểu giống với tên lớp của bạn.

<resources> 
    <declare-styleable name="MenuListItem"> 
     <attr name="my_custom_attribute" format="integer" /> 
    </declare-styleable> 
</resources> 

Nhiều bài đăng về chủ đề này sai trong trường hợp đó vì tôi có thể thấy nhiều với tên kiểu hoàn toàn khác.

Hy vọng điều này có thể ngăn người khác rơi vào bẫy này.

Cheers

+0

này đã giúp tôi rất nhiều sau khi sục sạo trên Internet cho một câu trả lời cho vấn đề đơn giản này. Cảm ơn bạn! – chaser

-1

Giải pháp của tôi là: Trong tập tin attr.xml, bạn có thể đã tuyên bố thuộc tính tùy chỉnh của bạn như sau

<declare-styleable name="IDEditText"> <attr name="customFont" format="string"/> </declare-styleable>

Ở đây, lĩnh vực tên của declare-styleable phải tên của chế độ xem tùy chỉnh. Sau đó, nó sẽ hiển thị trong các đề xuất.

Trong mycase tên giao diện tùy chỉnh của tôi là IDEditText, vì thế mà declare-styleable name = "IDEditText"

+1

Điều này là chính xác .. tuy nhiên nó đã được trả lời! Dù sao cũng cảm ơn bạn! – Murphybro2

+0

Bạn đang chào mừng. Tôi chỉ gặp vấn đề này, vì vậy nghĩ rằng nó có thể giúp người khác – Vishnu

Các vấn đề liên quan