Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TextView not scrolling Smoothly

I am trying to scroll my textview using the following code:

TextView text = (TextView) findViewById(R.id.textView12);
        text.setMovementMethod(ScrollingMovementMethod.getInstance());
        int height = getResources().getDrawable(R.drawable.pic_ground_pranic).getIntrinsicHeight();
        text.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.FILL_PARENT, height));
        text.setText("As part of an Android App I am building a button set.For performance reasons and to keep the code simpler, the Android system uses pixels as the standard unit for expressing dimension or coordinate values. That means that the dimensions of a view are always expressed in the code using pixels, but always based on the current screen density. For instance, if myView.getWidth() returns 10, the view is 10 pixels wide on the current screen, but on a device with a higher density screen, the value returned might be 15. If you use pixel values in your application code to work with bitmaps that are not pre-scaled for the current screen density, you might need to scale the pixel values that you use in your code If you need to control exactly how your application will look on various screen configurations, adjust your layouts and bitmap drawables in configuration-specific resource directories. For example, consider an icon that you want to display on medium and high density screens. Simply create your icon at two different sizes (for instance 100x100 for medium density and 150x150 for high density) and put the two variations in the appropriate directories, using the proper qualifiers: For instance, suppose a device has a WVGA high-density screen, which is 480x800 and about the same size as a traditional HVGA screen, but it's running an application that has disabled pre-scaling. In this case, the system will lie to the application when it queries for screen dimensions, and report 320x533 (the approximate mdpi translation for the screen density). Then, when the application does drawing operations, such as invalidating the rectangle from (10,10) to (100, 100), the system transforms the coordinates by scaling them the appropriate amount, and actually invalidate the region (15,15) to (150, 150). This discrepancy may cause unexpected behavior if your application directly manipulates the scaled bitmap, but this is considered a reasonable trade-off to keep the performance of applications as good as possible. If you encounter this situation, read Based on the density of the current screen, the system uses any size- or density-specific resources from your application and displays them without scaling. If resources are not available in the correct density, the system loads the default resources and scales them up or down as needed to match the current screen's density. The system assumes that default resources (those from a directory without configuration qualifiers) are designed for the baseline screen density (mdpi), unless they are loaded from a density-specific resource directory. Pre-scaling is, thus, what the system does when resizing a bitmap to the appropriate size for the current screen density. to match the un-scaled bitmap source. The buttons are part of a nested set of LinearLayouts.The question then is: How to resize the layout.I have tried several suggested techniques, and none come close to working. Here is a subset of the XML that builds the button set:");

All is working fine but my text view is not scrolling smoothly. I thought I have to put my Textview inside a Scrollview but this is also not working.

Does it happen because I am resizing my textview?

Please provide any solution for this problem. I already spent a lot of time on this.

