API 11 以降で動作するようにアプリをターゲットにしています。アクティビティ A では、次のコード行を使用して、クリップボードの TEXT をキャプチャし、アクティビティ B (前のアクティビティ) に送信します。
onCreate
:
wvContent = (WebView) findViewById(R.id.wvContent);
LinearLayout ll= (LinearLayout)findViewById(R.id.layout_view);
webkit=new Webkit(this);
wvContent.addView(webkit, 0,0);
WebviewSelectedText webkitSelectedText=new WebviewSelectedText(getApplicationContext(), webkit);
webkitSelectedText.init();
ll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
コピーされたテキストは、アクティビティ B をトリガーします (クリップボードからのテキストを使用して前のアクティビティに戻ります)。
public class WebviewSelectedText
{
private Context context;
Webkit webkit;
private final String have_word="have_word";
public WebviewSelectedText(Context context,Webkit webkit)
{
this.context=context;
this.webkit=webkit;
}
@SuppressWarnings("deprecation")
public void init()
{
final ClipboardManager clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
clipboardManager.setText(null);
setOnSelectTextListener(clipboardManager, webkit);
}
private void setOnSelectTextListener(@SuppressWarnings("deprecation") final ClipboardManager clipboardManager, final Webkit webkit) {
webkit.setOnSelectTextListener(new OnSelectTextListener() {
@SuppressWarnings("deprecation")
public void onSelectText() {
String text = clipboardManager.getText().toString();
text = text.toLowerCase();
//Remove all non-word elements starting and/or ending a string
String strippedInput = text.replaceAll("^\\W+|\\W+$", "");
System.out.println("Stripped string: " + strippedInput);
//receivedText = txtView.getText().toString().toLowerCase();
if(strippedInput!=null)
{
Intent intent=new Intent(context,ActivityB);
intent.putExtra(have_word, strippedInput);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
ActivityA.this.startActivity(intent);
}
}
});
}
エミュレーターではすべて問題ありません。つまり、テキストがコピーされ、クリップボードからのテキストを使用してアクティビティ B が呼び出されます。
ただし、実際のデバイス (HTC とタブレット) では、コピーされたテキストを含むアクティビティ B は、ソフト ボタン (戻る、メニューなどのいずれかのボタン) に触れるまで自動的に開始されません。
参考までに、ここに私のレイアウトがあります:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/layout_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="vertical"
android:layout_weight="1">
<WebView
android:id="@+id/wvContent"
android:layout_width="0dip"
android:layout_height="fill_parent"
android:layout_gravity="top"
android:layout_weight="1"
/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal"
>
<ImageButton
android:id="@+id/btnHome"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:src="@drawable/home"
android:layout_weight="0.25"
/>
<ImageButton
android:id="@+id/btnPronounce"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:src="@drawable/pronounce"
android:layout_weight="0.25"
/>
<ImageButton
android:id="@+id/btnShowHistory"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:src="@drawable/history"
android:layout_weight="0.25"
/>
<ImageButton
android:id="@+id/btnAddFavourite"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:src="@drawable/add_favourite"
android:layout_weight="0.25"
/>
</LinearLayout>
私のコードを見て、何が問題なのか教えていただけないでしょうか。どうもありがとうございました。