我想在 TextView 中动态显示文本。文本将动态地来自服务器。这可能是一个单词或一行或一个段落。文本根据客户要求显示大小为 56sp 的 View 。
我的问题是,应用程序以巨大的尺寸显示文本。在行尾出现断字的情况下,操作系统不会在下面的 Marshmallow 设备中自动显示连字符("-")。
例如:文本:“结转数据现已可用” 它在 UI 中显示为
结转
现在的数据ava
无法
我想显示为
结转
数据现在可用-
不能。
但这在 Marshmallow 或更高版本的设备上正常工作。
TextView 属性如下所示
<TextView
android:id="@+id/tv_primary_headline"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:fontFamily="sans-serif-black"
android:lineSpacingExtra="@dimen/promo_primarytext_line_spacing"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@color/navigation_selection_color"
android:textSize="@dimen/promo_primary_headline_size"
android:textStyle="bold"
android:visibility="visible" />
TextView mTvPrimaryHeadline = (TextView) view.
findViewById(R.id.tv_primary_headline);
this.mTvPrimaryHeadline.setText(Html.fromHtml(title));
最佳答案
我采用了另一种方法来解决这个问题。
为了推广所有设备的实现,根据句子中最长的单词动态排列文本。请使用以下两种方法并传递完整的句子和使用 TextView。这将自动为所有屏幕排列所有设备的文本。
/**
*
* @param message - Raw Header message from Server - Sentance/ Paragraph.
* The message will split and rearrange the size based on its character length
*/
private void updateText(String message, TextView mTvMessageText ) {
try {
if (message == null || message.length() == 0) {
return;
}
String word = getLongestWordLength(message);
if (word == null) {
return;
}
String wordUpper = word.toUpperCase();// Convert the word to uppercase to find the Maximum Space
// mTvMessageText - TextView need to Update the Value
float width = ((mTvMessageText.getMeasuredWidth()) - 120); // Get the width of the View with reduced padding
float textWidth = mTvMessageText.getPaint().measureText(wordUpper); // Get the word Holding Space through Paint
float textSizeInPixel = getResources().getDimension(R.dimen.message_size); // Get dimension text Size - My Size is 65sp
float lineSpacingExtra = getResources().getDimension(R.dimen.message_line_spacing); //High text size required Negative Line Spacing initially -15
/**
* Loop will reduce the font size of actual 3% in each looping
* The looping condition is the longest word in the sentence to hold in a single line of View
* Reduce the Inline space with accordingly
* Submit the reduced amount of size in the textView and check the holding pixels
* If the holding pixels are up above the total pixel size, the loop will continue
*/
while (textWidth > width) {
textSizeInPixel -= textSizeInPixel * (0.03); // Reduce the Fount Size with 3% each looping
lineSpacingExtra += Math.abs(lineSpacingExtra) * (0.06); // Reduce the minus space extra
this.mTvMessageText.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSizeInPixel);
this.mTvMessageText.setLineSpacing(lineSpacingExtra, 1f);
textWidth = mTvMessageText.getPaint().measureText(wordUpper);// Assign value to measure the text Size
}
/**
* M & N devices has a property to rearrange the word with hyphenation
* In Order to avoid the same, Application will add this logic
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
mTvMessageText.setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_NONE);
}
/**
* Text Set Using from Html
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
this.mTvMessageText.setText(Html.fromHtml(message, Html.FROM_HTML_MODE_LEGACY));
} else {
this.mTvMessageText.setText(Html.fromHtml(message));
}
} catch (Resources.NotFoundException e) {
Log.e(TAG, e.getMessage());
}
}
/**
*
* @param wordString - Raw String with Multiple word
* This may be a header
* May be a paragraph
* May be contain Multiple Paragraphs
* @return - Identify the Longest word and return the length of it
*/
private String getLongestWordLength(String wordString) {
try {
if (wordString == null) {
return null;
}
if (wordString.length() == 0) {
return null;
}
String[] splitArray = wordString.split(" ");
String word = "";
for (int i = 0; i < splitArray.length; i++) {
if (splitArray[i].length() > word.length()) {
word = splitArray[i];
}
}
return word;
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
return null;
}
关于Android:- 如何在 6.0 操作系统以下的分词器 android TextView 中添加连字符 "-",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40280038/