การสร้างลิงค์ใน DialogFragment ของ Android 1.5

มีหลายครั้งที่เราต้องการสร้างลิงค์เชื่อมโยงไปยังเว็บต่าง ๆ ใน DialogFragment ของ Android ดังภาพ


หลักการ

โดยปกติเราจะไม่สามารถใช้ลิงค์ไปยังหน้าเว็บอื่น ๆ จาก DialogFragment ได้ ถ้าต้องการให้มี Link เราต้องจัดการข้อความที่จะให้แสดง โดยทำให้เป็น SpannableString เสียก่อน ใช้ Linkyfy สร้างลิงค์ นำไปไว้ใน TextView และเอา TextView ไปไว้ใน Dialog อีกที จึงจะได้ลิงค์ตามต้องการ

วิธีการ
  1. สร้างไฟล์ใหม่ ตั้งชื่อว่า AlertDialogWithLink
  2. สร้าง Java Class ชื่อ MyDialogFragment.java สำหรับเป็น adapter สร้าง Dialog
    MyDialogFragment.java
    package com.thongjoon.alertdialogwithlink;
    import android.app.AlertDialog;
    import android.app.Dialog;
    import android.app.DialogFragment;
    import android.os.Bundle;
    import android.text.SpannableString;
    import android.text.method.LinkMovementMethod;
    import android.text.util.Linkify;
    import android.widget.TextView;
    
    public class MyDialogFragment extends DialogFragment {
    
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
    
            // get a variable from MainActivity.java when calling this Dialog. The variable is in the form of key and value.
            Bundle mArgs = getArguments();
            String msg = mArgs.getString("key");
            String title = "เตรียมสอบ...";
    
            final TextView textView = new TextView(getActivity()); // create textView
            final SpannableString spannableMsg = new SpannableString(msg); //create spannableString
    
            Linkify.addLinks(spannableMsg, Linkify.WEB_URLS);
    
            textView.setText(spannableMsg);
            textView.setMovementMethod(LinkMovementMethod.getInstance());
    
            // Create the AlertDialog object and return it
           // return builder.create();
    
            return new AlertDialog.Builder(getActivity())
                    .setTitle(title)
                    .setView(textView)
                    .setPositiveButton(android.R.string.ok, null)
                    .create();
        }
    }
    
    
  3. สร้างปุ่มสำหรับกดเพื่อเรียกใช้งาน Dialog ที่สร้างขึ้น ปุ่มนี้อยู่ใน content_main.xml
    content_main.xml
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        tools:context="com.thongjoon.alertdialogwithlink.MainActivity"
        tools:showIn="@layout/activity_main">
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello World!"
            android:id="@+id/textView"/>
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Button"
            android:id="@+id/dfragbutton"
            android:layout_below="@+id/textView"
            android:layout_toRightOf="@+id/textView"
            android:layout_toEndOf="@+id/textView"
            android:layout_marginTop="136dp"/>
    </RelativeLayout>
    
    
  4. ที่ MainActivity.java เราจะสร้างข้อความสำหรับแสดงใน DialogFragment และเรียกใช้งาน ดังนี้
    MainActivity.java
    package com.thongjoon.alertdialogwithlink;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    
    public class MainActivity extends AppCompatActivity {
    
    String itemExplanation = "\tนี่เป็นตัวอย่างการสร้างลิงค์ไปย้งเว็บเพจ ใน DialogFragment ของ " +
            "Android Studio 1.5\n\tดูข้อมูลเพิ่มเติมที่ " +
            "\n\thttp://www.thongjoon.com/2016/04/how-do-you-like-how-much-do-you-like.html " +
            "\n\tนะครับ";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
    
            // Locate the button in activity_main.xml
            Button dfragbutton = (Button)findViewById(R.id.dfragbutton);
    
            // Capture button clicks
            dfragbutton.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view) {
                    Bundle args = new Bundle();
                    args.putString("key", itemExplanation);
                    MyDialogFragment newFragment = new MyDialogFragment();
                    newFragment.setArguments(args);
                    newFragment.show(getFragmentManager(), "TAG");
                }
            });
        }
    }
    

    ข้อสังเกต

    ในการจัดรูปแบบข้อความใน dialog เราใช้ /t สำหรับย่อหน้า และ /n สำหรับขึ้นบรรทัดใหม่
แหล่งอ้างอิง

http://stackoverflow.com/questions/29319981/link-in-alert-dialog-fragment



ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

อุปมา อุปไมย สำนวนการเปรียบเทียบ ของไทย

ความสามารถทั่วไปด้านเหตุผล การหาความสัมพันธ์จาก ภาพ สัญลักษณ์

แนวข้อสอบ เงื่อนไขสัญลักษณ์