Search code examples
androidhorizontalscrollview

HorizontalScrollView item size incorrect - Android


I have a HorizontalScrollView within a NestedScrollView like so:

<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Charts"
        android:id="@+id/growth_title"
        android:textStyle="bold"
        android:textSize="16sp"/>

    <HorizontalScrollView
        android:layout_width="match_parent"
        android:id="@+id/growth_view"
        android:gravity="center_vertical"
        android:scrollbars="none"
        android:layout_height="200dp">
        <LinearLayout
            android:layout_width="wrap_content"
            android:orientation="horizontal"
            android:id="@+id/growth_layout"
            android:gravity="center_vertical"
            android:layout_height="200dp">
        </LinearLayout>
    </HorizontalScrollView>
</LinearLayout>

</android.support.v4.widget.NestedScrollView>

And this is the item view XML which I insert into the growth_layout LinearLayout :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="300dp"
android:gravity="center_vertical"
android:paddingTop="0dp"
android:layout_height="200dp">

<ImageView
    android:id="@+id/icon"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:src="@drawable/baby_default"
    android:layout_alignParentTop="true"
    android:layout_alignParentRight="true" />

<TextView
    android:id="@+id/title"
    android:layout_below="@id/due_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textStyle="bold"
    android:layout_alignParentTop="true"
    android:layout_toLeftOf="@id/icon"
    android:text="HEIGHT"
    android:layout_marginLeft="5dp"
    android:layout_alignParentLeft="true"
    android:layout_marginTop="20dp"
    android:textAllCaps="true"
    android:textSize="16sp" />


<TextView
    android:id="@+id/value"
    android:layout_width="wrap_content"
    android:layout_height="50dp"
    android:text="123"
    android:layout_below="@id/title"
    android:layout_alignParentLeft="true"
    android:layout_marginTop="30dp"
    android:gravity="center"
    android:textAlignment="center"
    android:textStyle="bold"
    android:textSize="40sp"/>

<TextView
    android:id="@+id/dimen"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="cm"
    android:textSize="14sp"
    android:layout_alignBaseline="@id/value"
    android:layout_toRightOf="@+id/value" />


<LinearLayout
    android:layout_width="wrap_content"
    android:id="@+id/ideal_layout"
    android:gravity="center"
    android:layout_alignParentLeft="true"
    android:layout_below="@id/dimen"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/ideal_icon"
        android:layout_width="10dp"
        android:layout_height="10dp"
        android:src="@drawable/follow_done"/>

    <TextView
        android:id="@+id/ideal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Within the ideal range"
        android:textSize="14sp" />

</LinearLayout>

<TextView
    android:id="@+id/update"
    android:layout_width="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_height="wrap_content"
    android:text="UPDATE"
    android:textStyle="bold"
    android:layout_alignParentLeft="true"
    android:layout_marginTop="15dp"
    android:textSize="14sp" />

</RelativeLayout>

I insert items into the LinearLayout without adding any LayoutParams like this :

 View cardView = activity.getLayoutInflater().inflate(R.layout.item, null);
 growth_layout.addView(cardView);

On Android Studio it shows up fine, like so: link

But on my phone, the items within the ScrollView take a strange size, like so: link

I don't know what I should do differently.


Solution

  • <?xml version="1.0" encoding="utf-8"?>
    
    <android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
    
            <TextView
                android:id="@+id/growth_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Charts"
                android:textSize="16sp"
                android:textStyle="bold" />
    
            <HorizontalScrollView
                android:id="@+id/growth_view"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center_vertical"
                android:scrollbars="none">
    
                <LinearLayout
                    android:id="@+id/growth_layout"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:gravity="center_vertical"
                    android:orientation="horizontal">
    
                </LinearLayout>
            </HorizontalScrollView>
        </LinearLayout>
    
    </android.support.v4.widget.NestedScrollView>
    

    item view XML

    <?xml version="1.0" encoding="utf-8"?>
    
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
    
        <LinearLayout
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:background="@drawable/edittextborder"
            android:orientation="vertical"
            android:padding="10dp">
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
    
                <TextView
                    android:id="@+id/title"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_alignParentLeft="true"
                    android:layout_alignParentTop="true"
                    android:layout_marginLeft="5dp"
                    android:layout_marginTop="20dp"
                    android:layout_toLeftOf="@id/icon"
                    android:layout_weight="1"
                    android:text="HEIGHT"
                    android:textAllCaps="true"
                    android:textSize="16sp"
                    android:textStyle="bold" />
    
                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@mipmap/ic_launcher" />
    
            </LinearLayout>
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">
    
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:orientation="horizontal">
    
                    <TextView
                        android:id="@+id/value"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:gravity="center"
                        android:text="123"
                        android:textAlignment="center"
                        android:textColor="#A8739C"
                        android:textSize="40sp"
                        android:textStyle="bold" />
    
                    <TextView
                        android:id="@+id/dimen"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="bottom"
                        android:layout_marginBottom="4dp"
                        android:text="cm"
                        android:textColor="#A8739C"
                        android:textSize="14sp" />
                </LinearLayout>
    
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">
    
                    <ImageView
                        android:id="@+id/ideal_icon"
                        android:layout_width="10dp"
                        android:layout_height="10dp"
                        android:layout_gravity="center"
                        android:src="@android:drawable/presence_online" />
    
                    <TextView
                        android:id="@+id/ideal"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Within the ideal range"
                        android:textColor="#A8739C"
                        android:textSize="14sp" />
                </LinearLayout>
                <TextView
                    android:id="@+id/update"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentBottom="true"
                    android:layout_alignParentLeft="true"
                    android:layout_marginTop="35dp"
                    android:text="UPDATE"
                    android:textColor="#A8739C"
                    android:textSize="14sp"
                    android:textStyle="bold" />
            </LinearLayout>
    
        </LinearLayout>
    </LinearLayout>
    

    @drawable/edittextborder

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <shape android:shape="rectangle">
                <stroke
                    android:width="1dp"
                    android:color="@android:color/white" />
                <solid android:color="@android:color/background_light" />
                <corners android:radius="10dp" />
            </shape>
        </item>
    </layer-list>
    

    I insert items into the LinearLayout :

    LinearLayout growth_layout = (LinearLayout) v.findViewById(R.id.growth_layout);
        for (int i = 0; i < 10; i++) {
            View rootView =LayoutInflater.from(getActivity()).inflate(R.layout.adapter,null,false);
            growth_layout.addView(rootView);
        }