我在我的申请中使用了TextView#getMaxLines()
几周没有发生任何事故。
Lint现在通知我它只在API 16+中可用(#setMaxLines()
是API 1 + ...),但是(据我所知)我没有修改任何会导致这种情况的东西突然的标志 - 我的min-sdk已经有8段了一段时间,我的源代码控制器中有文件来证明它。
1)为什么lint会随机标记此错误? (要清楚,我的意思是说它应该最初抓住它 - 我并不是说这是它根本不应该被标记的东西)。
2)有没有办法在pre-api 16设备上检索TextView的maxLines?我检查了 the source 但无法设法使用 2.2 device 上的公开方法检索此值。
答案 0 :(得分:25)
在TextViewCompat
int maxLines = TextViewCompat.getMaxLines(yourtextView);
查看this答案以获取更多信息。
答案 1 :(得分:4)
您可以使用反射:
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();
}
}
或强>
也许,最好的方法是将maxLine值保持为值并在xml中设置它,并在代码中获取int资源。
答案 2 :(得分:1)
该方法的代码在2.2上根本不存在,所以当然不能直接使用它。
另一方面,我在两个文件上运行差异,似乎新的4.2.2 TextView内部没有使用任何新的API(这完全基于其导入)。您可以将它作为一个类添加到项目中,并在所有Android版本中使用它而不是内置的TextView。