Android layout issue - linearlayout height not filling scrollview height - android

I'm having a slight android layout issue...
I have a ScrollView element holding a LinearLayout. I want the scrollview to fill the entire device screen and the linearlayout to fill the whole height of the scrollview.
I have the code below which is resulting in the scrollView filling the whole screen but the linearLayout only filling about half of the height of the scrollview.
Here is my code:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ff036c07">
<LinearLayout
android:background="#FF0000"
android:id="#+id/overview_form"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</LinearLayout>
</ScrollView>
Any ideas what I am missing?

Add android:fillViewport="true" to the scrollview .

Add the
android:fillViewport="true" property in your ScrollView
and
also remove unncessary namespace from linearlayout which is
xmlns:android="http://schemas.android.com/apk/res/android"

try adding the weight attribute
android:weight="1" in linearlayout and check

Related

How to set height of one layout to the height of another layout in Android?

I have this code. So I want to set height in my relativeLayout by height in scrollView. Can I set height by id of scrollView? It's need, because I have many fragments, but one of them should take height of scrollView (when virtual keyboard is open).
...
<ScrollView
android:id="#+id/scrollViewer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<FrameLayout
android:id="#+id/frameViewer"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<RelativeLayout
android:id="#+id/layoutViewer"
android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView
android:id="#+id/webViewer"
android:layout_width="match_parent"
android:layout_height="match_parent">
</RelativeLayout>
</FrameLayout>
</ScrollView>
...
ScrollViews child (and its childrens also) should have set layout_height="wrap_content" for avoiding multiple re-measurements (way better performance)
if you want to fullfil whole ScrollView even when content have less height then use fillViewport xml attribute

scrollbars and isScrollContainer attributes do not activate scrolling for linear layout

I want to add a scrolling to my main layout(linear layout)
if I add the scrollbars and isScrollContainer attributes in the linear layout, the scrolling does not work. any explanation why these attributes do not activate scrolling
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:scrollbars="vertical"
android:isScrollContainer="true">
To Make your LinearLayout Scrollable put it in ScrollView.
<?xml version="1.0" encoding="utf-8"?>
<ScrollView ...>
<LinearLayout ...>
...
...
</LinearLayout>
</ScrollView>
isScrollContainer="true"
This property is used when your softkey in android pops up and still you want your view to scroll.

Layout Weights do not work inside a ScrollView

I want to assign layout weights to several items within a LinearLayout inside of a ScrollView. However, the ScrollView ignores the LinearLayout weightSum.
My goal is to divide the layout with weights of 2, 1, 1 (for a total sum of 4), but this does not work properly inside of a ScrollView.
How can I solve this layout problem?
main.xml
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="#+id/scrollView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:weightSum="4">
<LinearLayout android:id="#+id/logo"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="2"
android:background="#FFFFFF" />
<LinearLayout android:id="#+id/logo1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1"
android:background="#000000" />
<LinearLayout android:id="#+id/logobutton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_weight="1"
android:background="#4B4B4B" />
</LinearLayout>
</ScrollView>
I have faced this problem before. Just use android:fillViewport="true" in your ScrollView and it will fill up the screen.
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="#+id/scrollView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true" >
This won't work as you have done it. The child view of a ScrollView should be set to wrap_content. If you set it to fill_parent, it will fill the area of the ScrollView and never scroll, because it won't be larger than the ScrollView.
The idea of layout_weight is to fill a specific area proportionately.
You should set all of the child LinearLayouts layout_height to either wrap_content or a specific size (in dp) and the parent LinearLayout layout_height to wrap_content
As said you need to remove the additional
xmlns:android="http://schemas.android.com/apk/res/android"
if it's not the root (first) element of the layout.
just put this in your scroll view:
android:fillViewport="true"
In my experience, fillviewport=true works bit strange.
I solved this problem by wrapping LinearLayout with another Layout like FrameLayout.
I hope this helps.
Add below line in your ScrollView it will be work fine.
Only single child must be there for ScrollView
android:fillViewport="true"

android horizontal scrollview

Hi
am testing horizontal scrollview i came to a strange problem ,i put one button in horizontal scrollview with layout height and width fill_parent but that tag have no effect in layout ,lets look in to my layout
<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:fillViewport="true"
>
<LinearLayout
android:id="#+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:text="Button"
android:id="#+id/button1"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</Button>
</LinearLayout>
</HorizontalScrollView>
How can i fill the layout with my button inside horizontal scrollview
the problem might be in android:width="wrap_content"....
as u did wrap content for horizontal scrollview and it is parent of linearlayout and button in above case.......
that might be creating all the problem...
either hard code size of linear layout or put android:width="fill_parent" in horizontal scroll view.....
Remember that scroll view layout_height must be warp_content , fill_parent attribute does not affect on the scrollview height, if you want to fill whole screen by button in your layout you should mentioned the layout_height hard coded.
Put this two tag in HorizontalScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
Put orientation in LinearLayout
android:orientation="vertical"
Do android:layout_height="fill_parent" to android:layout_height="wrap_content" in HorizontalScrollView

Android: How to automatically display vertical scrollbar?

I created a user form which fits the window in vertical orientation. When the user slides the keyboard the form doesn't fit the screen (horizontal orientation). I tried to add the scrollbar but it is not visible.
I would appreciate if anyone could show how to modify the following layout file in order to display scrollbar when the orientation is set to horizontal.
Thanks!
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="vertical"
android:scrollbars="vertical"
android:scrollbarAlwaysDrawVerticalTrack="true">
...
</LinearLayout>
Remove the scrollbar attributes and wrap the whole thing in a ScrollView.
You can't replace the LinearLayout with ScrollView because ScrollView only supports one Direct Child and LinearLayout may have many. So the only option i see is to wrap
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:overScrollMode="always"
android:isScrollContainer="true"
android:scrollbarAlwaysDrawVerticalTrack="true"
android:scrollbarStyle="outsideInset"
android:scrollbars="vertical">
You can pick a variety of other attributes. These worked for my implementation. It is the first container in my layout.LinearLayout is a child of this container. Other UI elements are part of LinearLayout
Hope this helps...
Alex

Categories

Resources