Как правильно расширить LinearLayout для создания пользовательского представления
У меня есть какая-то "карта", которая является простой LinearLayout с TextView внутри
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card="http://schemas.android.com/apk/res-auto"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<TextView
android:id="@+id/card_label_txt"
android:layout_width="wrap_content"
android:text="label" />
</LinearLayout>
тогда у меня есть мой основной фрагмент с вертикальной LinearLayout .. и в этом основном фрагменте я добавляю эти «карты» в основной макет:
# main fragment layout
View view = inflater.inflate(R.layout.main_activity, null);
LinearLayout ll = (LinearLayout) view
.findViewById(R.id.main_activity_ll);
# get card
View card = inflater.inflate(R.layout.card, null);
# add to fragment layout
ll.addView(card);
это работает очень хорошо, и моя карта заполняет всю ширину макета фрагмента. На самом деле то, что я ожидаю.
Теперь я создал отдельный класс для моей карты:
Class Card extends LinearLayout{
public Card(Context context) {
super(context);
View view = LayoutInflater.from(getContext()).inflate(
R.layout.card, null);
this.addView(view);
}
}
И затем, если я добавлю свою карточку в макет основного фрагмента следующим образом:
# main fragment layout
View view = inflater.inflate(R.layout.main_activity, null);
LinearLayout ll = (LinearLayout) view
.findViewById(R.id.main_activity_ll);
# add new Card to fragment layout
ll.addView(new Card(getActivity());
затем он добавляется, НО ширина карты больше не заполняется, а переносится на текстовое представление.
Может кто-нибудь объяснить мне, почему я получаю разные размеры ширины с помощью этих двух методов добавления одинаковых макетов?
Решение здесь изменен класс карт, решающий эту проблему:
public Card(Context context) {
super(context);
LayoutInflater.from(getContext()).inflate(
R.layout.card, this);
}
}