Ich erstelle eine TableLayout
programmgesteuert. Eine Tabellenzeile kann aus einer Menge + Einheit (Zelle 1) und einem Inhaltsstoff (Zelle 2) und einer Lösch-Schaltfläche (Zelle 3) bestehen. Die Zutaten können länger als die zur Verfügung stehende Breite sein, so habe ich das Gewicht Attribut und setze es auf 1 einen Zeilenumbruch zu aktivieren:Android: Höhe der Tabellenzelle sollte Höhe der vorherigen Zelle
setLayoutParams(new TableRow.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT, 1f));
Dies funktioniert. Das Problem ist, dass die Schaltfläche Löschen verhindert, dass die Tabellenzeile die Höhe zu erhöhen, so dass es teilweise verborgen ist, die wie folgt aussieht:
Dies ist der wichtigste Teil des Codes, der eine Tabellenzeile erzeugt:
final TableRow tableRow = new TableRow(getApplicationContext());
tableRow.setTag(INGREDIENT_ENTRY);
tableRow.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.WRAP_CONTENT));
// Amount and unit
int dp6InPixel = PixelCalculator.convertDpToPixel(getApplicationContext(), 6);
TextView tvAmountAndUnitText = new TextView(getApplicationContext());
tvAmountAndUnitText.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT));
tvAmountAndUnitText.setText(strAmount + " " + strUnit);
tvAmountAndUnitText.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.black));
tvAmountAndUnitText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16f);
tvAmountAndUnitText.setGravity(Gravity.RIGHT);
tvAmountAndUnitText.setTypeface(tvAmountAndUnitText.getTypeface(), Typeface.BOLD);
tvAmountAndUnitText.setPadding(dp6InPixel, 0, dp6InPixel, 0);
tableRow.addView(tvAmountAndUnitText);
// Ingredient
TextView tvIngredientText = new TextView(getApplicationContext());
tvIngredientText.setLayoutParams(new TableRow.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT, 1f));
tvIngredientText.setText(strIngredient);
tvIngredientText.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.black));
tvIngredientText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16f);
tableRow.addView(tvIngredientText);
// Button
int dp10InPixel = PixelCalculator.convertDpToPixel(getApplicationContext(), 10);
TextView tvIngredientDeleteButton = new TextView(getApplicationContext());
LayoutParams buttonParams = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT);
buttonParams.setMargins(dp10InPixel, 0, 0, 0);
tvIngredientDeleteButton.setLayoutParams(buttonParams);
tvIngredientDeleteButton.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.black));
tvIngredientDeleteButton.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.lightred));
tvIngredientDeleteButton.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20f);
tvIngredientDeleteButton.setPadding(dp6InPixel, dp6InPixel, dp6InPixel, dp6InPixel);
tvIngredientDeleteButton.setText("x");
//more code
tableRow.addView(tvIngredientDeleteButton);
ingredientTable.addView(tableRow);
Wenn ich tvIngredientDeleteButton.setMinLines(2);
gesetzt, dann kann ich die volle Zutat Zelle sehen. Leider haben alle Zeilen eine Mindesthöhe von 2, was hässlich aussieht. Ich brauche einen Weg, um zu erkennen, ob die Inhaltsstoffzelle einen Zeilenumbruch hat, und setze minLines
für diesen Fall oder irgendeine andere gute Lösung (aber ich zähle keine Zutatenzeichen oder etwas. Ich denke, das kann mit einigen Tabellenattributen oder Ähnlichem gelöst werden). Irgendwelche Ideen, wie man dieses Problem löst?