1

ここでローカル HTML ファイルの読み取りについて多くの質問があることは知っていますが、私のニーズを満たすものは見つかりませんでした。

DialogFragment をポップアップさせ、リンクを含むメッセージを表示し、そのリンクをクリックして、ローカルの HTML ファイルを (できればデフォルトの Web ブラウザーから) 読み取らせたいと考えています。

私がこれまでに持っているもの:

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
        alertDialogBuilder.setMessage(Html.fromHtml("I have read and agree to the " + "<a href=\"file:///android_asset/privacy.html\">Terms and Conditions</a>" + " and the " + "<a href=\"http://www.samsung.com/global/business/mobile/info/privacy.html\">Privacy Policy</a>"));
        alertDialogBuilder.setCancelable(false);

        //rest of code...
    }

オンライン版を指す 2 番目のリンクは魅力的です。最初のリンクは、アセット フォルダー内のローカルの privacy.html ファイルを指す必要があります。最初のリンクをクリックすると、エラーが発生します。

    android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=file:///android_asset/privacy.html (has extras) }

この状況に関するヒントやアドバイスはありますか?複数の異なる HTML ファイルを試しましたが、すべて同じ結果でした。このようなものに独自の WebView を使用する必要がありますか? リンクをクリックしたときに、デフォルトのブラウザからローカル HTML ファイルを表示するように Android に指示する方法があるはずです...

4

2 に答える 2

3

Link は html タグであるため、技術的には機能しません。ウェブビューで動作します。それでも、コードをカスタマイズした textview でこれを実行したい場合は、次のコードを試してください。

public class CustomLinkMovementMethod extends LinkMovementMethod
{

private static Context movementContext;

private static CustomLinkMovementMethod linkMovementMethod = new CustomLinkMovementMethod();

public boolean onTouchEvent(android.widget.TextView widget, android.text.Spannable buffer, android.view.MotionEvent event)
{
    int action = event.getAction();

    if (action == MotionEvent.ACTION_UP)
    {
        int x = (int) event.getX();
        int y = (int) event.getY();

        x -= widget.getTotalPaddingLeft();
        y -= widget.getTotalPaddingTop();

        x += widget.getScrollX();
        y += widget.getScrollY();

        Layout layout = widget.getLayout();
        int line = layout.getLineForVertical(y);
        int off = layout.getOffsetForHorizontal(line, x);

        URLSpan[] link = buffer.getSpans(off, off, URLSpan.class);
        if (link.length != 0)
        {
            String url = link[0].getURL();
            if (url.startsWith("https"))
            {
                Log.d("Link", url);
                Toast.makeText(movementContext, "Link was clicked", Toast.LENGTH_LONG).show();
            } else if (url.startsWith("tel"))
            {
                Log.d("Link", url);
                Toast.makeText(movementContext, "Tel was clicked", Toast.LENGTH_LONG).show();
            } else if (url.startsWith("mailto"))
            {
                Log.d("Link", url);
                Toast.makeText(movementContext, "Mail link was clicked", Toast.LENGTH_LONG).show();
            }
            return true;
        }
    }

    return super.onTouchEvent(widget, buffer, event);
}

public static android.text.method.MovementMethod getInstance(Context c)
{
    movementContext = c;
    return linkMovementMethod;
}

これは、次の方法で textview から呼び出す必要があります。

textViewObject.setMovementMethod(CustomLinkMovementMethod.getInstance(context));
于 2014-10-31T05:19:55.527 に答える