У меня есть вид прокрутки, в котором у меня есть несколько относительных макетов. А относительная компоновка имеет две кнопки, добавляемые к ней динамически. Как ниже
Просмотр прокрутки
_____________________ | ________________ | | |Relative Layout| | | | |Buttons| | | | |_______________| | | | ________________ | | |Relative Layout| | | | |Buttons| | | | |_______________| | | | |Relative Layout| | | | |Buttons| | | | |_______________| | | | ________________ | | |Relative Layout| | | | |Buttons| | | | |_______________| | | | |Relative Layout| | | | |Buttons| | | | | |_____________________|
Можно ли динамически прокручивать до определенной относительной компоновки при нажатии кнопки. Я уже пробовал внизу и не работал
if (count == 1) { final int k = id; mScrollView.getViewTreeObserver().addOnGlobalLayoutListener( new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { // TODO Auto-generated // method stub mScrollView.post(new Runnable() { @Override public void run() { Button btn = (Button) findViewById(k); mScrollView.smoothScrollTo(0,btn.getTop()); } });
Выполнить также не работать
Edit: Первоначально у меня был только набор кнопок в относительной компоновке. Затем smoothScrollTo
работал так, как ожидалось. Позже я изменил структуру на вышеупомянутый стиль.
Подсказка Даниэля Бо была правильной.
view.getTop()
будет давать позицию относительно своего непосредственного родителя.
Ниже приведена реализация.
ScrollView mScrollView = (ScrollView) findViewById(R.id.scroll_view); mScrollView.post(new Runnable() { public void run() { Button btn = (Button) findViewById(k); ViewGroup vg =(ViewGroup)btn.getParent(); mScrollView.smoothScrollTo(0,vg.getTop()); }}); }