我正在Android智能電視上開發應用程序,它只能使用遙控器導航焦點位置(就像在普通Android設備中使用d-pad鍵一樣)。如何在Android TV中使用鍵盤滾動到頂部GridView
我用GridView
來顯示圖像。問題是滾動到底時,它不能再滾動!我知道這種現象絕不會發生在觸摸模式設備中,但對於Android TV來說,這真的很常見。
實際上,我在使用ListView
時遇到了同樣的問題,我通過手動滾動到上一行來解決此問題。覆蓋AbsListView.OnScrollListener
:
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
int totalItemCount) {
try {
if (firstVisibleItem > 0
&& view.getChildAt(0).isSelected()
|| view.getChildAt(0).hasFocus()) {
view.smoothScrollToPosition(firstVisibleItem - 1);
Log.d(TAG, "scroll up");
} else if ((firstVisibleItem + visibleItemCount) < totalItemCount
&& view.getChildAt(visibleItemCount-1).hasFocus()
|| view.getChildAt(visibleItemCount-1).isSelected()) {
view.smoothScrollToPosition(firstVisibleItem + visibleItemCount + 1);
Log.d(TAG, "scroll down");
}
} catch (Exception e) {
//Log.e(TAG, e.getMessage(),e);
}
}
如你所知,有ListView
和GridView
之間有很大的區別,那就是GridView
具有多功能使用列項。所以,當專注於第一行(而不是第一行適配器數據)時,關注的項目不總是firstVisibleItem
,並且上面的代碼不再工作。
編輯:ListView
和GridView
無法向上滾動的原因是所有可見項的安裝高度完全等於其父母的高度。當按下D-UP鍵時,焦點移動到GridView
以上的小部件而不是上部項目。
我嘗試這樣做:
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (firstVisibleItem > 0 && isFocusOnFirstRow()) {
view.smoothScrollToPosition(firstVisibleItem - 1);
Log.d(TAG, "scroll up");
}
}
private boolean isFocusOnFirstRow() {
try {
for (int i = 0; i < mGridView.getNumColumns(); i++) {
if (mGridView.getChildAt(i).hasFocus()) {
return true;
}
}
} catch (Exception e) {
// ArrayIndexOutofBoundsException
Log.e(TAG, e.getMessage());
}
return false;
}
但不工作。有人可以提供一些建議嗎?
在此先感謝!
iStar是否解決了這個問題?我不確定我的問題是否與您的問題類似 - http://stackoverflow.com/questions/29870223/keyboard-navigation-with-android-gridview-doesnt-scroll-grid – ataulm