Justify text in text form

In my application, I first have a textview to display the text. Then I want to justify the text, but in android it is impossible to justify the text in textview. To justify the text, I use this link . I follow the answer provided by @Kondzio but it does not work. I do not know what is wrong in my code.

the code -

public class Benefits extends Activity{ private Button back; LinearLayout bText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.benefits); WebView view = new WebView(this); view.setVerticalScrollBarEnabled(true); ((LinearLayout)findViewById(R.id.bText)).addView(view); view.loadData(getString(R.string.benef), "text/html", "utf-8"); back.setOnClickListener(new View.OnClickListener(){ public void onClick(View v) { finish(); } }); } } 

Xml -

 <LinearLayout android:id="@+id/bText" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="4" android:gravity="center"> </LinearLayout> 

In strings.xml -

 <string name="benef"> <![CDATA[ <html> <head></head> <body style="text-align:justify;color:gray;background-color:black;"> "1.some text\n 2.some text\n ............. </body> </html> ]]> </string> 

I set scrollbarenabled to true to do vertical scroll in my text.

+7
android textview scroll
source share
7 answers

// Convert all language content to justify the use of html tags.

 String youtContentStr = String.valueOf(Html .fromHtml("<![CDATA[<body style=\"text-align:justify;color:#222222; \">" + getResources().getString(R.string.passthe_content) + "</body>]]>")); view.loadData(youtContentStr, "text/html", "utf-8"); 

EDIT: or change your code with backslash added

 <body style=\"text-align:justify;color:gray;background-color:black;\"> 
+7
source share
 import android.content.Context; import android.graphics.Canvas; import android.text.Layout; import android.text.StaticLayout; import android.text.TextPaint; import android.util.AttributeSet; import android.widget.TextView; public class JustifyTextView extends TextView { private int mLineY; private int mViewWidth; public JustifyTextView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); } @Override protected void onDraw(Canvas canvas) { TextPaint paint = getPaint(); paint.setColor(getCurrentTextColor()); paint.drawableState = getDrawableState(); mViewWidth = getMeasuredWidth(); String text = getText().toString(); mLineY = 0; mLineY += getTextSize(); Layout layout = getLayout(); for (int i = 0; i < layout.getLineCount(); i++) { int lineStart = layout.getLineStart(i); int lineEnd = layout.getLineEnd(i); String line = text.substring(lineStart, lineEnd); float width = StaticLayout.getDesiredWidth(text, lineStart, lineEnd, getPaint()); if (needScale(line,i)) { drawScaledText(canvas, lineStart, line, width); } else { canvas.drawText(line, 0, mLineY, paint); } mLineY += getLineHeight(); } } private void drawScaledText(Canvas canvas, int lineStart, String line, float lineWidth) { float x = 0; if (isFirstLineOfParagraph(lineStart, line)) { String blanks = " "; canvas.drawText(blanks, x, mLineY, getPaint()); float bw = StaticLayout.getDesiredWidth(blanks, getPaint()); x += bw; line = line.substring(3); } float d = (mViewWidth - lineWidth) / line.length() - 1; for (int i = 0; i < line.length(); i++) { String c = String.valueOf(line.charAt(i)); float cw = StaticLayout.getDesiredWidth(c, getPaint()); canvas.drawText(c, x, mLineY, getPaint()); x += cw + d; } } private boolean isFirstLineOfParagraph(int lineStart, String line) { return line.length() > 3 && line.charAt(0) == ' ' && line.charAt(1) == ' '; } private boolean needScale(String line,int lineNumber) { Layout layout = getLayout(); if (line.length() == 0 || layout.getLineCount() == 1 || lineNumber == (layout.getLineCount() - 1)) { return false; } else { return line.charAt(line.length() - 1) != '\n'; } } } 

I modified the code given by Sasikumar to follow correctly.

  • If lineCount () is 1, don't justify it. (That was done)
  • if lastLine, don't justify it. (this goes beyond justification).

This is a purely textual solution. Html does not work. no line (\ n) or any other character works. All spaces are deleted. Thus, it is just for the limited use of clear text.

+6
source share

use this dependency for justifytext library

 compile 'com.uncopt:android.justified:1.0' 

and gradle sync

To justify text in a text view, use this in your XML:

 <com.uncopt.android.widget.text.justify.JustifiedTextView android:layout_width="match_parent" android:id="@+id/t1" android:padding="5dp" android:textColor="#303336" android:textSize="18sp" android:layout_height="wrap_content"/> 

and use this in a java class:

 JustifiedTextView myMsg = (JustifiedTextView)findViewById(R.id.t1); myMsg.setText("ur text data for justify"); 
+5
source share
 public class Main extends Activity { WebView webView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); webView = (WebView) findViewById(R.id.webview); String text = "<html><body>" + "<p align=\"justify\">" + getString(R.string.lorem_ipsum) + "</p> " + "</body></html>"; webView.loadData(text, "text/html", "utf-8"); } } main main.xml: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <WebView android:id="@+id/webview" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </RelativeLayout> 
+1
source share

Copy the following class into your project and extend the text from this:

