Problem: Gdy wybieram plik z długim ścieżka lub nazwa, to prowadzi do zaniku sąsiednich kolumn.
Plik XML układu prostu pozycjonuje TableLayout
jako kruszywa w Activity
i kod Java służy do tworzenia tabel i widoków w razie potrzeby.
Co staram się zrobić: użytkownik może kliknąć przycisk "Dodaj", aby wybrać plik na telefonie, który będzie dodany jako ścieżkę i nazwę pliku w TableRow
w ramach TableLayout
. W pierwszej kolumnie znajduje się przycisk ( - ) dla dodatkowego usunąć tylko że dodanej tabeli, a druga kolumna zawiera ścieżkę i nazwę pliku.
Co próbowałem: czuję, że wszystkiego, programowo dostosowując różne LayoutParams
i albo Button
lub TextView
parametr szerokość i wysokość, aby ustawić stałą szerokość... przynajmniej dla przycisku. Ale wygląda na to, nic nie pomaga. Gdy szukam tutaj przykład programowania, to zawsze kod XML układu, a nie Java.
Ja jeszcze studiuję Android, ale utknąłem na tym i pomyślałem, że ktoś może wskazać mi właściwy kierunek. Poniżej znajdują się niektóre obrazki i kod, który tworzy tabele i widoki wewnątrz. Czuję się głupio, że nie mogę tego zrozumieć.
Przed dodaniem
Po dodaniu
Metody kodu wewnątrz одноэлементного klasy, które tworzą Button
i TextView
poglądy na TableRow
i TableLayout
. Pierwsza metoda powoduje dwie inne metody, które tworzą pojęcie tekstu reklamy przycisku
public static TableRow setupFilesTableRow(Context context, TableLayout table, String fileID, String fileName, boolean header) {
TableRow row = new TableRow(context);
if(header) {
row.addView(setupFilesAddRowButton(context, table));
row.addView(addRowTextViewToTable(context, fileName, true));
}else{
row.addView(setupDeleteRowButton(context, table));
for(int r=1; r < 2; r++){
row.addView(addRowTextViewToTable(context, fileName, false));
row.setClickable(true);
}
}
return row;
}
public static Button setupDeleteRowButton(Context context, TableLayout table){
Button btnDelete = new Button(context);
TableRow.LayoutParams trLayoutParams = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.MATCH_PARENT);
trLayoutParams.setMargins(3,3,3,3);
btnDelete.setBackgroundColor(Color.WHITE);
btnDelete.setLayoutParams(trLayoutParams);
btnDelete.setText("-");
btnDelete.setTypeface(Typeface.DEFAULT,Typeface.BOLD);
btnDelete.setGravity(Gravity.CENTER);
btnDelete.setPadding(5,5,5,5);
btnDelete.setOnClickListener(v -> {
deleteTableRows(table);
});
return btnDelete;
}
public static TextView addRowTextViewToTable(Context context, String value, boolean bold){
TextView tv;
tv = new TextView(context);
TableRow.LayoutParams trLayoutParams = new TableRow.LayoutParams();
trLayoutParams.setMargins(3,3,3,3);
tv.setText(String.valueOf(value));
if(bold) tv.setTypeface(null, Typeface.BOLD);
tv.setLayoutParams(trLayoutParams);
tv.setTextSize(12);
tv.setGravity(Gravity.CENTER);
tv.setPadding(8,8,8,8);
tv.setBackgroundColor(Color.WHITE);
return tv;
}