Android:-如何添加连字符“-";在Word Break低于6.0 OS的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.
我的问题是,应用程序以巨大的尺寸显示文本.如果在行尾出现断字,则OS不会在下面的棉花糖设备中自动显示连字符(-").
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.
例如:文本:结转数据现在可用" 在用户界面中显示为
eg: Text: "Carryover data now available" It's showing in the UI as
结转
数据现在可用
不起作用
我想将此显示为
结转
数据现在可用-
不可用.
但这可以在棉花糖或更高版本的设备中正常工作.
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:-如何添加连字符“-";在Word Break低于6.0 OS的android TextView中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!