我不确定它只是“最后一行”,但我们有一个带有fill_parent宽度,wrap_content高度的TextView的应用程序。文本正在从Java代码中动态放入。即使布局中有足够的空间,文本的最后一行也没有显示出来。它在一个相当深的视图层次结构内部,所以我的猜测是它的测量逻辑变得混乱,但它非常令人沮丧。我们需要猜测文本中会有多少行,并相应地设置'android:lines'以使其工作。
有人见过这个吗?在代码中,请参见底部的id'contentTextView'。如果我拿出'android:lines',最后一行文字就会消失。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/flag"
>
<include android:id="@+id/incHeader" layout="@layout/header"/>
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<ImageView
android:layout_width="fill_parent"
android:layout_height="101dp"
android:background="@drawable/headershadow"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="invisible"
android:layout_weight="1"/>
<ImageView
android:layout_width="fill_parent"
android:layout_height="101dp"
android:background="@drawable/footershadow"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/gybcontentback"
android:layout_gravity="center_horizontal"
android:orientation="vertical">
<include android:id="@+id/gybHeaderInclude" layout="@layout/gybcontentheader"/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#4f4f4f"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:lines="9"
android:id="@+id/contentTextView"/>
<ImageView
android:layout_marginTop="15dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/button_blue_rascal_button"
android:id="@+id/buttonMoreInfo"/>
</LinearLayout>
</FrameLayout>
<include android:id="@+id/incFooter" layout="@layout/menu"/>
</LinearLayout>
Java代码。我在onCreate期间使用标准Java字符串填充TextView。
@Override
protected String body()
{
return "Rascal Flatts and The Jason Foundation, Inc. are working together to prevent suicide.\n\n" +
"Your Battle Buddy (or family member) may need a friend.\n\n" +
"Take the pledge to B1.";
}
基类调用它来获取实际文本
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(contentView());
wireMenu();
TextView headerText = (TextView) findViewById(R.id.gybHeaderText);
if(headerText != null)
headerText.setText(header());
((TextView) findViewById(R.id.contentTextView)).setText(body()); // This is where the text is set
}
无论如何,我把它煮熟了。我正在切割零件以查看剩下的内容并仍然遇到同样的问题。我想我可能找到了触发器和解决方案,但不是“原因”。
答案 0 :(得分:7)
我有同样的问题。我找到了一个解决方法。 在文本中添加新行“\ n”。这将始终显示您的所有文字。
答案 1 :(得分:2)
您是否尝试使用LinearLayout直接包围TextView,并将width和height设置为wrap_content?
它对我有用......
答案 2 :(得分:1)
我将布局简化为基础部分。这是剥离版本,仍在关闭文本:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/flag"
>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="vertical">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#4f4f4f"
android:id="@+id/contentTextView"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/button_blue_rascal_button"
android:id="@+id/buttonMoreInfo"/>
</LinearLayout>
</LinearLayout>
我认为,问题是父线性LinearLayout从其内部的ImageView获取其宽度。在此混合的某处,TextView获取其请求高度的值不正确。我想这与UI的计算方式有关。家长必须要求孩子们要求的宽度,然后回去告诉每个人他们的宽度是多少,然后要求高度。这样的事情。无论如何,以下工作。图像宽度为263像素(以mdpi为单位),因此如果我在父布局上设置263dp而不是wrap_content,则一切正常。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/flag"
>
<LinearLayout
android:layout_width="263dp"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="vertical">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#4f4f4f"
android:id="@+id/contentTextView"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/button_blue_rascal_button"
android:id="@+id/buttonMoreInfo"/>
</LinearLayout>
</LinearLayout>
将TextView设置为wrap_content也可以,但它会将整个布局推得比我想要的大。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/flag"
>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#4f4f4f"
android:id="@+id/contentTextView"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/button_blue_rascal_button"
android:id="@+id/buttonMoreInfo"/>
</LinearLayout>
</LinearLayout>
不确定这里的内容是什么。总结一下,如果你开始看到计算出的高度问题,可以考虑在那里修复父级的宽度,这样就不会混淆UI计算。
答案 3 :(得分:1)
我有一个不同的问题,但同样相关。这是我认为适用于您所需要的解决方案。您可以在任何类型的ViewGroup中为TextView使用全局布局侦听器。
final TextView dSTextView = (TextView)findViewById(R.id.annoyingTextView);
dSTextView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
dSTextView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
float lineHeight = dSTextView.getLineHeight();
int maxLines = (int) (dSTextView.getHeight() / lineHeight);
if (dSTextView.getLineCount() != maxLines) {
dSTextView.setLines(maxLines);
}
}
});
您可以阅读更多相关信息here
答案 4 :(得分:0)
你试过吗
android:singleLine="false"
答案 5 :(得分:0)
尝试添加
你在TextView中的android:padding
。为我工作
答案 6 :(得分:0)
将有问题的TextView放在FrameLayout(或某个容器)中。我认为问题是因为你的兄弟姐妹观点。