[android] AlertDialog에서 문자열 리소스의 클릭 가능한 하이퍼 링크를 얻으려면 어떻게해야합니까?



Answers

대화 상자에서 메시지 서식을 크게 변경하기 때문에 현재 가장 인기있는 답변이 마음에 들지 않았습니다.

텍스트 스타일을 변경하지 않고 대화 상자 텍스트를 연결하는 솔루션은 다음과 같습니다.

    // Linkify the message
    final SpannableString s = new SpannableString(msg);
    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());
Question

달성하고자하는 것은 AlertDialog 의해 표시된 메시지 텍스트에서 클릭 할 수있는 하이퍼 링크를 갖는 것입니다. AlertDialog 구현은 <a href="..."> Builder.setMessage 전달 된 문자열 리소스에서 정의 된 하이퍼 링크에 행복하게 밑줄을 긋고 색상을 지정하지만 링크는 클릭 할 수 없게됩니다.

현재 사용중인 코드는 다음과 같습니다.

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();

텍스트 조각을 표시하는 데 WebView 를 사용하지 않는 것이 좋습니다.




사실 모든 뷰를 처리하지 않고 단순히 문자열을 사용하려는 경우 가장 빠른 방법은 메시지 텍스트 뷰를 찾고 연결하는 것입니다.

d.setMessage("Insert your cool string with links and stuff here");
Linkify.addLinks((TextView) d.findViewById(android.R.id.message), Linkify.ALL);



대신에 ...

AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
dialogBuilder.setTitle(R.string.my_title);
dialogBuilder.setMessage(R.string.my_text);

... 이제 사용합니다.

AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
dialogBuilder.setTitle(R.string.my_title);
TextView textView = new TextView(this);
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setText(R.string.my_text);
dialogBuilder.setView(textView);



DialogFragment 사용하는 DialogFragment 솔루션이 도움이됩니다.

public class MyDialogFragment extends DialogFragment {
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        // dialog_text contains "This is a http://test.org/"
        String msg = getResources().getString(R.string.dialog_text);
        SpannableString spanMsg = new SpannableString(msg);
        Linkify.addLinks(spanMsg, Linkify.ALL);

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle(R.string.dialog_title)
            .setMessage(spanMsg)
            .setPositiveButton(R.string.ok, null);
        return builder.create();
    }

    @Override
    public void onStart() {
        super.onStart();

        // Make the dialog's TextView clickable
        ((TextView)this.getDialog().findViewById(android.R.id.message))
                .setMovementMethod(LinkMovementMethod.getInstance());
    }
}



나는 현재의 대답에 정말로 만족하지 못했다. AlertDialog를 사용하여 href 스타일로 클릭 할 수있는 하이퍼 링크가 필요할 때 중요한 두 가지가 있습니다.

  1. 보기 만 클릭 가능한 HTML 콘텐츠를 허용하므로 setMessage(…) 아닌보기로 컨텐츠를 설정하십시오.
  2. 올바른 이동 방법 설정 ( setMovementMethod(…) )

다음은 최소한의 예제입니다.

strings.xml

<string name="dialogContent">
    Cool Links:\n
    <a href="http://.com"></a>\n
    <a href="http://android.stackexchange.com">Android Enthusiasts</a>\n
</string>

MyActivity.java

…
public void showCoolLinks(View view) {
   final TextView textView = new TextView(this);
   textView.setText(R.string.dialogContent);
   textview.setMovementMethod(LinkMovementMethod.getInstance()); // this is important to make the links clickable
   final AlertDialog alertDialog = new AlertDialog.Builder(this)
       .setPositivebutton("OK", null)
       .setView(textView)
       .create();
   alertDialog.show()
}
…



많은 질문과 답변을 확인했지만 작동하지 않습니다. 내가 스스로 해냈다. MainActivity.java의 코드 스 니펫입니다.

private void skipToSplashActivity()
{

    final TextView textView = new TextView(this);
    final SpannableString str = new SpannableString(this.getText(R.string.dialog_message));

    textView.setText(str);
    textView.setMovementMethod(LinkMovementMethod.getInstance());

    ....
}

res \ values ​​\ String.xml에이 태그를 넣으십시오.

<string name="dialog_message"><a href="http://www.nhk.or.jp/privacy/english/">NHK Policy on Protection of Personal Information</a></string>



Related