Я пытаюсь показать несколько полей EditText, как n * n Matrix. Я создаю это поле EditText динамически.
Проблема в том, что все мои поля EditText печатаются в одной строке по горизонтали. Я хотел знать, есть ли что-нибудь вроде "System.out.println ();" в Android Studio!
Примечание: я хочу, чтобы этот разрыв строки находился между представлениями, а не между текстом, поэтому \ n здесь не работает!
Это мой файл activity_main.xml,
<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:tools = "http://schemas.android.com/tools"
android:id = "@+id/mainLayout"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:orientation = "vertical"
android:layout_gravity = "center"
tools:context = ".MainActivity">
<EditText
android:id = "@+id/a"
android:layout_width = "80dp"
android:layout_height = "wrap_content"
android:layout_gravity = "center"
android:layout_marginBottom = "5dp"
android:gravity = "center"
android:inputType = "number" />
<Button
android:id = "@+id/btn"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_gravity = "center"
android:background = "@android:color/holo_purple"
android:text = "Click"
android:textColor = "@android:color/white" />
<LinearLayout
android:id = "@+id/child_layout"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_gravity = "center"
android:orientation = "horizontal">
<!--EditText Fields going to be here!-->
</LinearLayout>
</LinearLayout>
И вот мой файл MainActivity.java
package com.ridi.magicfield;
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TableLayout;
import android.widget.TableRow;
public class MainActivity extends AppCompatActivity {
private static int a;
private static EditText magicField, ainput;
private static Button btn;
private static LinearLayout child_layout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
child_layout = (LinearLayout) findViewById(R.id.child_layout);
ainput = (EditText) findViewById(R.id.a);
btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
a = Integer.parseInt(ainput.getText().toString());
child_layout.removeAllViews();
createMatrixInputField();
}
});
}
private void createMatrixInputField() {
int p = 1;
for (int t = 1; t <= a; t++) {
for (int i = 1; i <= a; i++) {
magicField = new EditText(MainActivity.this);
magicField.setId((p));
magicField.setHint("et-" + (Integer.toString(p)));
magicField.setGravity(Gravity.CENTER);
child_layout.addView(magicField);
p++;
}
}
}
}
Вот мой экран вывода. Я хочу, чтобы et-3 и et-4 перешли на следующую строку. Есть ли кто-нибудь, кто может помочь, пожалуйста ... Изображение экрана вывода
Используйте маржу для просмотров.
вам необходимо динамически создавать линейные макеты (горизонтальные) и добавлять эти макеты в родительский линейный макет (вертикальный). когда вы создаете editext, а затем добавляете ваши editexts в этот линейный макет
Этот линейный макет уже горизонтальный, и я пробовал использовать родительский макет с вертикальной ориентацией, но все равно не смог заставить его работать. Может ли кто-нибудь дать мне демонстрационный код того, что вы, ребята, пытаетесь указать ..
Что ж, создание горизонтального макета ДИНАМИЧЕСКИ решило мою проблему ... Спасибо всем вам ...
Используйте TableLayout вместо LinearLayout для шаблона матрицы n * n
for (int i = 0; i < noOfRows; i++) {
TableRow row= new TableRow(this);
TableRow.LayoutParams lp = new
TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT
,TableRow.LayoutParams.WRAP_CONTENT);
row.setLayoutParams(lp);
for(int j = 0; j < noOfColumns; j++) {
EditText et = new EditText(this);
//Extra properties goes here...
et.setText("Your text");
row.addView(et,j);
}
tableLayout.addView(row,i);
}
Проблема была решена за счет динамического создания горизонтального линейного макета! Но теперь возникла другая проблема. Раньше я мог установить уникальный идентификатор и подсказку для своих полей EditText. Но теперь он обновляется только один раз. Так что я также попробую использовать трюк Tablelayout ... Спасибо за предложения ...
Он отлично подходит для установки уникального идентификатора и подсказки. Еще раз спасибо :) @itsmysterybox
Связанные stackoverflow.com/questions/47648322/alignment-of-dynamic-vi ews