Android spanTextView中的可启用文本未正确显示。/span
我的代码运行得很好,但是当将构建工具和库从26.0.2更新到27.0.3时,TextView开始剪切文本。线性布局中有4个文本视图。每个文本视图的宽度为0dp,权重为1。所有文本视图都有一个4个字母的单词,所以它们应该显示相同的内容,但是构建工具更新破坏了它Android spanTextView中的可启用文本未正确显示。/span,android,textview,spannable,Android,Textview,Spannable,我的代码运行得很好,但是当将构建工具和库从26.0.2更新到27.0.3时,TextView开始剪切文本。线性布局中有4个文本视图。每个文本视图的宽度为0dp,权重为1。所有文本视图都有一个4个字母的单词,所以它们应该显示相同的内容,但是构建工具更新破坏了它 String s = "ssss"; float textBigger = 1.5f; SpannableString ss1 = new SpannableString(s);
String s = "ssss";
float textBigger = 1.5f;
SpannableString ss1 = new SpannableString(s);
int index = 2;
ss1.setSpan(new RelativeSizeSpan(textBigger), 0, index, 0); // set size
ss1.setSpan(new ForegroundColorSpan(biggerTextColor), 0, index, 0);// set color
textView.setText(ss1, TextView.BufferType.SPANNABLE);
它应该是什么样子的:
它现在的样子:
从26.0.2更新的库:
compile 'com.android.support:appcompat-v7:27.0.2'
compile 'com.android.support:design:27.0.2'
compile 'com.android.support:cardview-v7:27.0.2'
compile 'com.android.support:support-v4:27.0.2'
编辑:
经过更多调试后,我将gradle改回以下内容:
compileSdkVersion 27
buildToolsVersion = '27.0.3'
targetSdkVersion 23
compile 'com.android.support:appcompat-v7:26.0.2'
现在只要将targetSdkVersion更改为27,问题就出现了。这件事与它无关。TextView中的文本表现不同。它甚至在AndroidStudio xml预览中显示,当targetSdkVersion设置为27时,文本被剪切
要测试它,请使用上面的渐变设置创建一个项目。以及下面的主要活动布局。将targetSdkVersion从23更改为27,您应该会看到问题所在
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.ziadalhalabi.testspannable.MainActivity">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:layout_weight="1"
android:background="?attr/selectableItemBackgroundBorderless"
android:ellipsize="end"
android:fontFamily="sans-serif-light"
android:gravity="center"
android:maxLines="1"
android:text="Amin"
android:textSize="18sp" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:layout_weight="1"
android:background="?attr/selectableItemBackgroundBorderless"
android:ellipsize="end"
android:fontFamily="sans-serif-light"
android:gravity="center"
android:maxLines="1"
android:text="Bmin"
android:textSize="18sp" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:layout_weight="1"
android:background="?attr/selectableItemBackgroundBorderless"
android:ellipsize="end"
android:fontFamily="sans-serif-light"
android:gravity="center"
android:maxLines="1"
android:text="Cmaj"
android:textSize="18sp" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:layout_weight="1"
android:background="?attr/selectableItemBackgroundBorderless"
android:fontFamily="sans-serif-light"
android:gravity="center"
android:maxLines="1"
android:text="Dmin"
android:textSize="18sp" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:layout_weight="1"
android:background="?attr/selectableItemBackgroundBorderless"
android:fontFamily="sans-serif-light"
android:gravity="center"
android:maxLines="1"
android:text="Gmaj"
android:textSize="18sp" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:layout_weight="1"
android:background="?attr/selectableItemBackgroundBorderless"
android:fontFamily="sans-serif-light"
android:gravity="center"
android:maxLines="1"
android:text="C#min"
android:textSize="18sp" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:layout_weight="1"
android:background="?attr/selectableItemBackgroundBorderless"
android:fontFamily="sans-serif-light"
android:gravity="center"
android:maxLines="1"
android:text="F#min"
android:textSize="18sp" />
</LinearLayout>
</LinearLayout>
好的,我能够重现这个问题。这里的
appcompat-v7
中完全可能存在潜在的bug。但是,您可以通过简化布局来解决此问题。用一个简单的android:layout\u width=“0dp”
替换所有TextView
小部件上的android:layout\u width=“0dp”和android:layout\u weight=“1”
组合:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:ellipsize="end"
android:fontFamily="sans-serif-light"
android:gravity="center"
android:maxLines="1"
android:text="Amin"
android:textSize="18sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:ellipsize="end"
android:fontFamily="sans-serif-light"
android:gravity="center"
android:maxLines="1"
android:text="Bmin"
android:textSize="18sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:ellipsize="end"
android:fontFamily="sans-serif-light"
android:gravity="center"
android:maxLines="1"
android:text="Cmaj"
android:textSize="18sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:fontFamily="sans-serif-light"
android:gravity="center"
android:maxLines="1"
android:text="Dmin"
android:textSize="18sp" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:fontFamily="sans-serif-light"
android:gravity="center"
android:maxLines="1"
android:text="Gmaj"
android:textSize="18sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:fontFamily="sans-serif-light"
android:gravity="center"
android:maxLines="1"
android:text="C#min"
android:textSize="18sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:fontFamily="sans-serif-light"
android:gravity="center"
android:maxLines="1"
android:text="F#min"
android:textSize="18sp" />
</LinearLayout>
</LinearLayout>
在compileSdkVersion
和targetSdkVersion
都设置为27的情况下,使用appcompat-v7
的27.0.2
,在运行安卓8.1的Nexus 5X上实现了这一点:
在你最初的方法中,似乎发生的事情是Android试图对这些行进行文字包装,但由于你将maxLines
设置为1
,它反而截断了这些行。什么是“剪切文本”呢?“毁了它”是什么意思?textbeager
的值是多少?biggerTextColor
的值是多少?四个TextView
小部件之间有什么区别?您是否有一个屏幕截图,与您看到的内容相比,您期望的内容是什么?@commonware谢谢您的评论。我上传了2个截图,并添加了更多的infosOK。。。真奇怪。我很难相信buildToolsVersion
会产生这样的效果。我可以很容易地看到基于其他更改的问题(例如,您使用appcompat-v7
并升级到该版本的某个较新版本)。如果您创建了一个复制效果的项目,并将其上传到某个地方,我很想看看是否可以在这里实现。@Commonware很抱歉,库是根据构建工具版本tooAh更新的,这很可能是您遇到困难的原因。buildToolsVersion
和库版本在很大程度上是独立的。库版本与您的编译器dkversion
和targetSdkVersion
相关联。尝试使用buildToolsVesrion'27.0.3'
,但将compileSdkVersion
和targetSdkVersion
删除到26
,并将支持库版本删除到26.1.0
。如果问题消失了,我的猜测是这个问题与appcompat-v7:27.0.2有关,如果你用重现问题的项目提交错误报告,他们应该能够修复它。