Я наконец-то понял это сам
если виджеты не появляются на экране, они не создаются. таким образом, элементы кнопки, где все еще в нуле, потому что они никогда не визуализируются; и они никогда не отображались, потому что представление прокрутки отталкивало их от экрана.
поэтому на этот раз я атаковал проблему под другим углом, установив представление прокрутки на произвольное небольшое число, чтобы кнопки оставались на экране, получали размер сохраненного макета верхнего уровня, равный «int totalsize», затем я получаю размеры всех элементов, кроме представления с прокруткой, также получили поля для каждого представления и суммировали их все в «int used», затем я установил высоту представления прокрутки как «totalsize-used», и это то, что сработало. обнаружил, что я суммировал поля вручную, что не работает, когда размер экрана изменяется, поля также меняются, поэтому лучше всего их обнаруживать вместе с размерами вида.
в моем методе создания я получил это:
final Button tv = (Button)findViewById(R.id.saveit);
ViewTreeObserver vto = tv.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
public void onGlobalLayout() {
ViewGroup.MarginLayoutParams vlp = (MarginLayoutParams) tv.getLayoutParams();
int btnsize =tv.getMeasuredHeight()+vlp.topMargin;
sizeit(btnsize);
ViewTreeObserver obs = tv.getViewTreeObserver();
obs.removeGlobalOnLayoutListener(this);
}
});
а затем размер его функции
private void sizeit(Integer thebuttons)
{
View v = findViewById(R.id.viewmain);
int total = v.getHeight();
v = findViewById(R.id.view1);
ViewGroup.MarginLayoutParams vlp = (MarginLayoutParams) v.getLayoutParams();
int used=v.getHeight()+vlp.topMargin;
v = findViewById(R.id.view2);
vlp = (MarginLayoutParams) v.getLayoutParams();
used+=v.getHeight()+vlp.topMargin;
v = findViewById(R.id.fonttext);
vlp = (MarginLayoutParams) v.getLayoutParams();
used+=v.getHeight()+vlp.topMargin;
v = findViewById(R.id.infolabel);
vlp = (MarginLayoutParams) v.getLayoutParams();
used+=v.getHeight()+vlp.topMargin;
Integer scrsize=total-used-thebuttons;
v = findViewById(R.id.scrview);
ScrollView scr = (ScrollView)findViewById(R.id.scrview);
ViewGroup.LayoutParams scrlprams = scr.getLayoutParams();
scrlprams.height=scrsize;
scr.setLayoutParams(scrlprams);
}
надеюсь, это поможет кому-то, кто борется с той же проблемой