WebViewの横のコントロールに←→キーで移動する
setNextFocusLeftId() が動いてくれなかったので、いろいろ試してこんな感じにした。
webView.setOnKeyListener(new OnKeyListener() { private String lastUrl; @Override public boolean onKey(View v, int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_DPAD_LEFT: case KeyEvent.KEYCODE_DPAD_RIGHT: HitTestResult hr = webView.getHitTestResult(); if (event.getAction() == KeyEvent.ACTION_UP) { if (TextUtils.equals(lastUrl, hr.getExtra())) { webView2.requestFocus(); return true; } lastUrl = hr.getExtra(); break; } return false; } });
キーの DOWN/MULTI/UP の度に getHitTestResult() でカーソルで選択されている url を取得。
キーが UP したときに、直前に取得した url と同じの場合、「それ以上カーソルが横に動かない」と見なしてwebView2にフォーカスを設定する。
あまりよくないけど、とりあえずok。
WebViewでページが短いのにスクロールバーが出る問題がまだ未解決...。頭痛い。
追記 2010-09-07
だめなパターン発見。
リンク先が同じリンクが2つ横に並んでいると、「直前に取得したurlと同じ」になってしまうのでだめですな。
確率はそんなに高くないけど、アキバ総研みたいなRSSだとダメだな。(画像なんかのリンクをすべて、元記事へのリンクにしてある)
素直にホスト側からスクリプトを入れて、DOMにアクセスすれば解決できるかな。JavaScriptを有効にする必要があるのが気に入らないけど。