Android: - How to add Hyphen "-" in the word break android TextView below 6.0 OS

I want to dynamically display text in a TextView. The text will come from the server dynamically. It can be one word or one line or paragraph. The text displays a view with a size of 56sp based on customer requirements.

My problem here is that the application displays text in a huge size. In the event of a word break at the end of the line, the OS does not automatically display a hyphen ("-") below the Marshmallow devices.

for example: Text: "Migration data is now available" It appears in the user interface as

Transfer

data is now ava

ilable

I want to show it as

Transfer

now ava data is

ilable.

But this works correctly on Marshmallow or higher devices.

The TextView property is shown below.

<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)); 
+5
source share
1 answer

I am using an alternative way to fix this problem.

To summarize the implementation for all devices, dynamically arrange the text based on the longest word in the sentence. Use the following two methods and pass the complete sentence using TextView. This will automatically arrange text for all 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; } 
+1
source

Source: https://habr.com/ru/post/1258877/


All Articles