2011-03-01 32 views
0

我遇到了一个包含大量文本的TextView的问题。在Android 2.1update1(Eclair)上,文本并未打包,而是在Android 2.2(Froyo)上。这发生在模拟器以及我试过的一对测试设备上。下面的示例代码和屏幕截图。TextView不包装在Android 2.1 Eclair

LongtextActivity.java:

package com.example.longtext; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.LinearLayout; 
import android.widget.LinearLayout.LayoutParams; 
import android.widget.ScrollView; 
import android.widget.TextView; 

public class LongtextActivity extends Activity { 
    private static final String LONG_TEXT = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus eleifend sodales vulputate. Aenean quis mattis tellus. Morbi fringilla sagittis turpis, scelerisque tempus velit molestie a. Suspendisse ut lectus nec nibh posuere commodo. Aliquam id purus eros. Quisque condimentum enim vitae odio ultricies posuere. Integer at lectus dolor. Etiam ultricies posuere neque, ut sagittis tellus tempus et. Aliquam vitae diam augue, vel vehicula tellus. Nullam dignissim magna luctus odio commodo cursus. Aenean magna justo, interdum in ultricies vitae, tincidunt at risus. Vivamus elit magna, sagittis a egestas non, suscipit a mi. Nam blandit, mauris nec adipiscing egestas, neque risus vestibulum lacus, eu iaculis lacus dui id sapien. Cras vitae nunc felis, sit amet fermentum est. Suspendisse dui ligula, sodales nec varius eget, cursus et urna. Ut eget turpis non lorem rutrum interdum. Morbi bibendum convallis adipiscing. Nam commodo, lectus lobortis feugiat ullamcorper, dui mi tincidunt tellus, a consectetur quam odio eget urna. Fusce adipiscing congue ipsum et luctus. Quisque nisi eros, porttitor nec tempor non, ultrices eget mi. Sed ac magna sit amet nulla facilisis porttitor non eget odio. Cras blandit tempus urna, quis molestie ante bibendum sit amet. Proin id cursus leo. Aenean malesuada bibendum turpis, in vehicula purus gravida sed. Suspendisse potenti. Curabitur dapibus, eros ut dapibus mattis, turpis nibh convallis nulla, et commodo nibh eros eu diam. Nunc nisl sem, rhoncus eget lobortis a, fringilla vel lorem. Curabitur vitae massa et est rhoncus dictum sit amet nec nisl. Maecenas id orci leo. Curabitur id auctor sapien. Praesent ac malesuada nunc. In leo libero, sollicitudin sed feugiat sit amet, feugiat non augue. Donec faucibus, augue vel rutrum scelerisque, sem erat posuere libero, vitae accumsan turpis justo vitae felis. Suspendisse bibendum auctor eros non semper. Sed in porta ipsum. Fusce ipsum mauris, porta eu sodales laoreet, suscipit ac urna. Etiam quam nunc, vestibulum a tempor dignissim, accumsan consequat lorem. Vivamus sed massa tortor. Curabitur odio ante, semper vitae sollicitudin eu, accumsan non sapien. Donec malesuada leo quis neque interdum at tristique nibh consequat. Suspendisse tincidunt dapibus elit et tincidunt. Sed ut massa eu ipsum imperdiet scelerisque dictum id ante. Duis iaculis congue purus, eu dictum risus varius ac. Pellentesque leo arcu, iaculis in eleifend in, elementum mollis augue. Donec vitae mi justo. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce ut nisi est, ut tempor ante. Donec nisi nisl, accumsan sed pellentesque et, pellentesque at ipsum. Ut in nibh ipsum. Morbi orci nisi, tempor eu accumsan ac, vehicula consectetur dui. Aenean accumsan leo vitae enim posuere vel commodo neque adipiscing. Sed felis odio, tempor quis convallis a, lacinia non metus. Maecenas euismod egestas arcu, sed luctus felis tincidunt eu. In mollis accumsan tellus venenatis dignissim. Quisque ultrices malesuada quam, at luctus est lobortis sed. Etiam aliquam est euismod mauris feugiat nec cursus sem ornare. Etiam molestie luctus dolor, nec laoreet lacus lacinia id. Fusce posuere aliquet orci quis tincidunt. Nunc fermentum tincidunt sollicitudin. Pellentesque et lacinia massa. Mauris id elit nisi. Donec et luctus nulla. Mauris pretium, ante sed porta ultrices, metus metus interdum risus, nec mollis quam elit et neque. Nulla sed sem sapien, eget feugiat nibh. Pellentesque ornare mollis dui, a porta turpis facilisis vel. Ut consequat interdum venenatis. Integer ac fermentum sapien. Fusce quis nulla eu leo pellentesque ornare ut a orci. Morbi id nibh sapien. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi faucibus rhoncus sodales. Vivamus elit urna, ultricies ac dapibus non, congue quis arcu. Cras condimentum ipsum et nisl pellentesque eu cursus justo congue. Quisque vitae lacus ac sapien imperdiet ullamcorper. Duis ac est et felis pulvinar consequat porttitor ut massa. Nunc porttitor pharetra orci, non aliquam magna aliquam sit amet. Etiam non enim ut justo blandit congue et a nibh. Maecenas ac lorem at justo tempus vehicula at nec risus. Etiam venenatis semper lectus vel faucibus. Fusce nec sem at libero euismod laoreet quis vel dui."; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     TextView bodyField = new TextView(this); 
     // bodyField.setHorizontallyScrolling(false); No effect 
     bodyField.setText(LONG_TEXT); 

