it-swarm.com.de

Richten Sie den Text in der Textansicht aus

In meiner App habe ich zuerst eine Textansicht, um Text anzuzeigen. Dann möchte ich Text rechtfertigen, aber in Android ist es nicht möglich, Text in Textansicht zu rechtfertigen. Um den Text zu rechtfertigen, nehme ich Hilfe von diesem Link . Ich folge der Antwort von @Kondzio, aber sie funktioniert nicht. Ich weiß nicht, was in meinem Code falsch ist.

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> 

Ich setze scrollbarenabled auf true, um den Text vertikal zu scrollen.

7
John R

// Konvertieren des gesamten Sprachinhalts, um HTML-Tags zu rechtfertigen.

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");

BEARBEITEN: Oder Ändern Sie Ihren Code mit zusätzlichem Schrägstrich

<body style=\"text-align:justify;color:gray;background-color:black;\">
7
Padma Kumar
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';
    }
}

}

Ich habe den von Sasikumar gegebenen Code geändert, um die folgenden Punkte zu korrigieren.

  1. Wenn lineCount () 1 ist, begründen Sie es nicht. (Es tat so)
  2. wenn lastLine, begründen Sie es nicht. (es ging über die Rechtfertigung hinaus)

Dies ist eine reine Textlösung. HTML funktioniert nicht. Kein Zeilenumbruch (\ n) oder andere Zeichen funktionieren. Alle Leerzeichen werden entfernt. Also nur für begrenzte, reine Textnutzung.

6
rajesh

verwenden Sie diese Abhängigkeit für die Bibliothek justifytext

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

und sync gradle

Um den Text in der Textansicht zu rechtfertigen, verwenden Sie dies in Ihrem 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"/>

und verwenden Sie dies in der Java-Klasse:

JustifiedTextView myMsg = (JustifiedTextView)findViewById(R.id.t1);
myMsg.setText("ur text data for justify");
6
shweta jariya
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
M.Ganji

Kopieren Sie die folgende Klasse in Ihr Projekt und erweitern Sie Ihre Textansicht daraus: 

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's 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's 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();
    }

}  

Sie können es so verwenden: 

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

Wenn Ihre Textansicht in XML vorliegt, bearbeiten Sie sie wie folgt: 

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

Tun Sie dies in Ihrem Code: 

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

So richten Sie Text in Android ein, ohne eine Bibliothek zu verwenden Siehe mehr Code .

Erstellen Sie eine Aktivität und fügen Sie den folgenden Code ein Weitere anzeigen

@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
Narendra Yadav

erstellen Sie zunächst eine neue Klasse JustifyTextView.Java, deren Ausrichtung den Textview-Text in der Mitte ausrichtet. Füge unten den vollständigen Code hinzu

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';
    }
}

 }

Dann gehen Sie zu Ihrem XML-Code und ersetzen Sie Ihren Text durch diesen 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
sasikumar