Android:- 如何添加连字符“-"在 6.0 操作系统以下的断字 android TextView [英] Android:- How to add Hyphen "-" in word break android TextView below 6.0 OS
问题描述
我想在 TextView 中动态显示文本.文本将动态地来自服务器.这可能是一个词,也可能是一行或一段.文本根据客户要求显示大小为 56sp 的视图.
I want to show text dynamically in a TextView. The text will come from the server dynamically. This may be a single word or a single line or a paragraph. The text is displaying the view with size as 56sp based on customer requirement.
我的问题是,应用程序以巨大的尺寸显示文本.在行尾出现断字的情况下,操作系统不会在 Marshmallow 设备下方自动显示连字符(-").
My issue here is, the application displaying the text in a huge size. In the case of word break at the end of the line, OS is not showing a hyphen("-") automatically in below Marshmallow devices.
例如:文本:结转数据现在可用"它在 UI 中显示为
eg: Text: "Carryover data now available" It's showing in the UI as
结转
数据现在 ava
无法
我想将其显示为
结转
数据现在ava-
无法使用.
但这在 Marshmallow 或以上设备中正常工作.
But this is properly working in Marshmallow or above devices.
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));
推荐答案
我实施了一种替代方法来解决此问题.
I implement an alternate way to fix this issue.
为了概括所有设备的实现,根据句子中最长的单词动态排列文本.请使用以下两种方法并传递完整的句子并使用TextView.这将自动为所有屏幕的所有设备排列文本.
To generalize the implementation for all devices, dynamically arrange the text based on the longest word in the sentence. Please use the below two methods and pass the complete sentence and using TextView. This will automatically arrange the text for all the devices for all screens.
/**
*
* @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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!