2013-05-05 5 views
0

Я пытаюсь сделать свой собственный LinearLayout, чтобы сделать его многоразовым и модульным. первым мой код выглядит следующим образом, который работал отлично:Пользовательский линейный макет

mLlHeader = (LinearLayout)view.findViewById(R.id.ll_header); 
     mTvCrump = new TextView(mContext); 
     mTvCrump.setText("> "+((Item) mNavigationHistory.get(mNavigationHistory.size()-1)).getName()); 
     mTvCrump.setId(mNavigationHistory.size()-1); 
     mTvCrump.setClickable(true); 
     mTvCrump.setOnClickListener(mBreadcrumpListener); 
     mBreadcrump.add(mTvCrump); 
     mLlHeader.addView(mTvCrump,mNavigationHistory.size()-1); 

Теперь я хочу сделать свой собственный класс LinearLayout так:

public class Breadcrump extends LinearLayout { 

    private List<? super Item> mNavigationHistory = new ArrayList<Item>(); 
    private List<TextView> mElements = new ArrayList<TextView>(); 

    public Breadcrump(Context context) { 
     super(context); 
    } 

    public Breadcrump(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

    public void addElement (String name) { 

    } 

} 

мой XML выглядит следующим образом:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/cell_selected" 
    android:gravity="left" 
    android:orientation="vertical" 
    android:padding="5dp" > 

     <com.client.views.Breadcrump 
     android:id="@+id/ll_breadcrump" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" /> 
</LinearLayout> 

и использовать его следующим образом:

EDIT

я добавил пространство имен в файле XML-макет, где я использовать свой собственный взгляд и новый конструктор в классе представления с набором атрибутами. Теперь приложение запускается. Но он отображает только мой пользовательский вид, а остальная часть макета - белая?

+0

В зависимости от ваших требований, вас может заинтересовать этот класс: ['FragmentBreadCrumbs'] (http://developer.android.com/reference/android/app/FragmentBreadCrumbs.html) – kcoppock

+0

У меня был небольшой взгляд на это, но я подумал, что все это уже очевидно для моего использования. – AdrianoCelentano

+0

ОК, наконец, сделал это, наконец, установил размеры макета для «wrap_content» ^^ – AdrianoCelentano

ответ

2

В файле XML макет, вы, вероятно, что-то вроде этого:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/ll_header" 
    ... /> 

Попробуйте изменить его на

<?xml version="1.0" encoding="utf-8"?> 
<com.client.views.Breadcrump 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/ll_header" 
    ... /> 

EDIT: как использовать его в своей деятельности?

Если файл разметки XML называется main.xml, то просто позвоните setContentView(R.layout.main) в onCreate() методе вашей деятельности. Ваш Breadcrump получает внутреннюю инициализацию. Затем вы можете получить ссылку на него с (Breadcrump)view.findViewById(R.id.ll_header).

+0

, когда я делаю это так, я получаю ошибку xml ' ' – AdrianoCelentano

+0

eror is 'unbound prefix' – AdrianoCelentano

+1

Похоже, что вам не хватает' xmlns: android = "http://schemas.android.com/apk/res/android" '. Пожалуйста, взгляните на редактирование, которое я сделал для ответа. – zbr

Смежные вопросы