2017-10-23 1 views
-1

Ich weiß, dass diese Frage viele Male auf SO gestellt wurde. Ich habe die meisten von ihnen gelesen, aber sie funktionieren nicht für mich, also nicht die Mühe, Duplikate zu markieren.Wie zentriert man Text in einem TextView mit Java-Code?

Hier ist mein Code, und dem, was ich bisher versucht:

RelativeLayout container = new RelativeLayout(this.getContext()); 

TextView tv = new TextView(this.getContext()); 
tv.setText(txt); // a single digit like '3' 
tv.setLines(1); 
tv.layout(0, offsety, cellszie, offsety+cellsize); 

tv.setTextAlignment(TextView.TEXT_ALIGNMENT_CENTER); 
tv.setGravity(Gravity.CENTER); 

// I also tried CENTER_VERTIAL and the following line 
// tv.setGravity(CENTER_VERTIAL| CENTER_HORIZONTAL); 

// I also tried giving LayoutParams to tv like this: 
// tv.setLayoutParams(new LayoutParams(cellsize, cellsize)); 
// tv.setLayoutParams(new LayoutParams(WRAP_CONTENT, WRAP_CONTENT)); 
// tv.setLayoutParams(new LayoutParams(MATCH_PARENT, MATCH_PARENT)); 

container.addView(tv); 

Der Charakter horizontal zentriert ist, aber es schwimmt auf dem oberen Rand des Textview in vertikaler Richtung. Einstellung gravity und LayoutParams ändert sein Verhalten nicht.

Was muss ich tun, damit es vertikal zentriert wird?

+0

versuchen Sie es http://code2care.org/pages/center-align-textview-android-horizontontal-or- vertically/ –

+1

Haben Sie versucht, seine Breite und Höhe als wrap_content zu machen? –

+0

Layout-Parameter einstellen und die Höhe so einstellen, dass sie dem Elternteil entspricht. Dann funktioniert center_vertical –

Antwort

1

Verwenden Sie diese Klasse für VerticalTextView.

public class VerticalTextView extends TextView { 
final boolean topDown; 

public VerticalTextView(Context context, AttributeSet attrs){ 
    super(context, attrs); 
    final int gravity = getGravity(); 
    if(Gravity.isVertical(gravity) && (gravity&Gravity.VERTICAL_GRAVITY_MASK) == Gravity.BOTTOM) { 
     setGravity((gravity&Gravity.HORIZONTAL_GRAVITY_MASK) | Gravity.TOP); 
     topDown = false; 
    }else 
     topDown = true; 
} 

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){ 
    super.onMeasure(heightMeasureSpec, widthMeasureSpec); 
    setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth()); 
} 

@Override 
protected void onDraw(Canvas canvas){ 
    TextPaint textPaint = getPaint(); 
    textPaint.setColor(getCurrentTextColor()); 
    textPaint.drawableState = getDrawableState(); 

    canvas.save(); 

    if(topDown){ 
     canvas.translate(getWidth(), 0); 
     canvas.rotate(90); 
    }else { 
     canvas.translate(0, getHeight()); 
     canvas.rotate(-90); 
    } 
    canvas.translate(getCompoundPaddingLeft(), getExtendedPaddingTop()); 

    getLayout().draw(canvas); 
    canvas.restore(); 
} 
} 
1

Sie können es tun, wie diese

RelativeLayout container = new RelativeLayout(this.getContext()); 
View view = layoutInflater.inflate(R.layout.my_layout_file, null); 
container.addView(view); 

wo R.layout.my_layout_file Textview mit Schwerpunkt enthält. und hier kann man Objekt von Textview erhalten wie dieses

textviewObject = (TextView)view.findViewById(R.id.textViewId) 
1

Versuchen Sie, RelativeLayout.LayoutParams Sie RelativeLayout

RelativeLayout.LayoutParams relativeLayoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); 
container.setLayoutParams(relativeLayoutParams) 

dann die Schwerkraft für Textview gesetzt:

tv.setGravity(Gravity.CENTER); 

Dann Fügen Sie die Ansicht Ihrem RelativeLayout hinzu:

container.addView(tv); 
Verwandte Themen