2013-03-12 27 views
27

テキスト選択のための既存のデフォルトのコンテキストアクションバー(CAB)を上書きしたい。つまり、自分のCABを自分のボタンで表示したいのですが、Webビューでテキストが選択されているとします。私はAndroidドキュメントを使ってCABを実装しようとしました。 OnLongClickListenerは、Webビューでテキスト選択イベントを取得しません。テキスト選択をキャプチャするイベントとは何ですか?デフォルトのCABを隠し、CABをテキスト選択に表示することはできますか?Androidのテキスト選択(WebView)のデフォルトのコンテキストアクションバーを無効にする

childWebView.setOnLongClickListener(new OnLongClickListener() { 
     @Override 
    // Called when the user long-clicks on someView 
     public boolean onLongClick(View view) { 
      if (mActionMode != null) { 
       return false; 
      } 

      // Start the CAB using the ActionMode.Callback defined above 
      mActionMode = startActionMode(mActionModeCallback); 
      view.setSelected(true); 
      return true; 
     } 
    }); 
+0

あなたはそのカルカの解決策を見つけましたか? –

+0

Nope。私はしませんでした。 – arun8

+0

これまでの解決策はありますか? – sanjeev

答えて

8

これを解決できました。私もこの問題に直面していて、Web上で解決策を見つけることができませんでした。

したがって、LongClickリスナーを設定すると、Webviewは選択の表示を停止します。 WebViewのコードを深く掘り下げた後、WebViewのメソッドstartRunModeを呼び出して、SelectActionCallbackModeクラスのインスタンスを渡していることがわかりました。

私は単にのWebViewクラスを拡張して、このようstartRunModeメソッドをオーバーライド:

public ActionMode startActionMode(ActionMode.Callback callback) 
{ 
    actionModeCallback = new CustomizedSelectActionModeCallback(); 
    return super.startActionMode(actionModeCallback); 
} 

これは代わりのWebViewのデフォルトの1を表示する私のコールバックを表示するには、WebViewのを余儀なくされました。これにより、以前と同じように選択がスムーズに行われ、選択が行われるたびにCABが表示されるようになりました。 CABを却下するためのコードを自分で書かなければならないという警告がありました。

4.1,4.2および4.3のデバイスでテスト済みです。

これが役に立ちます。

+0

ありがとう、それは私のために働く – mohitum

+0

しかし、あなたはwebviewから選択したテキストを取得することはできません。また、私の実装では、このアプローチを使用して、ときどきKitkat webviewで内部エラーが発生します。 – Frank

+0

@Frank JavaScript(window.getSelection()。toString())を使用して、選択したテキストを取得できます。私はまだKitKatでそれを試していない、問題を見てみるだろう。 –

1

公式ドキュメントSelection | Android Developersノートその:

アクションと要素がCABに表示される選択CABアクション

あなたが決めることができます。 Action Bar patternの ガイドラインを使用して、トップレベルの表面にあるアイテムを決定し、アクションのオーバーフローに移動するアイテムを決定します。

動的に調整するCABアクションほとんどのケースで は、ユーザーが選択に複数の項目を追加して動的 としてCABのアクションを調整する必要があります。単一の選択されたデータ項目の に適用されるアクションは、同じ種類の複数の選択された データ項目に必ずしも適用されるわけではありません。

残念ながら、引用に含まれるリンクは、実際の詳細には進まずに一般情報のみを保持するセクションにリンクしています。状況を悪化させるために、それはSelection | Android Developersページにリンクしています。

さらにご覧になり、私はthis tutorialをLars Vogelから見つけました。私は(私のフォーマット)引用:

文脈アクションモードは、特定のサブタスクの期間のためのアプリケーションActionBarを重ね、一時ActionBarを活性化させます。

通常、コンテキストアクションモードは、アイテムを選択するか、またはアイテムを長くクリックすることによってアクティブ化されます。

これを実装するには、ビューでstartActionMode()メソッドを呼び出し、アクティビティで を呼び出します。このメソッドは、コンテキストActionBarのライフサイクルを担当する というオブジェクトActionMode.Callbackを取得します。

registerForContextMenu(view)メソッドを使用してViewにコンテキストメニューを割り当てることもできます。コンテキストメニューは、ユーザがビューを長押しすると もアクティブになります。 メソッド は、コンテキストメニュー が使用後に破棄されるとコンテキストメニューがアクティブになるたびに呼び出されます。コンテキストメニューの使用方法よりも、コンテキストアクション モードを優先する必要があります。

registerForContextMenu(view)を使用して独自のメニューを作成できるという最も顕著なリファレンスがあります。答えを複製するのではなく、私はthis answerJ. Pablo Fernándezであり、あなた自身のCABを適用する方法のコード例が含まれていました。新しいコンテキストメニューを登録するとデフォルトのメニューが上書きされますが、わかりません。私は現時点でこれをテストすることができないので、これがあなたの問題を解決したかどうか聞いてうれしいです。

関連する問題