TextView不能平滑滚动

时间:2012-03-23 12:42:47

标签: java android xml android-layout

我正在尝试使用以下代码滚动我的textview:

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:");

一切正常但我的文字视图不能顺利滚动。我想我必须将我的Textview放在Scrollview中,但这也无效。

是否会因为我正在调整我的文本视图而发生?

请提供此问题的任何解决方案。我已经花了很多时间在这上面。

我的xml布局文件是:

<?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>

提前致谢!

4 个答案:

答案 0 :(得分:6)

在我的情况下,我只需要将我的TextView放在ScrollView中。滚动变得非常顺利,用户每次都过上幸福的生活!

autumns

答案 1 :(得分:3)

问题是 ScrollView中的ScrollView

当您将ScrollView放入ScrollView内部时,只会感到困惑,触摸了哪个滚动视图。所以有时它无法提供触摸事件。

搜索了一段时间后,我发现了一个链接或博客,它将解决这个问题,并且还有解决方案。

查看this博客。这正是您一直在寻找的,我相信它会解决您的问题。

现在是时候享受了;)

答案 2 :(得分:3)

仅当您限制其高度时,TextView才会滚动。简单的规则是当文本超过可用空间然后textview开始滚动。 一种方法是通过指定从某个图像大小获得的固定高度来跟随您。另一种方法是设置最大行数。

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

你甚至可以让它变得更有活力。只需计算行数即可。

行数=(图像高度,以像素为单位)/(文本字体大小,以像素为单位)

答案 3 :(得分:0)

首先,不需要将Layoutparams设置为,因为您已将其放入xml布局中。

如果你有这么长的字符串,那就不要直接把它放在java代码上。而不是将该字符串放入资源目录。

转到值,打开strings.xml文件并定义字符串。

见下文:

    <?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, HelperStackOverflowActivity!</string>
    <string name="app_name">HelperStackOverflow</string>
    <string name="String1">"PUT YOUR STRING HERE" </string>

</resources>

执行此操作后,您可以随时在Java代码中设置字符串。 如:

 text = (TextView)findViewById(R.id.textView12);
    text.setText(getResources().getString(R.string.String1));

它滚动很好,正常滚动。

希望它会对你有所帮助。

享受。 :)