My xml layout file is:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relativeLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_below="@+id/include1"
        android:layout_centerHorizontal="true"
        android:background="@android:color/white"
        android:scrollbarStyle="insideInset" >

        <TableLayout
            android:id="@+id/tableLayout1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical"
            android:padding="5dp" >

            <TableRow
                android:id="@+id/tableRow1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" >

                <RelativeLayout
                    android:id="@+id/relativeLayout2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1.0" >

                    <TextView
                        android:id="@+id/textView2"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentLeft="true"
                        android:layout_marginLeft="5dp"
                        android:layout_marginTop="14dp"
                        android:text="Text 1"
                        android:textColor="@android:color/black" />

                    <TextView
                        android:id="@+id/textView3"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignBottom="@+id/textView2"
                        android:layout_marginLeft="25dp"
                        android:layout_toRightOf="@+id/textView2"
                        android:text="Text 2"
                        android:textColor="@android:color/black" />

                    <TextView
                        android:id="@+id/textView4"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignBottom="@+id/textView3"
                        android:layout_marginLeft="25dp"
                        android:layout_toRightOf="@+id/textView3"
                        android:text="Text 3"
                        android:textColor="@android:color/black" />

                    <TextView
                        android:id="@+id/textView5"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignTop="@+id/textView4"
                        android:layout_marginLeft="25dp"
                        android:layout_toRightOf="@+id/textView4"
                        android:text="Text 4"
                        android:textColor="@android:color/black" />

                    <TextView
                        android:id="@+id/textView6"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentLeft="true"
                        android:layout_below="@+id/textView2"
                        android:layout_marginLeft="5dp"
                        android:layout_marginTop="3dp"
                        android:textColor="@android:color/black" />

                    <TextView
                        android:id="@+id/textView7"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignLeft="@+id/textView3"
                        android:layout_below="@+id/textView3"
                        android:layout_marginTop="3dp"
                        android:textColor="@android:color/black" />

                    <TextView
                        android:id="@+id/textView8"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignLeft="@+id/textView4"
                        android:layout_below="@+id/textView4"
                        android:layout_marginTop="3dp"
                        android:textColor="@android:color/black" />

                    <TextView
                        android:id="@+id/textView9"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignLeft="@+id/textView5"
                        android:layout_below="@+id/textView5"
                        android:layout_marginTop="3dp"
                        android:textColor="@android:color/black" />
                </RelativeLayout>
            </TableRow>

            <TableRow
                android:id="@+id/tableRow2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" >

                <RelativeLayout
                    android:id="@+id/relativeLayout3"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1.0" >

                    <SeekBar
                        android:id="@+id/seekBar1"
                        android:layout_width="150dp"
                        android:layout_height="wrap_content"
                        android:layout_alignParentRight="true"
                        android:soundEffectsEnabled="true" />

                    <TextView
                        android:id="@+id/textView10"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentLeft="true"
                        android:layout_centerVertical="true"
                        android:text="Volume 1"
                        android:textColor="@android:color/black" />
                </RelativeLayout>
            </TableRow>

            <TableRow
                android:id="@+id/tableRow3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" >

                <RelativeLayout
                    android:id="@+id/relativeLayout4"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1.0" >

                    <SeekBar
                        android:id="@+id/seekBar2"
                        android:layout_width="150dp"
                        android:layout_height="wrap_content"
                        android:layout_alignParentRight="true"
                        android:soundEffectsEnabled="true" />

                    <TextView
                        android:id="@+id/textView11"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentLeft="true"
                        android:layout_centerVertical="true"
                        android:text="Volume 2"
                        android:textColor="@android:color/black" />
                </RelativeLayout>
            </TableRow>

            <TableRow
                android:id="@+id/tableRow4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:baselineAligned="false" >

                <LinearLayout
                    android:id="@+id/linearLayout1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1.0"
                    android:orientation="vertical" >

                    <Button
                        android:id="@+id/button1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="right"
                        android:text="Save Volumes" />
                </LinearLayout>
            </TableRow>

            <TableRow
                android:id="@+id/tableRow5"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical" >

                <FrameLayout
                    android:id="@+id/frameLayout3"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1.0"
                    android:orientation="vertical" >

                    <TextView
                        android:id="@+id/textView12"
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent"
                        android:layout_gravity="center_vertical|center_horizontal"
                        android:gravity="top|left"
                        android:scrollbars="vertical"
                        android:visibility="visible" />
                </FrameLayout>
            </TableRow>

            <TableRow
                android:id="@+id/tableRow8"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" >

                <FrameLayout
                    android:id="@+id/frameLayout2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1.0" >

                    <ImageView
                        android:id="@+id/imageView1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="right|center" />

                    <TextView
                        android:id="@+id/textView13"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="right|center"
                        android:layout_marginRight="30dp"
                        android:clickable="true"
                        android:text="Detailed Instruction" />
                </FrameLayout>
            </TableRow>
        </TableLayout>
    </ScrollView>

</RelativeLayout>

Thanks in advance!

like image 975
Pari Avatar asked Mar 23 '12 12:03

Pari


3 Answers

In my case I just needed to put my TextView inside a ScrollView. Scrolling got very smooth and users lived happily every after!

<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:fillViewport="true"
    >
    <TextView
        android:id="@+id/textview_about"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textIsSelectable="true"
        android:textSize="20dp" />
</ScrollView>
like image 93
cyberPrivacy Avatar answered Nov 20 '22 13:11

cyberPrivacy


problem is ScrollView inside ScrollView.

When you put ScrollView inside ScrollView android just get confused which scroll view is touched. So sometimes it gets unable to deliver touch event.

After searching for a time I found a link or blog that will extract this problem and also have solution.

Take a look at this blog. This is exactly what you have been searching for and i am sure that it will solve your problem.

Now time to Enjoy ;)

like image 4
Deepak Avatar answered Nov 20 '22 13:11

Deepak


The TextView scroll only if you restrict its height. Simple rule is when the text is more then the available space then textview start scrolling. One way is what you are following by assigning a fixed height which you got from some image size. One other way is by setting the maximum number of lines.

TextView text = (TextView) findViewById(R.id.textView12);
text.setMaxLines(5);
text.setMovementMethod(ScrollingMovementMethod.getInstance());

you can even make it more dynamic. Simply by calculating number of lines.

Number of lines = (image Height in pixels)/(text font size in pixel)

like image 3
Gem Avatar answered Nov 20 '22 12:11

Gem