Android TextView文本没有被包装
任何人都可以告诉我什么是错的文字? 长于一行的文本不会换行到下一行,而是超出屏幕。
以下是代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="4dip"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="4dip"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="4dip"> <TextView android:id="@+id/reviewItemEntityName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="event/venue" android:textColor="@color/maroon" android:singleLine="true" android:ellipsize="end" android:textSize="14sp" android:textStyle="bold" android:layout_weight="1" /> <ImageView android:id="@+id/reviewItemStarRating" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_alignParentBottom="true" android:src="@drawable/title_1_star" /> </LinearLayout> <TextView android:id="@+id/reviewItemDescription" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Description comes here" android:textSize="12sp" android:layout_weight="1"/> </LinearLayout> </LinearLayout>
我自己修复了,关键是android:width="0dip"
<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:padding="4dip" android:layout_weight="1"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="4dip"> <TextView android:id="@+id/reviewItemEntityName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/maroon" android:singleLine="true" android:ellipsize="end" android:textSize="14sp" android:textStyle="bold" android:layout_weight="1" /> <ImageView android:id="@+id/reviewItemStarRating" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_alignParentBottom="true" /> </LinearLayout> <TextView android:id="@+id/reviewItemDescription" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="12sp" android:width="0dip" /> </LinearLayout> <ImageView android:id="@+id/widget01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/arrow_nxt" android:layout_gravity="center_vertical" android:paddingRight="5dip" /> </LinearLayout>
这个问题的唯一正确的答案是,你需要设置父母适当的宽度(在这种情况下FILL_PARENT
, WRAP_CONTENT
)和使用android:layout_weight=1
为需要被包装的WRAP_CONTENT
。
SingleLine
默认打开,所以不会做任何更改。
width
设置为0px将工作,但不是一个好的解决scheme。
一些例子(这次在tableview中),使用xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <TableLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:stretchColumns="*" android:id="@+id/tableLayout1"> <TableRow android:id="@+id/tableRow1" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:text="test1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0" /> <TextView android:layout_weight="1" android:text="test2 very long text that needs to be wrapped properly using layout_weight property and ignoring singleline since that is set by default..." android:layout_width="fill_parent" android:layout_height="wrap_content" /> </TableRow> </TableLayout> </LinearLayout>
如果你想在代码中设置它,你需要将layout_weight作为第三个参数,如下例所示:
row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); TextView label = new TextView(getApplicationContext()); label.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1f));
您必须使用2个参数:
-
android:ellipsize="none"
:在textview宽度上文字不被剪切 -
android:scrollHorizontally="false"
文本将根据需要包装多行
在你的xml文件中使用就足够了。
android:singleLine="false".
希望它能工作。
祝一切顺利!
使用TableLayout>TableRow>TextView
时,我无法使用任何这些解决scheme。 然后我发现TableLayout.shrinkColumns="*"
。 唯一的解决scheme是强制TextView layout_width:250px
等,但我不喜欢强制这样的宽度。
如果使用表格尝试这样的事情。
<TableLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:shrinkColumns="*">
注意你需要shrinkColumns="*"
这显然在一个<LinearLayout>
。 所以就像<LinearLayout> <TableLayout> <TableRow> <TextView>
引用:
TableLayout
http://code.google.com/p/android/issues/detail?id=4000
希望能帮助别人。
您的代码中有一个布局参数是错误的。 在第一个TextView中
android:layout_width="wrap_content"
改成
android:layout_width="fill_parent"
超出屏幕宽度大小的文本将换行并设置android:singleline="false"
。
对于我的情况删除inputtypes做了窍门,我使用android:inputType =“textPostalAddress”由于我的textview被粘贴到一行,并没有包装,解决这个问题。
我是一个Android(和GUI)初学者,但有很多软件的经验。 我已经通过了一些教程,这是我的理解:
layout_width和layout_height是TextView的属性。 它们是TextView如何形成自己的指令,并不是指如何处理TextView中的内容。
如果使用“fill_parent”,则表示TextView应该相对于它的父视图进行自我形成,它应该填充它。
如果使用“wrap_content”,则表示应该忽略父视图,并让TextView的内容定义它的形状。
我认为这是令人困惑的地方。 “wrap_content”没有告诉TextView如何pipe理它的内容(包装行),它告诉它它应该相对于它的内容来塑造自己。 在这种情况下,没有新的行字符,它自己的形状,使所有的文字是在一个单一的行(不幸的是溢出父母)。
我想你想要它水平填充父,并垂直包装它的内容。
设置文本视图的高度android:minHeight="some pixes"
或android:width="some pixels"
。 这将解决问题。
即使这是一个古老的线索,我想分享我的经验,因为它帮助了我。 我的应用程序工作正常的操作系统2.0和4.0 +,但对于运行OS 3.x的HTC手机文本不包装。 什么对我来说是包括这两个标签。
android:maxLines="100" android:scrollHorizontally="false"
如果你消除了它只是没有工作的OS 3.0设备。 “ellipsize”参数有中性作用。 以下是完整的textview标签
<TextView android:id="@+id/cell_description" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingTop="5dp" android:maxLines="100" android:scrollHorizontally="false" android:textStyle="normal" android:textSize="11sp" android:textColor="@color/listcell_detail"/>
希望这将有助于某人。
增加高度即。 android:height =“一些大小”,对我来说工作正常。
我用android:ems="23"
来解决我的问题。 在你的情况下,用最好的价值取代23。
<TextView android:id="@+id/msg" android:ems="23" android:text="ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab " android:textColor="@color/white" android:textStyle="bold" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
我有一个类似的问题,我的两个水平加权TextViews没有包装文本。 后来我发现这个问题是因为我的视图父母有wrap_content而不是match_parent。
我认为这取决于显示器中布局的特定组合。 有些标志可能会被覆盖或忽略。 我有一个TabHost与选项卡,每个选项卡是一个表的列表。 所以它是ListView的一个选项卡,每一行都是TextView的TableLayout。 我尝试了上面列出的修复程序,没有一个工作。
我把这个属性:
android:inputType="textMultiLine"
到我的TextView,它有包装线和用户可以“input”一个新的一行。
================================================== ==========
当你来到这篇文章时,你可能想要创build一个可以显示多行的Big TextView,所以这些属性也可能需要
android:layout_height="Xdp" //where X is a number depends on how big Textview you want android:gravity="top" //in order to make your text start from the top of your TextView.
我知道,这是问题,这是正确的,但在我的情况下,问题是在'dp'中设置textSize属性 – 我已经将其更改为“sp”,它工作正常。
在我的情况下,用TableRow > ScrollView > TextView
嵌套,我通过在TableRow
上设置android:layout_width
为fill_parent
,在ScrollView
和TextView
上设置wrap_content
来解决问题。
你必须在你的TextView
标签中使用android:singleLine="false"
。
我终于设法添加一些像素到TextView的高度来解决这个问题。
首先你需要得到TextView的高度。 这不是直接的,因为它已经被绘制之前是0。
将此代码添加到onCreate:
mReceiveInfoTextView = (TextView) findViewById(R.id.receive_info_txt); if (mReceiveInfoTextView != null) { final ViewTreeObserver observer = mReceiveInfoTextView.getViewTreeObserver(); observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { int height = mReceiveInfoTextView.getHeight(); int addHeight = getResources().getDimensionPixelSize(R.dimen.view_add_height); mReceiveInfoTextView.setHeight(height + addHeight); // Remove the listener if possible ViewTreeObserver viewTreeObserver = mReceiveInfoTextView.getViewTreeObserver(); if (viewTreeObserver.isAlive()) { viewTreeObserver.removeOnGlobalLayoutListener(this); } } }); }
您需要将此行添加到dimens.xml
<dimen name="view_add_height">10dp</dimen>
希望它有帮助。
我刚刚删除了android:lines="1"
并添加了android:maxLines="2"
,这样文本就自动换行了。 问题是android:lines
属性。 这导致文本包装不会发生。
我没有必要使用maxEms
或singleLine="false"
(不build议使用的API)来解决这个问题。
我在我的string中间添加了\ n,看起来没问题。
要包装文本,并把文本放在下一行,我们sholud使用“\ n”即布局xml文件中的新行字符,并检查在模拟器上的更改不在布局屏幕上。