Android 采用 DialogFragment 實(shí)現(xiàn)微信文字放大顯示

DialogFragment

public  class MyDialogFragment extends DialogFragment {

    private static final String ARGS_CONTENT = "CONTENT";
    private static final String ARGS_LINE_NUM = "line_num";

    public static MyDialogFragment newInstance(String content, int lineNum){
        Bundle bundle = new Bundle();
        bundle.putString(ARGS_CONTENT, content);
        bundle.putInt(ARGS_LINE_NUM, lineNum);

        MyDialogFragment imageFragment = new MyDialogFragment();
        imageFragment.setArguments(bundle);
        return imageFragment;
    }


    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        View view = LayoutInflater.from(getContext()).inflate(R.layout.dialog_text,null);
        TextView textView = view.findViewById(R.id.tv_text);
        textView.setText(getArguments().getString(ARGS_CONTENT));

        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dismiss();
            }
        });

        int lineNum = getArguments().getInt(ARGS_LINE_NUM);
        if(lineNum>1){
            textView.setGravity(Gravity.CENTER_VERTICAL);
        }

        // 此處不能使用 AlertDialog實(shí)現(xiàn),否則文字無(wú)法居中
        Dialog dialog = new Dialog(getContext(),R.style.Dialog_FullScreen);
        dialog.setContentView(view);
        return dialog;
    }


}

布局

  • ScrollView 屬性 android:fillViewport="true"

  • 包一層RelativeLayout

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ll_dialog"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
    android:padding="@dimen/sh_item_12_dp">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/tv_text"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:gravity="center"
            android:scrollbars="vertical"
            android:text="123456"
            android:textSize="@dimen/text_size_max" />

    </RelativeLayout>

</ScrollView>

dialog樣式

<style name="Dialog.FullScreen" parent="Theme.AppCompat.Dialog">
        <item name="android:windowBackground">@color/white</item>
        <item name="android:windowIsFloating">false</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowContentOverlay">@null</item>
</style>

調(diào)用方法

private void showBigText(String content, int lineNum){
        StringBuilder stringBuilder = new StringBuilder(content);
//        for (int i= 0; i<100; i++){
//            stringBuilder.append(content);
//        }
        MyDialogFragment dialogFragment = MyDialogFragment.newInstance(stringBuilder.toString(), lineNum);
        FragmentManager fragmentManager =((ChatActivity)mContext).getSupportFragmentManager();
        dialogFragment.show(fragmentManager,"1234");
    }

在RecyclerView.Adapter中的調(diào)用方法

  • 結(jié)合RxBinding, 實(shí)現(xiàn)0.5 秒內(nèi)雙擊觸發(fā)
            if(textView.getTag() != null){
                // 復(fù)用時(shí),先取消,再重新設(shè)置監(jiān)聽(tīng)
                Disposable disposable = (Disposable)textView.getTag();
                disposable.dispose();
            }

            Observable<Unit> observable = RxView.clicks(textView).share();
            Disposable disposable = observable.buffer(observable.debounce(500, TimeUnit.MILLISECONDS))
//                    .compose(RxLifecycleUtils.bindToLifecycle((IView) mContext)))
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(list -> {
                                if (list.size() > 1) {
                                    showBigText(stringBuilder.toString(), textView.getLineCount());
                                }
                            }
                            , throwable -> {});
            disposable.isDisposed();
            textView.setTag(disposable);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 用兩張圖告訴你,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 14,041評(píng)論 2 59
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,156評(píng)論 25 708
  • 太長(zhǎng)了,還是轉(zhuǎn)載吧...今天在看博客的時(shí)候,無(wú)意中發(fā)現(xiàn)了@Trinea在GitHub上的一個(gè)項(xiàng)目Android開(kāi)源...
    龐哈哈哈12138閱讀 20,394評(píng)論 3 283
  • 其實(shí)錯(cuò)過(guò)了太陽(yáng)最美的兩個(gè)時(shí)間點(diǎn):日出和日落,也都不必心存遺憾了,就像一個(gè)人,如果你來(lái)不及看到他最燦爛的時(shí)候,那說(shuō)不...
    Adwigern閱讀 268評(píng)論 0 0
  • 一、數(shù)據(jù)庫(kù)事務(wù) 事務(wù)的ACID(acid)屬性 1. 原子性(Atomicity)?原子性是指事務(wù)是一個(gè)不可分割的...
    leeqico閱讀 354評(píng)論 0 0

友情鏈接更多精彩內(nèi)容