Justify text in textview

前端 未结 7 2125
有刺的猬
有刺的猬 2020-12-08 12:40

In my app first I have textview to show text. Then I want to justify text but in android its not possible to justify text in textview. To justify text I am taking help from

相关标签:
7条回答
  • 2020-12-08 12:51

    // converting all the language content to justify using 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 added back slash

    <body style=\"text-align:justify;color:gray;background-color:black;\">
    
    0 讨论(0)
  • 2020-12-08 12:51

    use this dependency for justifytext library

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

    and sync gradle

    To justify text in 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 the Java class:

    JustifiedTextView myMsg = (JustifiedTextView)findViewById(R.id.t1);
    myMsg.setText("ur text data for justify");
    
    0 讨论(0)
  • 2020-12-08 12:51

    How to justify text in Android without using any Library See More code.

    Create a activity and paste following code See 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 讨论(0)
  • 2020-12-08 12:54
    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>
    
    0 讨论(0)
  • 2020-12-08 12:56
    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 code given by Sasikumar to correct followings.

    1. If lineCount() is 1, do not justify. (It was doing so)
    2. if lastLine, do not justify it. (it was going beyond justification)

    This is pure text only solution. Html does not work. no linebreak (\n) or any other character works. All spaces are removed. So its just for limited , pure text use.

    0 讨论(0)
  • 2020-12-08 13:08

    first Create new class JustifyTextView.java its alignment the Textview text in center. Am attached 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 replace your textview by this 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 讨论(0)
提交回复
热议问题