티스토리 뷰
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
'개발 > 안드로이드' 카테고리의 다른 글
다른 패캐지의 디폴트 액티비티 실행하기 (0) | 2022.12.13 |
---|---|
View의 GONE과 INVISIBLE의 차이 (0) | 2022.12.13 |
Android WebView를 포함하는 앱에서 브라우저를 여는 대신 리다이렉션 처리하기 (0) | 2022.12.13 |
Firebase에서 앱이 백그라운드에 있을 때 알림 처리 방법 (0) | 2022.12.12 |
스크롤 뷰를 부모로 갖는 웹뷰에서 동적으로 스크롤 포커스 이동시키기 (0) | 2022.12.12 |