Problema: Quando eu selecionar um arquivo com um longo caminho ou nome, forças colunas adjacentes a desaparecer.
O esquema xml apenas posiciona o TableLayout
como um marcador de posição de Activity
e o código Java é utilizada para criar a `TableRows e vistas como necessárias.
O que eu estou tentando fazer: Um usuário pode clicar em um botão "Adicionar" para selecionar um arquivo no seu telefone para ser adicionado como um caminho e nome de arquivo para um TableRow
dentro de um TableLayout
. A primeira coluna tem um botão ( - ) para remover, opcionalmente, o recém-adicionado TableRow, e a segunda coluna contém o caminho e nome do arquivo.
O que eu tentei: eu sinto que eu já tentei de tudo programaticamente ajustar várias LayoutParams
e Button
ou TextView
largura e altura parâmetro para definir uma largura fixa... pelo menos para o botão. Mas nada parece funcionar. Quando eu procurar aqui para um exemplo de programação, é sempre o layout de código XML, e não Java.
Eu ainda estou tipo de aprendizagem que o Android, mas eu estou preso a este e pensei que alguém pode ser capaz de me apontar na direção certa. Abaixo estão algumas imagens e o código que cria o TableRows e pontos de vista de dentro. Sinto estúpido que eu não posso entender isso.
Antes de adicionar
Depois de adicionar
Código de métodos dentro de uma classe singleton que criar a Button
e TextView
vistas para o TableRow
e TableLayout
. O primeiro método de chamadas para os outros dois, que cria o Botão de anúncio TextView
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;
}