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