2013-07-13 41 views
4

我正在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); 
    } 
} 

如你所知,有ListViewGridView之間有很大的區別,那就是GridView具有多功能使用列項。所以,當專注於第一行(而不是第一行適配器數據)時,關注的項目不總是firstVisibleItem,並且上面的代碼不再工作。

編輯:ListViewGridView無法向上滾動的原因是所有可見項的安裝高度完全等於其父母的高度。當按下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; 
} 

但不工作。有人可以提供一些建議嗎?

在此先感謝!

+0

iStar是否解決了這個問題?我不確定我的問題是否與您的問題類似 - http://stackoverflow.com/questions/29870223/keyboard-navigation-with-android-gridview-doesnt-scroll-grid – ataulm

回答

0

我有一個想法可能適合你。如果不是滾動網格視圖,只需要摧毀網格視圖並在想要跳轉到可能工作的頂部時重新創建網格視圖。如果您希望允許用戶滾動它,那麼需要採用不同的方法。我建議您偏移網格視圖,以使其元素與父元素不完全對齊。例如,如果底部可見行只有一半顯示(中途切斷),則向用戶指示還有更多項可以向下滾動。這同樣適用於您向上滾動 - 最上面的一行只會顯示一半(剪切項目的頂部)。這是我看到很多電視應用程序的模式。