Добавить несколько строк в LinearLayout в AlertDialog - PullRequest
0 голосов
/ 14 июля 2020

В моем приложении у меня есть кнопка, которая при нажатии отображает AlertDialog с вопросом о добавлении записи с двумя NumberPickers, один для минут, а другой для секунд. Я хотел бы отобразить TextView с «Min» над минутами и с «Se c» над секундами. Файл Java выглядит следующим образом:

//create linearlayout for display on the alertdialog
LinearLayout parent = new LinearLayout(this);
parent.setOrientation(LinearLayout.HORIZONTAL);

//create upper and lower LinearLayout
LinearLayout upper = new LinearLayout(this);
LinearLayout lower = new LinearLayout(this);
upper.setOrientation(LinearLayout.HORIZONTAL);
lower.setOrientation(LinearLayout.HORIZONTAL);

//create parameters for the lower and upper linearLayouts
LinearLayout.LayoutParams upParams = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.MATCH_PARENT,
        LinearLayout.LayoutParams.MATCH_PARENT);
LinearLayout.LayoutParams downParams = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.MATCH_PARENT,
        LinearLayout.LayoutParams.MATCH_PARENT);

//Create numberPicker and TextView for the Seconds
final NumberPicker secondsPicker = new NumberPicker(this);
secondsPicker.setMinValue(MIN_SECOND_INPUT);
secondsPicker.setMaxValue(MAX_SECOND_INPUT);

final TextView secondsText = new TextView(this);
secondsText.setText(R.string.Seconds);

//Create numberpicker and TextView for the minutes
final NumberPicker minutesPicker = new NumberPicker(this);
minutesPicker.setMinValue(MIN_MINUTE_INPUT);
minutesPicker.setMaxValue(MAX_MINUTE_INPUT);
final TextView minutesText = new TextView(this);
minutesText.setText(R.string.Minutes);

//create parameters for the LinearLayout
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.MATCH_PARENT,
        LinearLayout.LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.CENTER;

//create parameters for the TextView for seconds
LinearLayout.LayoutParams paramsTextSec = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.MATCH_PARENT,
        LinearLayout.LayoutParams.WRAP_CONTENT);
paramsTextSec.weight = 1;

//create parameters for the TextView for minutes
LinearLayout.LayoutParams paramsTextMin = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.MATCH_PARENT,
        LinearLayout.LayoutParams.WRAP_CONTENT);
paramsTextMin.weight = 1;

//create parameters for the numberpicker for the seconds
LinearLayout.LayoutParams paramsSeconds = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.MATCH_PARENT,
        LinearLayout.LayoutParams.WRAP_CONTENT);
paramsSeconds.weight = 1;

//create parameters for the numberpicker for the Minutes
LinearLayout.LayoutParams paramsMinutes = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.MATCH_PARENT,
        LinearLayout.LayoutParams.WRAP_CONTENT);
paramsMinutes.weight = 1;


//add parameters to linear layout
parent.setLayoutParams(params);
upper.setLayoutParams(upParams);
lower.setLayoutParams(downParams);
upper.addView(secondsPicker, paramsSeconds);
upper.addView(secondsText, paramsTextSec);
lower.addView(minutesPicker, paramsMinutes);
lower.addView(minutesText, paramsTextMin);
parent.addView(upper);
parent.addView(lower);

//create alertdialog with the linear layout with numberpickers
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Add an extra slot:");
builder.setView(parent);
builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() {
    public void onClick(DialogInterface dialogInterface, int i) {
        int seconds = secondsPicker.getValue() + minutesPicker.getValue() * 60;
        addValueToScheme(seconds);
   }
});
AlertDialog dialog = builder.create();
dialog.show();

AlertDialog дает результат, в котором секунды отображаются рядом с NumberPicker, а NumberPickers отображаются друг под другом.

AlertDialog не подходит

Как я могу добавить NumberPickers рядом друг с другом с текстом над ними?

1 Ответ

0 голосов
/ 14 июля 2020

в первую очередь: пожалуйста, переместите этот Java код на XML, так было бы намного легче читать, проектировать и разрабатывать ...

добавить weight=1 для upParams и downParams

LinearLayout.LayoutParams upParams = new LinearLayout.LayoutParams(
    0, LinearLayout.LayoutParams.MATCH_PARENT);
upParams.weight = 1;
LinearLayout.LayoutParams downParams = new LinearLayout.LayoutParams(
    0, LinearLayout.LayoutParams.MATCH_PARENT);
downParams.weight = 1;

это приведет к тому, что LinearLayout upper будет слева, а LinearLayout lower справа (благодаря parent ориентации HORIZONTAL), поэтому измените их имена ... затем установите их ориентацию для VERTICAL

upper.setOrientation(LinearLayout.VERTICAL);
lower.setOrientation(LinearLayout.VERTICAL);

, и теперь у вас есть два вертикальных контейнера, левый и правый, с одинаковой шириной, и вы можете добавить к обоим некоторым элементам, например, сначала TextView, после этого NumberPicker, обе шириной MATCH_PARENT выполнить (половина ширины Dialog)

...