JustifiedTextView.java :

  import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Color; import android.text.SpannableString; import android.webkit.WebChromeClient; import android.webkit.WebView; public class JustifiedTextView extends WebView { private String core = "<html><body style='text-align:justify;color:rgba(%s);font-size:%dpx;margin: 10px 10px 10px 10px;'>%s</body></html>"; private String textColor = "0,0,0,255"; private String text = ""; private int textSize = 12; private int backgroundColor = Color.TRANSPARENT; public JustifiedTextView(Context context) { super(context); this.setWebChromeClient(new WebChromeClient() { }); } public void setText(String s) { this.text = s; // this.setPadding(10, 10, 10, 10); reloadData(); } @SuppressLint("NewApi") private void reloadData() { // loadData(...) has a bug showing utf-8 correctly. That why we need // to set it first. this.getSettings().setDefaultTextEncodingName("utf-8"); this.loadData(String.format(core, textColor, textSize, text), "text/html", "utf-8"); // set WebView background color *after* data was loaded. super.setBackgroundColor(backgroundColor); // Hardware rendering breaks background color to work as expected. // Need to use software renderer in that case. if (android.os.Build.VERSION.SDK_INT >= 11) this.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null); } public void setTextColor(int hex) { String h = Integer.toHexString(hex); int a = Integer.parseInt(h.substring(0, 2), 16); int r = Integer.parseInt(h.substring(2, 4), 16); int g = Integer.parseInt(h.substring(4, 6), 16); int b = Integer.parseInt(h.substring(6, 8), 16); textColor = String.format("%d,%d,%d,%d", r, g, b, a); reloadData(); } public void setBackgroundColor(int hex) { backgroundColor = hex; reloadData(); } public void setTextSize(int textSize) { this.textSize = textSize; reloadData(); } } 

You can use it as follows:

  JustifiedTextView myMsg = new JustifiedTextView(this); myMsg.setText(msg); 

If your text view is in xml, edit it like this:

  <com.whatever.JustifiedTextView <!--path to the JustifiedTextView.java --> android:id="@+id=t1"> </JustifiedTextView> 

Do this in your code:

  JustifiedTextView myMsg = (JustifiedTextView)findViewById(R.id.t1); myMsg.setText("text"); 
0
source share

first Create a new JustifyTextView.java class, aligning the Textview text in the center. Below is the full code below

 your pakagename; import android.content.Context; import android.graphics.Canvas; import android.text.Layout; import android.text.StaticLayout; import android.text.TextPaint; import android.util.AttributeSet; import android.widget.TextView; public class JustifyTextView extends TextView { private int mLineY; private int mViewWidth; public JustifyTextView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); } @Override protected void onDraw(Canvas canvas) { TextPaint paint = getPaint(); paint.setColor(getCurrentTextColor()); paint.drawableState = getDrawableState(); mViewWidth = getMeasuredWidth(); String text = (String) getText(); mLineY = 0; mLineY += getTextSize(); Layout layout = getLayout(); for (int i = 0; i < layout.getLineCount(); i++) { int lineStart = layout.getLineStart(i); int lineEnd = layout.getLineEnd(i); String line = text.substring(lineStart, lineEnd); float width = StaticLayout.getDesiredWidth(text, lineStart, lineEnd, getPaint()); if (needScale(line)) { drawScaledText(canvas, lineStart, line, width); } else { canvas.drawText(line, 0, mLineY, paint); } mLineY += getLineHeight(); } } private void drawScaledText(Canvas canvas, int lineStart, String line, float lineWidth) { float x = 0; if (isFirstLineOfParagraph(lineStart, line)) { String blanks = " "; canvas.drawText(blanks, x, mLineY, getPaint()); float bw = StaticLayout.getDesiredWidth(blanks, getPaint()); x += bw; line = line.substring(3); } float d = (mViewWidth - lineWidth) / line.length() - 1; for (int i = 0; i < line.length(); i++) { String c = String.valueOf(line.charAt(i)); float cw = StaticLayout.getDesiredWidth(c, getPaint()); canvas.drawText(c, x, mLineY, getPaint()); x += cw + d; } } private boolean isFirstLineOfParagraph(int lineStart, String line) { return line.length() > 3 && line.charAt(0) == ' ' && line.charAt(1) == ' '; } private boolean needScale(String line) { if (line.length() == 0) { return false; } else { return line.charAt(line.length() - 1) != '\n'; } } } 

Then go to your xml code, replacing the text with the following code

  <your package.JustifyTextView android:id="@+id/Textview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:lineSpacingMultiplier="1.1" android:text="hai hello how" /> 
0
source share

How to justify text in Android without using any library . See more code .

Create an action and paste the following code Read more

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); WebView webView= (WebView) findViewById(R.id.webView); WebSettings webSettings=webView.getSettings(); webSettings.setJavaScriptEnabled(true); String htmlText = " %s "; String myData = "<html><body style=\"text-align:justify\">The E-Learning Application is a Mobile based application. The main objective of this application is to make it interactive and its ease of use.The main features that the application provides are online tutorial and tests, once the registered people select their interested subjects. <br/> This helps to establish incremental learning process. Users can also discuss an issue/topic by posting messages in the discussion forum. Along with this they can also take real time simulations of the most widely known competitive exams.</body></Html>"; webView.loadData(String.format(htmlText,myData),"text/html","utf-8"); } 
0
source share

All Articles