티스토리 뷰

반응형

Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.

Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.

 

아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.

How can I get clickable hyperlinks in AlertDialog from a string resource?

어떻게 문자열 리소스에서 AlertDialog에서 클릭 가능한 하이퍼링크를 얻을 수 있나요?

 문제 내용 

What I am trying to accomplish is to have clickable hyperlinks in the message text displayed by an AlertDialog. While the AlertDialog implementation happily underlines and colors any hyperlinks (defined using <a href="..."> in the string resource passed to Builder.setMessage) supplied the links do not become clickable.

제가 하려는 것은 AlertDialog에서 표시되는 메시지 텍스트에 클릭 가능한 하이퍼링크를 만드는 것입니다. AlertDialog 구현에서는 Builder.setMessage에 전달된 문자열 리소스에서 를 사용하여 정의된 모든 하이퍼링크를 기쁘게도 밑줄과 색상을 지정하지만, 링크를 클릭할 수는 없습니다.

 

The code I am currently using looks like this:

현재 사용 중인 코드는 다음과 같습니다.
new AlertDialog.Builder(MainActivity.this).setTitle(
        R.string.Title_About).setMessage(
        getResources().getText(R.string.about))
        .setPositiveButton(android.R.string.ok, null)
        .setIcon(R.drawable.icon).show();

 

I'd like to avoid using a WebView to just display a text snippet.

저는 단순 텍스트 조각을 표시하기 위해 WebView를 사용하는 것을 피하고 싶습니다.

 

 

 

 높은 점수를 받은 Solution 

I didn't really like the currently most popular answer because it significantly changes the formatting of the message in the dialog.

현재 가장 인기 있는 답변을 별로 좋아하지 않았습니다. 왜냐하면 그것은 대화 상자 안의 메시지 형식을 크게 변경하기 때문입니다.

 

Here's a solution that will linkify your dialog text without otherwise changing the text styling:

다음은 대화 상자 텍스트를 링크화하지만 텍스트 스타일을 그대로 유지하는 솔루션입니다.
    // Linkify the message
    final SpannableString s = new SpannableString(msg); // msg should have url to enable clicking
    Linkify.addLinks(s, Linkify.ALL);

    final AlertDialog d = new AlertDialog.Builder(activity)
        .setPositiveButton(android.R.string.ok, null)
        .setIcon(R.drawable.icon)
        .setMessage( s )
        .create();

    d.show();

    // Make the textview clickable. Must be called after show()
    ((TextView)d.findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());

 

 

 가장 최근 달린 Solution 

For me the best solution to create privacy policy dialog is :

저는 개인정보 보호 정책 다이얼로그를 만드는 가장 좋은 해결책은 다음과 같다고 생각합니다.
    private void showPrivacyDialog() {
    if (!PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getBoolean(PRIVACY_DIALOG_SHOWN, false)) {

        String privacy_pol = "<a href='https://sites.google.com/view/aiqprivacypolicy/home'> Privacy Policy </a>";
        String toc = "<a href='https://sites.google.com/view/aiqprivacypolicy/home'> T&C </a>";
        AlertDialog dialog = new AlertDialog.Builder(this)
                .setMessage(Html.fromHtml("By using this application, you agree to " + privacy_pol + " and " + toc + " of this application."))
                .setPositiveButton("ACCEPT", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().putBoolean(PRIVACY_DIALOG_SHOWN, true).apply();
                    }
                })
                .setNegativeButton("DECLINE", null)
                .setCancelable(false)
                .create();

        dialog.show();
        TextView textView = dialog.findViewById(android.R.id.message);
        textView.setLinksClickable(true);
        textView.setClickable(true);
        textView.setMovementMethod(LinkMovementMethod.getInstance());
    }
}

 

check the working example : app link

동작하는 예시를 확인하려면 다음 링크를 클릭하세요: 앱 링크

 

 

 

출처 : https://stackoverflow.com/questions/1997328/how-can-i-get-clickable-hyperlinks-in-alertdialog-from-a-string-resource

반응형
댓글
공지사항
최근에 올라온 글