     LinearLayout layout = new LinearLayout(this); 
     layout.setOrientation(LinearLayout.VERTICAL); 
     layout.addView(bodyField, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 

     ScrollView scrollView = new ScrollView(this); 
     scrollView.setFillViewport(true); 
     scrollView.addView(layout, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 

     setContentView(scrollView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 
    } 
} 

截图:

Eclair的:

2.1 emulator screenshot

的Froyo:

2.2 emulator screenshot

任何想法,我可以如何使这项工作在埃克莱尔?我需要支持Eclair和我的申请。提前致谢!

UPDATE

我通常做的纲领性UI生成,因为我真正的应用程序所需的极端运行时定制的,但要求这里表现出同样的行为的XML版本。我再次尝试使用和不使用scrollHorizontally="false"属性,没有区别。

longtext.xml:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:fillViewport="true"> 
    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical"> 
     <TextView 
      android:id="@android:id/text1" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:scrollHorizontally="false" /> 
    </LinearLayout> 
</ScrollView> 

LongtextActivity.java:

package com.example.longtext; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.LinearLayout; 
import android.widget.LinearLayout.LayoutParams; 
import android.widget.ScrollView; 
import android.widget.TextView; 

public class LongtextActivity extends Activity { 
    private static final String LONG_TEXT = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus eleifend sodales vulputate. Aenean quis mattis tellus. Morbi fringilla sagittis turpis, scelerisque tempus velit molestie a. Suspendisse ut lectus nec nibh posuere commodo. Aliquam id purus eros. Quisque condimentum enim vitae odio ultricies posuere. Integer at lectus dolor. Etiam ultricies posuere neque, ut sagittis tellus tempus et. Aliquam vitae diam augue, vel vehicula tellus. Nullam dignissim magna luctus odio commodo cursus. Aenean magna justo, interdum in ultricies vitae, tincidunt at risus. Vivamus elit magna, sagittis a egestas non, suscipit a mi. Nam blandit, mauris nec adipiscing egestas, neque risus vestibulum lacus, eu iaculis lacus dui id sapien. Cras vitae nunc felis, sit amet fermentum est. Suspendisse dui ligula, sodales nec varius eget, cursus et urna. Ut eget turpis non lorem rutrum interdum. Morbi bibendum convallis adipiscing. Nam commodo, lectus lobortis feugiat ullamcorper, dui mi tincidunt tellus, a consectetur quam odio eget urna. Fusce adipiscing congue ipsum et luctus. Quisque nisi eros, porttitor nec tempor non, ultrices eget mi. Sed ac magna sit amet nulla facilisis porttitor non eget odio. Cras blandit tempus urna, quis molestie ante bibendum sit amet. Proin id cursus leo. Aenean malesuada bibendum turpis, in vehicula purus gravida sed. Suspendisse potenti. Curabitur dapibus, eros ut dapibus mattis, turpis nibh convallis nulla, et commodo nibh eros eu diam. Nunc nisl sem, rhoncus eget lobortis a, fringilla vel lorem. Curabitur vitae massa et est rhoncus dictum sit amet nec nisl. Maecenas id orci leo. Curabitur id auctor sapien. Praesent ac malesuada nunc. In leo libero, sollicitudin sed feugiat sit amet, feugiat non augue. Donec faucibus, augue vel rutrum scelerisque, sem erat posuere libero, vitae accumsan turpis justo vitae felis. Suspendisse bibendum auctor eros non semper. Sed in porta ipsum. Fusce ipsum mauris, porta eu sodales laoreet, suscipit ac urna. Etiam quam nunc, vestibulum a tempor dignissim, accumsan consequat lorem. Vivamus sed massa tortor. Curabitur odio ante, semper vitae sollicitudin eu, accumsan non sapien. Donec malesuada leo quis neque interdum at tristique nibh consequat. Suspendisse tincidunt dapibus elit et tincidunt. Sed ut massa eu ipsum imperdiet scelerisque dictum id ante. Duis iaculis congue purus, eu dictum risus varius ac. Pellentesque leo arcu, iaculis in eleifend in, elementum mollis augue. Donec vitae mi justo. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce ut nisi est, ut tempor ante. Donec nisi nisl, accumsan sed pellentesque et, pellentesque at ipsum. Ut in nibh ipsum. Morbi orci nisi, tempor eu accumsan ac, vehicula consectetur dui. Aenean accumsan leo vitae enim posuere vel commodo neque adipiscing. Sed felis odio, tempor quis convallis a, lacinia non metus. Maecenas euismod egestas arcu, sed luctus felis tincidunt eu. In mollis accumsan tellus venenatis dignissim. Quisque ultrices malesuada quam, at luctus est lobortis sed. Etiam aliquam est euismod mauris feugiat nec cursus sem ornare. Etiam molestie luctus dolor, nec laoreet lacus lacinia id. Fusce posuere aliquet orci quis tincidunt. Nunc fermentum tincidunt sollicitudin. Pellentesque et lacinia massa. Mauris id elit nisi. Donec et luctus nulla. Mauris pretium, ante sed porta ultrices, metus metus interdum risus, nec mollis quam elit et neque. Nulla sed sem sapien, eget feugiat nibh. Pellentesque ornare mollis dui, a porta turpis facilisis vel. Ut consequat interdum venenatis. Integer ac fermentum sapien. Fusce quis nulla eu leo pellentesque ornare ut a orci. Morbi id nibh sapien. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi faucibus rhoncus sodales. Vivamus elit urna, ultricies ac dapibus non, congue quis arcu. Cras condimentum ipsum et nisl pellentesque eu cursus justo congue. Quisque vitae lacus ac sapien imperdiet ullamcorper. Duis ac est et felis pulvinar consequat porttitor ut massa. Nunc porttitor pharetra orci, non aliquam magna aliquam sit amet. Etiam non enim ut justo blandit congue et a nibh. Maecenas ac lorem at justo tempus vehicula at nec risus. Etiam venenatis semper lectus vel faucibus. Fusce nec sem at libero euismod laoreet quis vel dui."; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.longtext); 
     TextView tv = (TextView) findViewById(android.R.id.text1); 
     tv.setText(LONG_TEXT); 
    } 
} 

回答

1

我在应用程序上有类似的行为,但只有当它在Android 2.1_update1中专门运行时。 Android 1.5,1.6,2.2和2.3.3没有出现这个问题。

2.1_u1中的某些设置必须有所不同,因为只是使用默认值不再有效。我必须明确设置属性。要解决它,我设置以下性的判定:

android:singleLine="false" 
android:inputType="textMultiLine" 
android:scrollHorizontally="false" 

显然singleLine默认为false,但inputType属性在所有指定的,singleLine默认为true。我还设置了scrollHorizontally以更多地捕捉我没有测试过的角落案例,因为添加它为其他人解决了问题。

我有一个副作用,设置这使滚动时我的文字暗淡的属性后,所以我增加了以下两个属性移除行为,以及:

android:clickable="false" 
android:longClickable="false" 
+0

这完全奏效。谢谢!旁注:当以编程方式构建用户界面时,您可以执行等效的'bodyField.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE); bodyField.setSingleLine(假); bodyField.setHorizo​​ntalScrolling(false);'这种方式没有可点击文本的问题。 – 2011-03-02 18:18:29

+0

很高兴知道,谢谢。 – codelark 2011-03-02 19:47:43

0

answer可能的帮助。

您必须在您的xml中设置android:scrollHorizo​​ntally =“false”。

+0

喜马修。我尝试将调用添加到'setHorizo​​ntallyScrolling(false)',但它没有效果。另外,无论是否使用该调用,“ScrollView”都不会水平滚动,因此无法查看截断文本。 – 2011-03-01 22:28:33

+0

你能够使用xml布局来重现这个吗? – 2011-03-01 22:38:22

+0

是的。我的等效XML布局已添加到问题中。 – 2011-03-01 23:55:23