Почему некоторые представления в линейном макете в представлении прокрутки заполняют родительский элемент, если для параметра fill_parent задано значение, когда оно надувается непосредственно из xml, а не при добавлении через пользовательский компонент, который надувает тот же xml?
Результат раздувания одного и того же xml в двух разных местах:
Верхний элемент этих двух элементов является результатом надувания xml в классе, расширяющем linearLayout, и последующего добавления этого класса к linearLayout в представлении прокрутки. Это представление не заполняет родителя, и я не могу понять, почему.
Нижний элемент - это результат раздувания xml непосредственно в действии, в котором все это содержится. Похоже, как я ожидал.
Это код, который добавляет два вида в упражнении:
scrollList.addView(new CommunityTaskListItem(this, null));
scrollList.addView(View.inflate(getBaseContext(), R.layout.communitytask, null));
Это код, который раздувает активность в классе пользовательского компонента "CommunityTaskListItem":
View communityTask = View.inflate(context, R.layout.communitytask, null);
addView(communityTask);
Я полагаю, что xml в порядке, потому что он работает нормально, когда надувается непосредственно в упражнении. Мой вопрос заключается в том, почему свойство fill_parent, похоже, теряется при накачке xml в классе пользовательского компонента?
Для примера, здесь раздувается xml: РЕДАКТИРОВАТЬ: Я дал вам неправильный один раньше !!! Вот правильный:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent" android:layout_height="wrap_content">
<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/linearLayout1" android:background="@drawable/plainbutton" android:layout_marginBottom="5px" android:layout_marginTop="5px" android:layout_weight="1">
<TextView android:layout_height="wrap_content" style="@style/CommunityTaskText" android:layout_width="fill_parent" android:layout_weight="1" android:id="@+id/textViewCommunityTaskTimes" android:text="xx:xx - xx:xx"></TextView>
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" style="@style/CommunityTaskText" android:id="@+id/textViewCommunityTaskDescription" android:text="Task"></TextView>
</LinearLayout>
</LinearLayout>
Я бы хотел сохранить пользовательский компонент и не раздувать xml в своей деятельности, если бы мог.
РЕДАКТИРОВАТЬ: Код, где накачан CommunityTaskListItem:
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
public class CommunityTaskListItem extends LinearLayout {
TextView textViewCommunityTaskTimes;
TextView textViewCommunityTaskDescription;
public CommunityTaskListItem(Context context, AttributeSet attrs) {
super(context, attrs);
View communityTask = View.inflate(context, R.layout.communitytask, null);
addView(communityTask);
textViewCommunityTaskTimes = (TextView)findViewById(R.id.textViewCommunityTaskTimes);
textViewCommunityTaskDescription = (TextView)findViewById(R.id.textViewCommunityTaskDescription);
}
...
РЕДАКТИРОВАТЬ: Все работает сейчас! Вот окончательный код для всех остальных, если у них есть похожая проблема:
Конструктор для пользовательского объекта:
public CommunityTaskListItem(Context context, AttributeSet attrs) {
super(context, attrs);
setOrientation(VERTICAL);
addView(inflate(context, R.layout.communitytask, null));
textViewCommunityTaskTimes = (TextView)findViewById(R.id.textViewCommunityTaskTimes);
textViewCommunityTaskDescription = (TextView)findViewById(R.id.textViewCommunityTaskDescription);
}
Пользовательский объект xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/linearLayout1" android:background="@drawable/plainbutton" android:layout_marginBottom="5px" android:layout_marginTop="5px" android:layout_weight="1">
<TextView android:layout_height="wrap_content" style="@style/CommunityTaskText" android:layout_width="fill_parent" android:layout_weight="1" android:id="@+id/textViewCommunityTaskTimes" android:text="xx:xx - xx:xx"></TextView>
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" style="@style/CommunityTaskText" android:id="@+id/textViewCommunityTaskDescription" android:text="Task"></TextView>
</LinearLayout>
</LinearLayout>
Если честно, я не знаю точно, какую ошибку я совершил, поэтому, если бы кто-то мог это объяснить, я был бы очень благодарен.