1

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>   

私のコードを見て、何が問題なのか教えていただけないでしょうか。どうもありがとうございました。

4

0 に答える 0