public class KankyouFragment extends Fragment {
private TextView txtTitle;
private TextView txtDiscription;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
LinearLayout layout= (LinearLayout) inflater.inflate(R.layout.kankyou,null);
txtTitle=layout.findViewById(R.id.kankyou_title);
txtDiscription=layout.findViewById(R.id.kankyou_discription);
txtTitle.setText("動作環境");
txtTitle.setTextColor(Color.WHITE);
txtDiscription=(TextView) layout.findViewById(R.id.kankyou_discription);
txtDiscription.setTextColor(Color.WHITE);
// assetsにあるテキストファイルの文字列を読みこむ
String str= ApplicationUtil.assetsToString(getActivity(),"kankyou.txt");
// デバッグログ
Log.i("str >>>","str="+str);
// 以下にリンクを設定する
String strAddress="AirDroidについて";
// SpannableStringを使って一部文字列装飾
// テキストファイルの文字列
SpannableString strSpan=new SpannableString(str);
// リンク文字列
SpannableString addressSpan=new SpannableString(strAddress);
// リンクを設定 第4パラメータで、挿入テキストを含めない EXCLUSIVEは排他的
// Spanned.SPAN_EXCLUSIVE_EXCLUSIVEは追加文字に影響を与えない(もともとのStyleで表示する)
// see http://ykonp.com/post-2226/
// 文字色変更は、最後にしないと反映しない。
addressSpan.setSpan(new AddressSpan(),0,strAddress.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
addressSpan.setSpan(new ForegroundColorSpan(Color.YELLOW), 0, strAddress.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// テキスト文字列とリンク文字列を結合する。
SpannableStringBuilder builder=new SpannableStringBuilder();
builder.append(strSpan);
builder.append(addressSpan);
txtDiscription.setText(builder);
// 参考 https://android.gcreate.jp/482/
// Chromeカスタムタブでリンクを開きたい場合に、autoLinkでは対応できない。
// 以上の問題点を回避するには、自分でテキストにClickableSpanを設定してやると良い。
/**
* TextViewのTextをSpannableにして、ClickableSpanを設定しただけではリンクをクリックすることはできない。
* ClickableSpanのonClickが呼び出されるためには、setMovementMethodで何らかの
* MovementMethodがTextViewに設定されていなければならない。
* autoLinkを使った場合のLinkをタップしたときの動きはLinkMovementMethodが使われているのでここはそのまま流用する。
* ClickableSpanのonClickを呼び出すかどうかは、TextViewのonTouchメソッド内の処理を確認すれば分かるが、
* mMovementがnullではないことが条件になっている。
* だからTextView.setMovementMethod(LinkMovementMethod.getInstance())を行っているのである。
*
*
*/
txtDiscription.setMovementMethod(LinkMovementMethod.getInstance());
return layout;
}
/**
* リンククリックで、指定URLのブラウザ表示をする。
*/
class AddressSpan extends ClickableSpan {
@Override
public void onClick(@NonNull View widget) {
// アドレスを引数にしてブラウザを表示する
Intent intent=new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=com.sand.airdroid&hl=ja"));
startActivity(intent);
}
}
}