Android setContentview (прокрутка) скрывает объекты ConstraintLayout сзади

Я новичок в Android, и я создал ScrollView и внутри него добавил вертикальный линейный макет, который содержит TextViews и средства выбора. Все они были созданы программно. Моя проблема в строке setContentView (прокрутка). Кажется, он охватывает все объекты, которые я создал (не программно) в ConstraintLayout сзади. Но я уже установил высоту моего динамического ScrollView на 800. Как я могу отобразить 4 кнопки сзади ScrollView?

Смотрите скриншоты:

нединамические объекты в макете ограничения

программно созданные объекты в linearlayout внутри прокрутки

Вот код.

        ScrollView scroll = new ScrollView(this);
        
        scroll.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
                800));
        scroll.setFillViewport(true);
      
        setContentView(scroll); //here is the line with issue

        LinearLayout linearLayout = new LinearLayout(this);
        linearLayout.setOrientation(LinearLayout.VERTICAL);
        LayoutParams lp1 = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        linearLayout.setLayoutParams(lp1);

        scroll.addView(linearLayout);
        
        for( int i = 0; i < res2.getCount(); i++ )
        {
            NumberPicker numberPicker = new NumberPicker(this);
            numberPicker.setMinValue(0);
            numberPicker.setMaxValue(100);
            TextView textView = new TextView(this);
            textView.setText(/*textArray[i] + " " +*/ res2.getString(1));
            linearLayout.addView(textView);
            linearLayout.addView(numberPicker);

            res2.moveToNext();
        }

Спасибо заранее за вашу помощь.


person Glenn C    schedule 05.05.2017    source источник


Ответы (1)


Объявите свой LinearLayout в своем xml вместо того, чтобы добавлять его программно. У вас всегда будет линейный вид и прокрутка. Затем заполните Linear желаемым представлением, как вы это делаете внутри цикла for. Таким образом, вы убедитесь, что ваши представления находятся в правильном положении с правильным размером.

person Jonathan Aste    schedule 05.05.2017
comment
Спасибо. Должен ли я также объявлять ScrollView (родитель LinearLayout) в xml, а не создавать его программно? - person Glenn C; 05.05.2017
comment
Большое спасибо. Это сработало :). Так что это лучшая практика. Создавайте макеты с помощью xml для большего контроля, а затем динамически добавляйте содержимое. - person Glenn C; 05.05.2017
comment
Да, вы должны создавать представления программно, только если вы не знаете с самого начала, что вам нужно будет показать. Пожалуйста, отметьте это как правильный ответ, если он вам поможет! :) - person Jonathan Aste; 05.05.2017
comment
Здорово. Большое спасибо, Джонатан. Я уже отметил это как правильный ответ. Извините, я первый раз пишу сюда :D - person Glenn C; 06.05.2017