Android编程实现每行5个EditText方框布局及输入值获取
Android 多行带方框EditText布局实现求助
需求:实现多个带方框样式的EditText,要求每行显示5个,最多支持15个,同时能将用户输入内容提取为String数组。目前代码实现后未达到预期效果,寻求帮助。
现有代码
EditText[] et = new EditText[count]; LinearLayout linearLayout = new LinearLayout(this); linearLayout.setLayoutParams(new LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); linearLayout.setOrientation(LinearLayout.HORIZONTAL); LinearLayout layout = (LinearLayout) findViewById(R.id.dynamicsletters); for (int i = 0; i < count; i++) { et[i] = new EditText(this); et[i].setLayoutParams(new LinearLayout.LayoutParams( 0, ViewGroup.LayoutParams.WRAP_CONTENT, 1.0f )); //et[i].setPadding(10,0,0,0); et[i].setGravity(Gravity.CENTER_VERTICAL); et[i].setHint("Pos"+(i+1)); //et[i].setWidth(40);//.layout(100,0,0,0); et[i].setBackgroundResource(R.drawable.rectangleborder); linearLayout.addView(et[i]); } layout.addView(linearLayout);
当前效果

预期效果

解决方案
1. 修复布局逻辑(实现每行5个)
你现在的问题是把所有EditText都塞进了同一个横向LinearLayout,导致全部挤在一行。需要在循环里判断,每添加5个就新建一行横向布局,再把这行布局加到父容器里。
修改后的代码示例:
int count = 15; // 最多15个,可按需调整 EditText[] et = new EditText[count]; LinearLayout parentLayout = findViewById(R.id.dynamicsletters); parentLayout.setOrientation(LinearLayout.VERTICAL); // 确保父布局是垂直方向 for (int i = 0; i < count; i++) { // 每5个EditText新建一行横向布局 if (i % 5 == 0) { LinearLayout rowLayout = new LinearLayout(this); rowLayout.setLayoutParams(new LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); rowLayout.setOrientation(LinearLayout.HORIZONTAL); rowLayout.setPadding(0, 10, 0, 10); // 可选:增加行间距,让布局更舒展 parentLayout.addView(rowLayout); } et[i] = new EditText(this); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( 0, ViewGroup.LayoutParams.WRAP_CONTENT, 1.0f); params.setMargins(5, 0, 5, 0); // 可选:增加EditText之间的间距 et[i].setLayoutParams(params); et[i].setGravity(Gravity.CENTER); // 改为居中对齐,更贴合预期效果 et[i].setHint("Pos" + (i+1)); et[i].setBackgroundResource(R.drawable.rectangleborder); // 限制每个EditText只能输入1个字符,适配方框样式 et[i].setFilters(new InputFilter[]{new InputFilter.LengthFilter(1)}); // 获取当前行的布局,把EditText加进去 LinearLayout currentRow = (LinearLayout) parentLayout.getChildAt(parentLayout.getChildCount() - 1); currentRow.addView(et[i]); }
2. 提取输入内容到String数组
写个简单方法就能批量获取所有EditText的输入值:
private String[] getEditTextValues(EditText[] editTexts) { String[] values = new String[editTexts.length]; for (int i = 0; i < editTexts.length; i++) { values[i] = editTexts[i].getText().toString().trim(); } return values; }
使用示例:
// 需要获取输入时调用 String[] inputValues = getEditTextValues(et);
额外提示
- 确保XML里的
R.id.dynamicsletters是垂直方向的LinearLayout,否则行布局会乱排。 - 可以通过
setMargins和setPadding调整间距,让布局更美观。 - 加
InputFilter.LengthFilter(1)限制输入长度,更符合方框输入的场景。
内容的提问来源于stack exchange,提问作者SNAD
相关产品推荐
相关产品推荐

