Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在显示布局之前检测TextVIew是否已椭圆化_Android_Android Layout - Fatal编程技术网

Android 在显示布局之前检测TextVIew是否已椭圆化

Android 在显示布局之前检测TextVIew是否已椭圆化,android,android-layout,Android,Android Layout,我有一个最多3行的文本视图,下面有一个“显示更多”按钮。其逻辑是,如果文本视图中的文本可以放入其中,“显示更多”按钮被隐藏;否则,如果文本无法容纳3行,则会显示“显示更多” 我的方法(不起作用)是:通过使用TextView.getLayout().getEllipsIscont(maxNumberOfline)检测TextView是否被省略,然后隐藏或显示“显示更多”按钮。但是当布局尚未完成时,调用textView.getLayout()返回null。我试图将textView.getLayout

我有一个最多3行的文本视图,下面有一个“显示更多”按钮。其逻辑是,如果文本视图中的文本可以放入其中,“显示更多”按钮被隐藏;否则,如果文本无法容纳3行,则会显示“显示更多”

我的方法(不起作用)是:通过使用
TextView.getLayout().getEllipsIscont(maxNumberOfline)
检测TextView是否被省略,然后隐藏或显示“显示更多”按钮。但是当布局尚未完成时,调用textView.getLayout()返回null。我试图将
textView.getLayout().getEllipsisCount(maxNumberOfline)
放入
onStart()
onResume()
中,但没有成功


有人有其他方法吗?

试试这种方法,希望这能帮助你解决问题。

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        textview = (TextView) findViewById(R.id.textview);
        textview.setText("demotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotextdemotext");
        TextViewResizable(textview,3,"See More");
    }

    public void TextViewResizable(final TextView tv,final int maxLine, final String expandText) {
        if (tv.getTag() == null) {
            tv.setTag(tv.getText());
        }
        ViewTreeObserver vto = tv.getViewTreeObserver();
        vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

            @SuppressWarnings("deprecation")
            @Override
            public void onGlobalLayout() {
                ViewTreeObserver obs = tv.getViewTreeObserver();
                obs.removeGlobalOnLayoutListener(this);
                if (maxLine <= 0) {
                    int lineEndIndex = tv.getLayout().getLineEnd(0);
                    String text = tv.getText().subSequence(0,lineEndIndex - expandText.length() + 1)+ " " + expandText;
                    tv.setText(text);
                    tv.setMovementMethod(LinkMovementMethod.getInstance());
                    tv.setText(addClickablePartTextViewResizable(Html.fromHtml(tv.getText().toString()), tv, expandText), TextView.BufferType.SPANNABLE);
                } else if (tv.getLineCount() >= maxLine) {
                    int lineEndIndex = tv.getLayout().getLineEnd(maxLine - 1);
                    String text = tv.getText().subSequence(0,lineEndIndex - expandText.length() + 1)+ " " + expandText;
                    tv.setText(text);
                    tv.setMovementMethod(LinkMovementMethod.getInstance());
                    tv.setText(addClickablePartTextViewResizable(Html.fromHtml(tv.getText().toString()), tv, expandText), TextView.BufferType.SPANNABLE);
                }
            }
        });



    }

    private  SpannableStringBuilder addClickablePartTextViewResizable(final Spanned strSpanned, final TextView tv,final String expandText) {
        String str = strSpanned.toString();
        SpannableStringBuilder ssb = new SpannableStringBuilder(strSpanned);

        if (str.contains(expandText)) {
            ssb.setSpan(new Spannable(Color.BLUE, true) {
                        @Override
                        public void onClick(View widget) {
                            tv.setLayoutParams(tv.getLayoutParams());
                            tv.setText(tv.getTag().toString(),TextView.BufferType.SPANNABLE);
                            tv.invalidate();
                        }
                    }, str.indexOf(expandText), str.indexOf(expandText)+ expandText.length(), 0);

        }
        return ssb;

    }

    class Spannable extends ClickableSpan {

        private int color = -1;
        private float fontSize = -1;
        private boolean isUnderline = true;

        /**
         * Constructor
         */
        public Spannable() {
        }

        /**
         * Constructor
         */
        public Spannable(int color) {
            this.color = color;
        }

        /**
         * Constructor
         */
        public Spannable(float fontSize) {
            this.fontSize = fontSize;
        }

        /**
         * Constructor
         */
        public Spannable(boolean isUnderline) {
            this.isUnderline = isUnderline;
        }

        /**
         * Constructor
         */
        public Spannable(int color, boolean isUnderline) {
            this.isUnderline = isUnderline;
            this.color = color;
        }

        /**
         * Constructor
         */
        public Spannable(int color, float fontSize) {
            this.color = color;
            this.fontSize = fontSize;
        }

        /**
         * Overrides methods
         */
        @Override
        public void updateDrawState(TextPaint ds) {

            if (color != -1) {
                ds.setColor(color);
            }
            if (fontSize > 0) {
                ds.setTextSize(fontSize);
            }

            ds.setUnderlineText(isUnderline);

        }

        @Override
        public void onClick(View widget) {

        }
    }
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textview=(textview)findViewById(R.id.textview);
textview.setText("DemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoMotExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDetDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDetextDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoemotextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemOtextDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDeDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoMotExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDetDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDetextDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoExtDemoemotextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoTextDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDemoxtDe
    mTextView.getViewTreeObserver().addOnGlobalLayoutListener(
                            new OnGlobalLayoutListener() {
                                @Override
                                public void onGlobalLayout() {
                                    showHideMoreButton(mTextView);
                                }
                            });


    public void showHideMoreButton(TextView mTextView) {
            Layout layout = mTextView.getLayout();
            if (layout != null) {
                int lines = layout.getLineCount();
                if (lines > 0) {
                    int ellipsisCount = layout.getEllipsisCount(lines - 1);
                    if (ellipsisCount > 0) {
                        mShowMoreButton.setVisibility(View.VISIBLE);
                    }
                }
            }
    }
public void showHideMoreButton(TextView mTextView) {
    int lines = mTextView.getLineCount();

    if (lines > 2) {
        mShowMoreButton.setVisibility(View.VISIBLE);
        mTextView.setSingleLine(false);
        mTextView.setEllipsize(TextUtils.TruncateAt.END);
        mTextView.setLines(2); //no. of lines you want your textview to display
    }

}