Android TextView Justify Text

前端 未结 29 1189
滥情空心
滥情空心 2020-11-22 03:28

How do you get the text of a TextView to be Justified (with text flush on the left- and right- hand sides)?

I found a possible solution here, but it do

29条回答
  •  广开言路
    2020-11-22 04:23

    I write my own class to solve this problem, Here it is Just you have to call the static justify function that takes two arguments

    1. Text View object
    2. Content Width (Total width of your text view)

    //MainActivity

    package com.fawad.textjustification;
    import android.app.Activity;
    import android.database.Cursor;
    import android.graphics.Point;
    import android.graphics.Typeface;
    import android.os.Bundle;
    import android.util.DisplayMetrics;
    import android.view.Display;
    import android.view.Gravity;
    import android.view.Menu;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
        static Point size;
        static float density;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Display display = getWindowManager().getDefaultDisplay();
            size=new Point();
            DisplayMetrics dm=new DisplayMetrics();
            display.getMetrics(dm);
            density=dm.density;
            display.getSize(size);
    
    
            TextView tv=(TextView)findViewById(R.id.textView1);
            Typeface typeface=Typeface.createFromAsset(this.getAssets(), "Roboto-Medium.ttf");
            tv.setTypeface(typeface);
            tv.setLineSpacing(0f, 1.2f);
            tv.setTextSize(10*MainActivity.density);
    
            //some random long text
             String myText=getResources().getString(R.string.my_text);
    
             tv.setText(myText);
            TextJustification.justify(tv,size.x);
    
    
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
    }
    

    //TextJustificationClass

    package com.fawad.textjustification;
    
    import java.util.ArrayList;
    
    import android.graphics.Paint;
    import android.text.TextUtils;
    import android.widget.TextView;
    
    public class TextJustification {
    
        public static void justify(TextView textView,float contentWidth) {
            String text=textView.getText().toString();
            Paint paint=textView.getPaint();
    
            ArrayList lineList=lineBreak(text,paint,contentWidth);
    
            textView.setText(TextUtils.join(" ", lineList).replaceFirst("\\s", ""));
        }
    
    
        private static ArrayList lineBreak(String text,Paint paint,float contentWidth){
            String [] wordArray=text.split("\\s"); 
            ArrayList lineList = new ArrayList();
            String myText="";
    
            for(String word:wordArray){
                if(paint.measureText(myText+" "+word)<=contentWidth)
                    myText=myText+" "+word;
                else{
                    int totalSpacesToInsert=(int)((contentWidth-paint.measureText(myText))/paint.measureText(" "));
                    lineList.add(justifyLine(myText,totalSpacesToInsert));
                    myText=word;
                }
            }
            lineList.add(myText);
            return lineList;
        }
    
        private static String justifyLine(String text,int totalSpacesToInsert){
            String[] wordArray=text.split("\\s");
            String toAppend=" ";
    
            while((totalSpacesToInsert)>=(wordArray.length-1)){
                toAppend=toAppend+" ";
                totalSpacesToInsert=totalSpacesToInsert-(wordArray.length-1);
            }
            int i=0;
            String justifiedText="";
            for(String word:wordArray){
                if(i

    //XML

     
    
    
    
        
    
            
                
            
        
    
    
    

提交回复
热议问题