การสร้างลิงค์ใน DialogFragment ของ Android 1.5
มีหลายครั้งที่เราต้องการสร้างลิงค์เชื่อมโยงไปยังเว็บต่าง ๆ ใน DialogFragment ของ Android ดังภาพ
หลักการ
โดยปกติเราจะไม่สามารถใช้ลิงค์ไปยังหน้าเว็บอื่น ๆ จาก DialogFragment ได้ ถ้าต้องการให้มี Link เราต้องจัดการข้อความที่จะให้แสดง โดยทำให้เป็น SpannableString เสียก่อน ใช้ Linkyfy สร้างลิงค์ นำไปไว้ใน TextView และเอา TextView ไปไว้ใน Dialog อีกที จึงจะได้ลิงค์ตามต้องการ
วิธีการ
- สร้างไฟล์ใหม่ ตั้งชื่อว่า AlertDialogWithLink
- สร้าง Java Class ชื่อ MyDialogFragment.java สำหรับเป็น adapter สร้าง Dialog
MyDialogFragment.javapackage 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(); } }
- สร้างปุ่มสำหรับกดเพื่อเรียกใช้งาน 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>
- ที่ MainActivity.java เราจะสร้างข้อความสำหรับแสดงใน DialogFragment และเรียกใช้งาน ดังนี้
MainActivity.javapackage 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
ความคิดเห็น
แสดงความคิดเห็น