是否可以在pre-api-16设备上使用TextView#getMaxLines()?
我在我的应用程序中使用了TextView#getMaxLines()
几个星期没有发生意外。尽管(据我所知),我还没有修改任何会导致这个突然的标志的东西 - 我的min-sdk已经有8段时间了,我在源代码管理中有文件证明它。是否可以在pre-api-16设备上使用TextView#getMaxLines()?
1)为什么lint可能随机标记这个错误? (要说清楚,我的意思是说最初它应该已经发现 - 我不是暗示这是它根本不应该标记的东西)。
2)是否有任何方法检索pre-api 16设备上的TextView的maxLines?我检查了the source但无法设计一种方法来检索此值使用公开的方法在2.2 device。
一个简单的办法加入到支持LIB V4在TextViewCompat
int maxLines = TextViewCompat.getMaxLines(yourtextView);
退房this回答一些更多的信息。
该方法的代码根本不存在于2.2上,所以当然你不能直接使用它。
另一方面,我对这两个文件运行了差异,看起来好像新的4.2.2 TextView在内部没有使用任何新的API(这完全基于它的导入)。您可以将其作为类添加到项目中,并在所有版本的Android中使用它代替内置的TextView。
我实际上计划对'TextView'进行子类化,所以我可以在XML中指定字体,所以这听起来像个好主意。我想在我的项目中添加这个作为类的开销会很小? (即使没有性能差异,如果我分类4.2.2 TextView(包括它之后)而不是2.2之一?) +1对于兼容性的初步检查,我会包含它并在API8模拟器。 – ataulm 2013-04-27 19:14:13
我无法直接包含新版本;很多进口无法解决。我也尝试复制2.2 TextView类,并且无法解析相同的导入(例如'import android.content.res.CompatibilityInfo;') – ataulm 2013-04-27 20:29:27
您可以使用反射:
Field mMaximumField = null;
Field mMaxModeField = null;
try {
mMaximumField = text.getClass().getDeclaredField("mMaximum");
mMaxModeField = text.getClass().getDeclaredField("mMaxMode");
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
if (mMaximumField != null && mMaxModeField != null) {
mMaximumField.setAccessible(true);
mMaxModeField.setAccessible(true);
try {
final int mMaximum = mMaximumField.getInt(text); // Maximum value
final int mMaxMode = mMaxModeField.getInt(text); // Maximum mode value
if (mMaxMode == 1) { // LINES is 1
text.setText(Integer.toString(mMaximum));
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
OR:
也许,最好的办法就是保持的MaXLine值的值,并将其设置在XML值,并获得尽可能在代码INT资源。
我同意你的“但也许”部分,这就是我正在计划解决这个问题。我不认为使用反射有任何意义,因为如果不手动跟踪值*,除了使用getMaxLines()用于API16 +之外,我不能处理API16之前的设备(在这种情况下,会使后者变得多余)。 – ataulm 2013-04-27 20:11:22
等啊,我想我完全误解了。 (如果你删除了bulletpoint标记,它会修正你的代码格式为SO。)如果'mMaximum'是私人的,它会在通话时得到正确的值吗? – ataulm 2013-04-27 20:15:20
解决方案也可以切换解决方法。 – ataulm 2013-04-27 20:24:53
在我看来,这个答案是最好的,应该接受 – 2015-12-11 11:41:23
太棒了!这应该是一个被接受的答案! – box 2016-05-19 10:18:16
适合我! – 2016-06-30 12:55:03