LinearLayout
内ScrollView
android:layout_height="fill_parent"
有ScrollView
,但它没有扩展到level layout layout_width layout_height
1 LinearLayout fill_parent fill_parent
2 LinearLayout fill_parent wrap_content
3 (some irrelevant stuff)
2 ScrollView fill_parent fill_parent <-- this expands full height
3 LinearLayout fill_parent fill_parent <-- this does not (has orientation=vertical)
(following stuff probably are irrelevant, but just to be sure:)
4 TextView fill_parent fill_parent
4 LinearLayout fill_parent wrap_content
的完整高度。我的布局看起来像:
LinearLayout
我可以看到ScrollView
没有扩展Android Layout Editor
的完整高度,因为在ScrollView
的Eclipse中,如果我选择LinearLayout
(在大纲中)它突出显示为红色边框,将屏幕填充到底部,但当我选择LinearLayout
时,其高亮显示不会扩展到屏幕底部。我怎么能这样做呢?
我想要达到的效果是在它下面有一些文字和一个按钮(在第4级的LinearLayout
里面只有一个按钮)。文本可能足够大,需要滚动条,在这种情况下,我希望用户必须向下滚动才能看到按钮。如果文本不足以滚动条,我希望包含按钮的<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:id="@+id/video_layout"
android:focusable="true"
style="@style/VideoLayout">
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:foreground="@android:drawable/ic_media_play"
android:foregroundGravity="center">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/video_thumb"
android:padding="5dip"
android:background="#454545"/>
</FrameLayout>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:focusable="true"
style="@style/VideoTitle"
android:id="@+id/video_title"
android:layout_gravity="center"
android:layout_weight="1"/>
</LinearLayout>
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<!-- this ScrollView expands the full height of the screen.
However, the next LinearLayout does not expand the full height of the ScrollView -->
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:layout_gravity="fill"
android:orientation="vertical"
android:id="@+id/info_layout">
<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/info_body"
style="@style/InfoText"/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
style="@android:style/ButtonBar">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:text="@string/button_readmore"
android:id="@+id/btn_read_more"/>
</LinearLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>
粘在屏幕底部。
起初我以为我不应该发布完整的XML,因为在一个问题中看到一大堆代码通常是一个转折点。但是,它似乎有必要,所以这是完整的布局。
android:layout_gravity="bottom"
目前,我已经对问题LinearLayout
采用了android:layout_gravity="bottom"
,这使按钮无论如何都会粘在屏幕的底部。但这也使得文本粘在屏幕的底部,这不是我所追求的。
更新抓取,ScrollView
使{{1}}无法滚动。其他想法?
答案 0 :(得分:931)
最终我自己找到了解决方案。问题不在于LinearLayout
,而在于ScrollView
(看起来很奇怪,考虑到ScrollView
扩展的事实,而{{1}不是)。
解决方案是在LinearLayout
上使用android:fillViewport="true"
。
答案 1 :(得分:8)
你能提供你的布局xml吗?这样做可以让人们以最小的努力重新创建问题。
您可能需要设置
android:layout_weight="1"
表示您要展开的项目
答案 2 :(得分:2)
我动态地习惯了这个。我有一个LinearLayout,并在其中使用ScrollView作为孩子。然后我再次使用LinearLayout并添加你想要的这个LinearLayout,然后将此LinearLayout添加到ScrollView,最后将此ScrollView添加到LinearLayout。然后你可以在你的ScrollView中滚动,没有任何东西可以看到。
LinearLayout(Parent) - ScrollView(LinerLayout的子代) - LinearLayout(ScrollView的子代) - 在这里添加textView,Buttons,spinner等你想要的任何东西。然后将此LinearLyout添加到ScrollView。 Bcoz只有一个适用于ScrollView的CHILD,最后将此ScrollView添加到LinearLyout。如果定义的区域超出屏幕大小,那么你将在ScrollView中获得一个Scroll。
答案 3 :(得分:1)
在我的情况下,我还没有给出
LinearLayout的方向(ScrollView&#39; s Child)
所以默认情况下它需要水平,但是scrollview会垂直滚动,所以请检查&#39; android:orientation =&#34; vertical&#34;&#39;设置为ScrollView的子项(在LinearLayout的情况下)。
这是我的情况,希望它有助于某人
答案 4 :(得分:0)
这里的所有答案对我来说都无法(完全)起作用。 回顾一下我们想做的一个完整的答案: 我们有一个ScrollView,据说是填充了设备的视口,因此我们在布局xml中将fillViewport设置为“ true”。 然后,在ScrollView中,我们有一个LinearLayout,其中包含所有其他内容,并且LinearLayout至少应与其父级ScrollView一样高,因此实际上应该是我们想要的(在LinearLayout的底部)东西,在屏幕底部(或ScrollView底部),以防LinearLayout的内容比屏幕高。
activity_main.xml布局示例:
.post(...)
然后,在活动的onCreate中,我们“等待”完成LinearLayout的布局(这意味着它的父级布局也已完成),然后将其最小高度设置为ScrollView的高度。因此,如果ScrollView不占据整个屏幕高度,它也可以工作。
不管您是在ScrollView上调用public class MainActivity extends AppCompatActivity {
@Override // Activity
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout linearLayoutWrapper = findViewById(R.id.layout_scrollwrapper_inner);
...
linearLayoutWrapper.post(() -> {
linearLayoutWrapper.setMinimumHeight(((ScrollView)linearLayoutWrapper.getParent()).getHeight());
});
}
...
}
还是在内部LinearLayout上都不会产生太大的变化,如果其中一个不适用于您,请尝试另一个。
$example1 = '\\192.168.3.3\s$\blabla\blabla\bla.txt'
$example2 = '\\srv\s$\blabla\bla.txt'
可悲的是,它不是仅xml的解决方案,但对我来说效果很好,希望它还可以帮助其他受过折磨的android开发人员搜寻互联网,以寻找解决此问题的方法; D
答案 5 :(得分:-1)
解决方案是使用
android:fillViewport="true"
在滚动视图上,然后尝试使用
"wrap_content"
而不是"fill_parent"
为"fill_parent"
现在已弃用。