我有一个带有很多按钮的ScrollView。当用户解锁该按钮/级别时,每个按钮都会启用。我想将ScrollView集中在最新的解锁按钮/关卡上。请参见下面的截图。
我发现像scrollTo()
这样的函数可以将ScrollView集中在顶部,按钮或类似的东西但是我想将ScrollView集中在某些地方,例如Level 8
所示的按钮ID下面的截图。我该怎么做呢?
答案 0 :(得分:2)
我认为这应该足够好了:
yourButtonView.getParent().requestChildFocus(yourButtonView,yourButtonView);
public void RequestChildFocus(View child,View focused)
child - 此ViewParent的子项需要焦点。该视图将包含焦点视图。实际上并不一定是关注焦点。
专注 - 作为实际拥有焦点的儿童后代的视图
答案 1 :(得分:1)
首先,您需要知道滚动中的项目位置,一旦您知道可以使用以下代码使该项目成为焦点,就必须获得焦点
final int x;
final int y;
x = rowview[pos].getLeft();
y = rowView[pos].getTop();
yourScrollView.scrollTo(x, y);
答案 2 :(得分:1)
我同意以前答案的好处。但是,根据经验,我发现这比这更复杂。 setSelectionFromTop非常敏感,如果执行得太早,通常会中断。这可能取决于不同的原因,但主要原因有两个:
虽然推理似乎适用于setSelectionFromTop和setSelection()方法 我主要用setSelectionFromTop测试。 smoothScrollToPosition()似乎更健壮,可能是因为它根据定义更改了平滑滚动时延迟的列表位置。
请看这个示例源代码:
// Wee need to pospone the list move until all other view setup activities are finished
list.post(new Runnable(){
@override
public void run() {
list.setSelectionFromTop(selectedPosition, Math.max(0, Math.round(list.getHeight() / 3))); // Make sure selection is in middle of page, if possible.
// Make sure you do not modify (this or other) parts of the view afterwards - it may break the list move
// activityButtons.setVisibility(View.GONE);
}});
答案 3 :(得分:0)
见:http://developer.android.com/reference/android/widget/ListView.html#setSelectionFromTop(int,int)
Level
级别中。示例:
ListView lv = (ListView)findViewById(android.R.id.list);
int i = 0;
for (Level l : values) {
i++;
if (l.level == selectedLevel) {
lv.setSelectionFromTop(i, 200);
break;
}
}
答案 4 :(得分:0)
试试这个
sc.post(new Runnable() {
public void run() {
sc.smoothScrollTo(x, y);
}
});
x在X轴上滚动的位置
y在Y轴上滚动的位置
答案 5 :(得分:0)
使用此代码,取自this answer
Traceback (most recent call last):
File "<FOLDERSYSTEM>/main.py", line 36, in <module>
newpassword = hashlib.sha224(newpassword).hexdigest()
TypeError: Unicode-objects must be encoded before hashing
答案 6 :(得分:0)
使用此代码,摘自my another answer
scrollViewSignup.post(new Runnable() {
@Override
public void run() {
int scrollY = scrollViewSignup.getScrollY();
scrollViewSignup.scrollTo(0, 0);
final Rect rect = new Rect(0, 0, view.getWidth(), view.getHeight());
view.requestRectangleOnScreen(rect, true);
int new_scrollY = scrollViewSignup.getScrollY();
scrollViewSignup.scrollTo(0, scrollY);
scrollViewSignup.smoothScrollTo(0, new_scrollY);
}
});
此代码尝试平滑滚动,并使用系统的标准行为来定位项目。如果您不希望系统平滑滚动到该项,则可以简单地用scrollTo更改 smoothScrollTo 。或者,您只能使用下面的代码。
scrollViewSignup.post(new Runnable() {
@Override
public void run() {
scrollViewSignup.scrollTo(0, 0);
final Rect rect = new Rect(0, 0, view.getWidth(), view.getHeight());
view.requestRectangleOnScreen(rect, true);
}
});
尝试后或根据需要使用所需的代码块。