Android 文本应该填充textview的整行

Android 文本应该填充textview的整行,android,textview,Android,Textview,我刚刚开始安卓,可能这个问题已经开始了。但我找不到要找的东西 就像我有文本视图一样,我必须在其中显示一些大文本,而不是我在UI中看到的 但我要创造的是:- 你可以看到,如果单词很长,不能放在最后,那么它应该分成两行。但是右边的文本对齐应该存在 有人知道我怎样才能做到这一点吗?感谢您的帮助和指点。谢谢:)您正在寻找文本视图中的对齐方式,但尚未实现。但是,您可以在布局文件中尝试以下操作: android:padding=“10dp” android:gravity=“center” 如果这不适合

我刚刚开始安卓,可能这个问题已经开始了。但我找不到要找的东西

就像我有文本视图一样,我必须在其中显示一些大文本,而不是我在UI中看到的

但我要创造的是:-

你可以看到,如果单词很长,不能放在最后,那么它应该分成两行。但是右边的文本对齐应该存在


有人知道我怎样才能做到这一点吗?感谢您的帮助和指点。谢谢:)

您正在寻找文本视图中的对齐方式,但尚未实现。但是,您可以在布局文件中尝试以下操作:

android:padding=“10dp” android:gravity=“center”

如果这不适合您,那么您可以尝试使用而不是textview。在webview中,我可以通过以下代码将其移植到c。此方法不使用
WebView
。由于WebView的实现相当缓慢,我负担不起

下面是完整的文本视图类<代码>这很好用这是

