如何更新颤振TextField的高度和宽度?

时间:2018-05-17 21:08:37

标签: flutter flutter-layout

如何在Flutter中自定义TextField布局的高度和宽度?

14 个答案:

答案 0 :(得分:40)

我认为您想更改TextField内部填充/边距

您可以通过添加isDense: truecontentPadding: EdgeInsets.all(8)属性,如下所示:

Container(
  padding: EdgeInsets.all(12),
  child: Column(
    children: <Widget>[
      TextField(
        decoration: InputDecoration(
          border: OutlineInputBorder(),
          labelText: 'Default TextField',
        ),
      ),
      SizedBox(height: 16,),
      TextField(
        decoration: InputDecoration(
          border: OutlineInputBorder(),
          labelText: 'Densed TextField',
          isDense: true,                      // Added this
        ),
      ),
      SizedBox(height: 16,),
      TextField(
        decoration: InputDecoration(
          border: OutlineInputBorder(),
          labelText: 'Even Densed TextFiled',
          isDense: true,                      // Added this
          contentPadding: EdgeInsets.all(8),  // Added this
        ),
      )
    ],
  ),
)

它将显示为:

How to update flutter TextField's height and width / Inner Padding?

答案 1 :(得分:18)

要调整宽度,您可以使用TextField窗口小部件包裹Container,如下所示:

new Container(              
  width: 100.0,
  child: new TextField()
)

在确定TextField的高度时,我不确定你所追求的是什么,但你绝对可以看一下TextStyle小部件。可以操纵fontSize和/或height

new Container(              
  width: 100.0,
  child: new TextField(                                 
    style: new TextStyle(
      fontSize: 40.0,
      height: 2.0,
      color: Colors.black                  
    )
  )
)

请记住,height中的TextStyle是字体大小的乘数,根据对房产本身的评论:

  

此文本范围的高度,为字体大小的倍数。

     

如果应用于根[TextSpan],则此值设置行高,   这是后续文本基线之间的最小距离,如   多个字体大小。

最后但并非最不重要的一点,您可能需要查看decoration的{​​{1}}属性,它为您提供了很多可能性

编辑: 如何更改TextField

的内部填充/边距

您可以使用TextField的{​​{1}}和InputDecoration属性。例如,你可以这样做:

decoration

答案 2 :(得分:17)

截屏:

enter image description here


Widget _buildTextField() {
  final maxLines = 5;

  return Container(
    margin: EdgeInsets.all(12),
    height: maxLines * 24.0,
    child: TextField(
      maxLines: maxLines,
      decoration: InputDecoration(
        hintText: "Enter a message",
        fillColor: Colors.grey[300],
        filled: true,
      ),
    ),
  );
}

答案 3 :(得分:4)

此答案有效,但当输入字段处于错误状态时会发生冲突,为了更好的方法和更好的控制,您可以使用它。

InputDecoration(
    isCollapsed: true,
    contentPadding: EdgeInsets.all(9),
)

答案 4 :(得分:2)

如果您想在输入文本时TextFormField 动态增加高度。将 ma​​xLines 设置为 null。喜欢

TextFormField(
          onSaved: (newText) {
            enteredTextEmail = newText;
          },

          obscureText: false,
          keyboardType: TextInputType.emailAddress,
          validator: validateName,
          maxLines: null,
          // style: style,
          decoration: InputDecoration(
              contentPadding: EdgeInsets.fromLTRB(5.0, 10.0, 5.0, 10.0),
              hintText: "Enter Question",
              labelText: "Enter Question",
              border: OutlineInputBorder(
                  borderRadius: BorderRadius.circular(10.0))),
        ),

答案 5 :(得分:1)

TextField(minLines:1,maxLines:5,maxLengthEnforced:true)

答案 6 :(得分:1)

如果使用“ suffixIcon”折叠TextField的高度,请添加: suffixIconConstraints

TextField(
                    style: TextStyle(fontSize: r * 1.8, color: Colors.black87),
                    decoration: InputDecoration(
                      isDense: true,
                      contentPadding: EdgeInsets.symmetric(vertical: r * 1.6, horizontal: r * 1.6),
                      suffixIcon: Icon(Icons.search, color: Colors.black54),
                      suffixIconConstraints: BoxConstraints(minWidth: 32, minHeight: 32),
                    ),
                  )

答案 7 :(得分:0)

您可以尝试在Container中使用margin属性。将文本字段包装在容器中,并调整margin属性。

                      new Container(
                      margin: const EdgeInsets.only(right: 10, left: 10),
                      child: new TextField(

                        decoration: new InputDecoration(
                            hintText: 'username',
                            icon: new Icon(Icons.person)),
                      )),

答案 8 :(得分:0)

要增加TextField小部件的高度,只需使用小部件随附的maxLines:属性。例如: 文本域( maxLines:5 )//将增加文本字段的高度和宽度。

答案 9 :(得分:0)

使用 contentPadding,它会降低文本框或下拉列表的高度

InputDecorator(
                  decoration: InputDecoration(
                      errorStyle: TextStyle(
                          color: Colors.redAccent, fontSize: 16.0),
                      hintText: 'Please select expense',
                      border: OutlineInputBorder(
                        borderRadius: BorderRadius.circular(1.0),
                      ),
                      contentPadding: EdgeInsets.all(8)),//Add this edge option
                  child: DropdownButton(
                    isExpanded: true,
                    isDense: true,
                    itemHeight: 50.0,

                    hint: Text(
                        'Please choose a location'), // Not necessary for Option 1
                    value: _selectedLocation,
                    onChanged: (newValue) {
                      setState(() {
                        _selectedLocation = newValue;
                      });
                    },
                    items: citys.map((location) {
                      return DropdownMenuItem(
                        child: new Text(location.name),
                        value: location.id,
                      );
                    }).toList(),
                  ),
                ),

答案 10 :(得分:0)

int numLines = 0;

Container(
     height: numLines < 7 ? 148 * WidgetsConstant.height: numLines * WidgetsConstant.height * 24,
     child: TextFormField(
              controller: _bodyText,
              maxLines: numLines < 7 ? 148 : numLines,
              keyboardType: TextInputType.multiline,
              textInputAction: TextInputAction.newline,        
              onChanged: (String value) {
                setState(() {
                  numLines = '\n'.allMatches(value).length + 1;
                });
              },
          ),
     ),

答案 11 :(得分:0)

将 TextField 包裹在 SizedBox 中以获得宽度

答案 12 :(得分:-1)

您只需将“文本”字段小部件包装在填充小部件中即可。 像这样

Padding(
         padding: EdgeInsets.only(left: 5.0, right: 5.0),
          child: TextField(
            cursorColor: Colors.blue,

            decoration: InputDecoration(
                labelText: 'Email',
                hintText: 'xyz@gmail.com',
                //labelStyle: textStyle,
              border: OutlineInputBorder(
                  borderRadius: BorderRadius.circular(5),
                  borderSide: BorderSide(width: 2, color: Colors.blue,)),
              focusedBorder: OutlineInputBorder(
                  borderRadius: BorderRadius.circular(10),
                  borderSide: BorderSide(width: 2, color: Colors.green)),
                )

            ),
          ),

答案 13 :(得分:-1)

要减小其大小,请将 isDense 属性设置为 true