I got an Activity
with two Fragment
s (one list one normal). And the normal Fragment
inflates a Scrollview
containing a LineaLayout
(vertical) and this layout contains TextViews
. The ScrollView
and layout_width
and layout_height
are match_parent
, so I think the whole screen should be used. But on the bottom there is still a "gap". I hope you can help me.
ScrollView.xml
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/scrollView1" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/titlescreen_bg" android:orientation="vertical" android:paddingTop="60dp" tools:context=".MainActivity" > <TextView android:id="@+id/tv_headline" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:paddingBottom="60dp" android:paddingTop="60dp" android:textIsSelectable="false" android:textSize="@dimen/fontsize_slogan_titlescreen" /> <TextView android:id="@+id/tv_content" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:paddingBottom="30dp" android:paddingTop="30dp" android:textIsSelectable="false" android:textSize="@dimen/fontsize_slogan_titlescreen" /> </LinearLayout> </ScrollView>
the fragment inflating this layout.
package wak.iage.layout; import wak.iage.R; import android.app.Fragment; import android.graphics.Color; import android.graphics.Typeface; import android.os.Bundle; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.LinearLayout; import android.widget.TextView; public class MenuContentFragment extends Fragment { LinearLayout.LayoutParams relativeParams = new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); LinearLayout topLayout = null; TextView body = null; TextView head = null; @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.menu_content_main, container); return v; } public void changeText(String title, String content) { topLayout = (LinearLayout) getActivity().findViewById( R.id.LinearLayout1); head = (TextView) getActivity().findViewById(R.id.tv_headline); body = (TextView) getActivity().findViewById(R.id.tv_content); if (body == null) { topLayout.removeViews(1, topLayout.getChildCount() - 1); body = new TextView(getActivity().getApplicationContext()); body.setPadding(0, 30, 0, 20); body.setTextColor(Color.BLACK); body.setTextSize(22); body.setGravity(Gravity.CENTER_HORIZONTAL); topLayout.addView(body, relativeParams); } body.setText(content); head.setText(title); } public void addGlossary() { if (body != null) { topLayout.removeView(body); } int i = 0; for (int id : GLOSSARY) { TextView glossary = new TextView(getActivity() .getApplicationContext()); glossary.setText(getString(id)); glossary.setTextColor(Color.BLACK); if (i % 2 == 0) { glossary.setTypeface(Typeface.DEFAULT_BOLD); glossary.setTextSize(22); glossary.setPadding(0, 10, 0, 10); } topLayout.addView(glossary, relativeParams); i += 1; } } public static final int[] GLOSSARY = { R.string.GlossaryAndroidOSTitle, R.string.GlossaryAndroidOSContent, R.string.GlossaryAppTitle, R.string.GlossaryAppContent, R.string.GlossaryCloudTitle, R.string.GlossaryCloudContent, R.string.GlossaryDonwloadTitle, R.string.GlossaryDonwloadContent, R.string.GlossaryFacebookTitle, R.string.GlossaryFacebookContent, R.string.GlossaryGPSTitle, R.string.GlossaryGPSContent, R.string.GlossaryHomescreenTitle, R.string.GlossaryHomescreenContent, R.string.GlossaryPasswordTitle, R.string.GlossaryPasswordContent, R.string.GlossaryRouterTitle, R.string.GlossaryRouterContent, R.string.GlossarySDTitle, R.string.GlossaySDContent, R.string.GlossayStandbyTitle, R.string.GlossayStandbyContent, R.string.GlossaryTabletTitle, R.string.GlossaryTabletContent, R.string.GlossaryTouchscreenTitle, R.string.GlossaryTouchscreenContent, R.string.GlossayWidgetsTitle, R.string.GlossayWidgetsContent, R.string.GlossayWLANTitle, R.string.GlossayWLANContent }; }
Thanks a lot.
Edit: Even the proble is already fixed with: android:fillViewPort="true", I want to show you the problem.
But I don't have enough reputation to post a picture. Sorry!
ScrollView and HorizontalScrollView has same attributes, the only difference is scrollView scroll the child items in vertical direction while horizontal scroll view scroll the child items in horizontal direction.
ScrollView is used to put different or same child views or layouts and the all can be scrolled. ListView is used to put same child view or layout as multiple items. All these items are also scrollable. Simply ScrollView is for both homogeneous and heterogeneous collection.
If i'm not mistaken, the ViewGroup
's height (LinearLayout
's height in your case), that is the (only) child inside a ScrollView
, is always interpreted as wrap_content, since that content can be larger than the ScrollView
's height (hence the scrollbars).
This also means that if the content is smaller, the ScrollView
's content (child) may not necessarily stretch to fill the screen.
In order to visually help you fix this, we need to see a screenshot of your problem.
Maybe setting android:fillViewport="true"
on the ScrollView
will fix your issue:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/scrollView1" android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true">
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With