import java.util.ArrayList;
导入android.content.Context;
导入android.graphics.Canvas;
导入android.graphics.Color;
导入android.graphics.Paint;
导入android.graphics.Typeface;
导入android.text.TextPaint;
导入android.view.view;
公共类justizedTextView扩展了视图{
字符串文本;
ArrayList linesCollection=新建ArrayList();
TextPaint TextPaint;
字体;
int文本颜色;
浮动文本大小=42f,线宽=57f,字间距=15f,行距=15f;
浮子在比里姆,w,h;
浮动左填充,右填充;
公共对正文本视图(上下文、字符串文本){
超级(上下文);
this.text=文本;
init();
}
私有void init(){
textPaint=新的textPaint(Paint.ANTI_别名_标志);
textColor=Color.BLACK;
}
@凌驾
测量时的保护空隙(内部宽度测量等级、内部高度测量等级){
超级测量(宽度测量、高度测量);
如果(字体!=null){
font=Typeface.createFromAsset(getContext().getAssets(),“font/Trykker Regular.ttf”);
textPaint.setTypeface(字体);
}
textPaint.setColor(textColor);
int minw=getPaddingLeft()+getPaddingRight()+getSuggestedMinimumWidth();
w=resolveSizeAndState(最小值,宽度测量值,1);
h=测量等级getSize(宽度测量等级);
onBirim=0.009259259f*w;
线宽=文本大小+行距;
leftPadding=3*onBirim+getPaddingLeft();
rightPadding=3*onBirim+getPaddingRight();
textPaint.setTextSize(textSize);
字间距=15f;
lineBuffer=新行();
此.linescolection.clear();
String[]行=text.split(“\n”);
用于(字符串行:行){
String[]words=line.split(“”);
lineBuffer=新行();
浮动线宽=左填充+右填充;
float totalWordWidth=0;
for(字符串字:字){
float ww=textPaint.measureText(字)+字间距;
如果(线宽+ww+(lineBuffer.getWords().size()*字间距)>w){//is
lineBuffer.addWord(word);
totalWordWidth+=textPaint.measureText(word);
lineBuffer.setspace((w-totalWordWidth-leftPadding-righpadding)/(lineBuffer.getWords().size()-1));
this.linescolection.add(lineBuffer);
lineBuffer=新行();
totalWordWidth=0;
线宽=左填充+右填充;
}否则{
lineBuffer.setspace(字间距);
lineBuffer.addWord(word);
totalWordWidth+=textPaint.measureText(word);
线宽+=ww;
}
}
this.linescolection.add(lineBuffer);
}
setMeasuredDimension((int)w,(int)((this.linesCollection.size()+1)*lineHeight+(10*onBirim));
}
@凌驾
受保护的void onDraw(画布){
super.onDraw(帆布);
画布.绘制线(0f,10f,getMeasuredWidth(),10f,textPaint);
浮动x,y=线高+onBirim;
用于(行:行集合){
x=左填充;
for(字符串s:line.getWords()){
画布.drawText(s、x、y、textPaint);
x+=文本绘制。测量文本+行间距;
}
y+=线宽;
}
}
公共字符串getText(){
返回文本;
}
公共void setText(字符串文本){
this.text=文本;
}
公共字体getFont(){
返回字体;
}
公共void setFont(字体字体){
this.font=font;
}
公共浮点数getLineHeight(){
返回线高度;
}
公共空隙设置线高(浮动高度)
 import java.util.ArrayList;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.text.TextPaint;
import android.view.View;

public class JustifiedTextView extends View {
        String text;
        ArrayList<Line> linesCollection = new ArrayList<Line>();
        TextPaint textPaint;
        Typeface font;
        int textColor;
        float textSize = 42f, lineHeight = 57f, wordSpacing = 15f, lineSpacing = 15f;
        float onBirim, w, h;
        float leftPadding, rightPadding;

        public JustifiedTextView(Context context, String text) {
                super(context);
                this.text = text;
                init();
        }

        private void init() {
                textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
                textColor = Color.BLACK;
        }

        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
                super.onMeasure(widthMeasureSpec, heightMeasureSpec);

                if (font != null) {
                        font = Typeface.createFromAsset(getContext().getAssets(), "font/Trykker-Regular.ttf");
                        textPaint.setTypeface(font);
                }
                textPaint.setColor(textColor);

                int minw = getPaddingLeft() + getPaddingRight() + getSuggestedMinimumWidth();
                w = resolveSizeAndState(minw, widthMeasureSpec, 1);
                h = MeasureSpec.getSize(widthMeasureSpec);

                onBirim = 0.009259259f * w;
                lineHeight = textSize + lineSpacing;
                leftPadding = 3 * onBirim + getPaddingLeft();
                rightPadding = 3 * onBirim + getPaddingRight();

                textPaint.setTextSize(textSize);

                wordSpacing = 15f;
                Line lineBuffer = new Line();
                this.linesCollection.clear();
                String[] lines = text.split("\n");
                for (String line : lines) {
                        String[] words = line.split(" ");
                        lineBuffer = new Line();
                        float lineWidth = leftPadding + rightPadding;
                        float totalWordWidth = 0;
                        for (String word : words) {
                                float ww = textPaint.measureText(word) + wordSpacing;
                                if (lineWidth + ww + (lineBuffer.getWords().size() * wordSpacing) > w) {// is
                                        lineBuffer.addWord(word);
                                        totalWordWidth += textPaint.measureText(word);
                                        lineBuffer.setSpacing((w - totalWordWidth - leftPadding - rightPadding) / (lineBuffer.getWords().size() - 1));
                                        this.linesCollection.add(lineBuffer);
                                        lineBuffer = new Line();
                                        totalWordWidth = 0;
                                        lineWidth = leftPadding + rightPadding;
                                } else {
                                        lineBuffer.setSpacing(wordSpacing);
                                        lineBuffer.addWord(word);
                                        totalWordWidth += textPaint.measureText(word);
                                        lineWidth += ww;
                                }
                        }
                        this.linesCollection.add(lineBuffer);
                }
                setMeasuredDimension((int) w, (int) ((this.linesCollection.size() + 1) * lineHeight + (10 * onBirim)));
        }

        @Override
        protected void onDraw(Canvas canvas) {
                super.onDraw(canvas);
                canvas.drawLine(0f, 10f, getMeasuredWidth(), 10f, textPaint);
                float x, y = lineHeight + onBirim;
                for (Line line : linesCollection) {
                        x = leftPadding;
                        for (String s : line.getWords()) {
                                canvas.drawText(s, x, y, textPaint);
                                x += textPaint.measureText(s) + line.spacing;
                        }
                        y += lineHeight;
                }
        }

        public String getText() {
                return text;
        }

        public void setText(String text) {
                this.text = text;
        }

        public Typeface getFont() {
                return font;
        }

        public void setFont(Typeface font) {
                this.font = font;
        }

        public float getLineHeight() {
                return lineHeight;
        }

        public void setLineHeight(float lineHeight) {
                this.lineHeight = lineHeight;
        }

        public float getLeftPadding() {
                return leftPadding;
        }

        public void setLeftPadding(float leftPadding) {
                this.leftPadding = leftPadding;
        }

        public float getRightPadding() {
                return rightPadding;
        }

        public void setRightPadding(float rightPadding) {
                this.rightPadding = rightPadding;
        }

        public void setWordSpacing(float wordSpacing) {
                this.wordSpacing = wordSpacing;
        }

        public float getWordSpacing() {
                return wordSpacing;
        }

        public float getLineSpacing() {
                return lineSpacing;
        }

        public void setLineSpacing(float lineSpacing) {
                this.lineSpacing = lineSpacing;
        }

        class Line {
                ArrayList<String> words = new ArrayList<String>();
                float spacing = 15f;

                public Line() {
                }

                public Line(ArrayList<String> words, float spacing) {
                        this.words = words;
                        this.spacing = spacing;
                }

                public void setSpacing(float spacing) {
                        this.spacing = spacing;
                }

                public float getSpacing() {
                        return spacing;
                }

                public void addWord(String s) {
                        words.add(s);
                }

                public ArrayList<String> getWords() {
                        return words;
                }
        }
}