我有一个我需要填充屏幕的布局,根据布局的内容,我可能需要在它下面添加条款和条件。我使用了scrollview,fillViewport属性允许我很好地填充主要布局,但是当我添加这些术语时,它会调整所有内容。
有没有办法将项目添加到滚动视图以填充在特定点下方而不调整其上方的所有内容?如果没有,是否有可以完成同样事情的解决方法?
布局和视觉示例:
在此布局中,最后一项的可见性设置为' GONE',因此3个文字视图填满了屏幕......
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/sampleItem1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@android:color/holo_red_dark"
android:text="SAMPLE VIEW 1"
android:gravity="center"/>
<TextView
android:id="@+id/sampleItem2"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@android:color/white"
android:text="SAMPLE VIEW 2"
android:gravity="center"/>
<TextView
android:id="@+id/sampleItem3"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@android:color/holo_blue_bright"
android:text="SAMPLE VIEW 3"
android:gravity="center"/>
<TextView
android:id="@+id/termsAndConditions"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/holo_green_dark"
android:visibility="gone"
android:text="VIEW THAT MAY OR MAY NOT BE ADDED"
android:gravity="center"/>
</LinearLayout>
</ScrollView>
但如果我设置了条款和条件&#39;能见度&#39; VISIBLE&#39;其他3个观点调整大小...我能阻止它吗?
我的目标是让绿色视图填充在屏幕底部边缘下方,用户可以滚动到它,因为所有内容都包含在滚动视图中
答案 0 :(得分:0)
首先,您必须向weight_sum = 3
的父版块添加TextViews
,然后在{strong>条款<{strong> TextView
中添加layout_height="0dp"
为了给它添加一个权重,并根据需要添加权重,让我们说“ 0.3 ”,那么,它将如下所示:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:weightSum="3">
<TextView
android:id="@+id/sampleItem1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@android:color/holo_red_dark"
android:text="SAMPLE VIEW 1"
android:gravity="center"/>
<TextView
android:id="@+id/sampleItem2"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@android:color/white"
android:text="SAMPLE VIEW 2"
android:gravity="center"/>
<TextView
android:id="@+id/sampleItem3"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@android:color/holo_blue_bright"
android:text="SAMPLE VIEW 3"
android:gravity="center"/>
<TextView
android:id="@+id/termsAndConditions"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="0.3"
android:background="@android:color/holo_green_dark"
android:visibility="gone"
android:text="VIEW THAT MAY OR MAY NOT BE ADDED"
android:gravity="center"/>
</LinearLayout>
</ScrollView>
答案 1 :(得分:0)
我们为完成这项工作所做的工作是将术语的可见性设置为GONE,然后在片段的onCreateView中,我们这样做了:
LinearLayout parent = (LinearLayout)view.findViewById(R.id.viewParent);
parent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
public void onGlobalLayout() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
parent.getViewTreeObserver().removeOnGlobalLayoutListener(this);
} else {
parent.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
int height = parent.getHeight();
parent.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, height));
termsAndConditions.setVisibility(View.VISIBLE);
}
} );
因此,如果将术语设置为GONE,我们测量父母的身高,然后用该测量替换它的MATCH_PARENT高度属性,然后将术语设置为可见,由于我们设置了静态高度,因此填充在其他所有部分之下。 / p>
在我的脑海里,感觉就像用大炮杀死一只蚊子一样,所以如果有任何其他解决办法,我就会打开。