Як центрувати текст вертикально та горизонтально у Flutter?


117

Я хотів би знати, як центрувати вміст текстового віджета вертикально та горизонтально у Flutter. Я знаю лише, як відцентрувати сам віджет, використовуючи, Center(child: Text("test"))але не сам вміст. За замовчуванням він вирівняний ліворуч. В Android я вважаю, що властивість TextView, яке досягає цього, називається gravity.

Приклад того, що я хочу:

приклад із відцентрованим текстом

Відповіді:


266

Властивість центру вирівнювання тексту встановлює лише горизонтальне вирівнювання.

введіть тут опис зображення

Я використав код нижче, щоб встановити текст по вертикалі та по горизонталі по центру.

введіть тут опис зображення

Код:

      child: Center(
        child: Text(
          "Hello World",
          textAlign: TextAlign.center,
        ),
      ),

1
@Shelly У деяких випадках це не спрацює, вам потрібно додати властивість heightFactor: також, наприклад: Center (heightFactor: 2.3, child: Text ('SELFIE', textAlign: TextAlign.center, style: TextStyle (fontSize: 18.0, color: Colors.black, fontWeight: FontWeight.bold,)),),
Санджєєв Санграль

Я подивився і погоджуюсь. Змінили це на правильну відповідь, оскільки воно центрується по горизонталі та вертикалі.
jeroen-meijer

85

Ви можете використовувати TextAlignвластивість Textконструктора.

Text("text", textAlign: TextAlign.center,)

36
Я не впевнений, чому це було позначено як відповідь, оскільки це лише центрує текст горизонтально, але питання задає горизонтально та вертикально.
Herohtar

3
Так, це слід видалити, це не відповідає на питання.
Hasen

51

Я думаю, що більш гнучкий варіант буде обернути Text()з Align()приблизно так:

Align(
  alignment: Alignment.center, // Align however you like (i.e .centerRight, centerLeft)
  child: Text("My Text"),
),

Center()Здається, використання TextAlignповністю ігнорує віджет Text. Він не буде вирівнюватися, TextAlign.leftабо TextAlign.rightякщо ви спробуєте, він залишиться в центрі.


1
Набагато краща відповідь - це одна.
Nikola Jovic

це має бути позначена відповідь, оскільки питання полягає в тому, як відцентрувати текст по горизонталі та вертикалі. Дякую!
Алі Гюреллі,

Це відповідь хлопці, просто цікаво, чому мій текст не вирівнюється з більшим розміром шрифту, виявляється, що в центрі це дивно з текстом, і є точка зупинки, в якій буде ігноруватися розмір тексту. Схоже, у Align немає цієї проблеми ... love u <3
ValdaXD

8
                       child: Align(
                          alignment: Alignment.center,
                          child: Text(
                            'Text here',
                            textAlign: TextAlign.center,                          
                          ),
                        ),

Це дало найкращий результат для мене.


3

Елемент тексту всередині Центру SizedBox працює набагато краще, нижче коду зразка

Widget build(BuildContext context) {
    return RawMaterialButton(
      fillColor: Colors.green,
      splashColor: Colors.greenAccent,
      shape: new CircleBorder(),
      child: Padding(
        padding: EdgeInsets.all(10.0),
        child: Row(
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            SizedBox(
              width: 100.0,
              height: 100.0,
              child: Center(
                child: Text(
                widget.buttonText,
                maxLines: 1,
                style: TextStyle(color: Colors.white)
              ),
              )
          )]
        ),
    ),
  onPressed: widget.onPressed
);
}

Насолоджуйтесь кодуванням 👨‍💻


2

Розмістіть текст у центрі:

Container(
      height: 45,
      color: Colors.black,
      child: Center(
        child: Text(
            'test',
            style: TextStyle(color: Colors.white),
        ),
      ),
    );

2

Якщо ви користувач Intellij IDE, ви можете скористатися комбінацією клавіш, Alt+Enterа потім вибрати, Wrap with Centerа потім додатиtextAlign: TextAlign.center


0

Огляд: Я використовував віджет Flex для центрування тексту на моїй сторінці за допомогою MainAxisAlignment.center вздовж горизонтальної осі. Я використовую заповнення контейнера, щоб створити простір полів навколо мого тексту.

  Flex(
            direction: Axis.horizontal,
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
                Container(
                    padding: EdgeInsets.all(20),
                    child:
                        Text("No Records found", style: NoRecordFoundStyle))
  ])

0

можливо, ви хочете надати однакову ширину та висоту для 2 контейнерів

Container(
            width: size.width * 0.30, height: size.height * 0.4,
            alignment: Alignment.center,
            decoration: BoxDecoration(
              borderRadius: BorderRadius.circular(6)
            ),
            child: Center(
              child: Text(categoryName, textAlign: TextAlign.center, style: TextStyle(
                fontWeight: FontWeight.bold,
                fontSize: 17,
                color: Colors.white,
              ),),
            ),
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.