为什么在直接从 xml 膨胀时设置了 fill_parent 时,滚动视图中的线性布局中的某些视图会填充父级,但在通过膨胀相同 xml 的自定义组件添加时却没有?
在两个不同的地方膨胀相同的 xml 的结果:
两者中最重要的一项是在扩展 linearLayout 的类中扩展 xml,然后将该类添加到滚动视图内的 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 没问题,因为直接在活动中膨胀时它可以正常工作。我的问题是为什么当 xml 在自定义组件的类中膨胀时,fill_parent 属性似乎丢失了?
为了更好的衡量,这里是被夸大的 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>
老实说,我不知道我到底犯了什么错误,所以如果有人能说清楚,我将非常感激。