如何在Flutter中自定义TextField布局的高度和宽度?
答案 0 :(得分:40)
我认为您想更改TextField
的内部填充/边距。
您可以通过添加isDense: true
和contentPadding: 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
),
)
],
),
)
它将显示为:
答案 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)
截屏:
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 动态增加高度。将 maxLines 设置为 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
。