2

For some reason i get this error on a few devices such for example : is google nexus 10 or lg g3.

this is the code that generates this error:

mPlusButton.setClickable(false);
            guide.setVisibility(View.INVISIBLE);
            final RelativeLayout.LayoutParams lps = new RelativeLayout.LayoutParams(
                    ViewGroup.LayoutParams.WRAP_CONTENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT);
            lps.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
            lps.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
            lps.setMargins(40,0,0,160);

            mViews1 = new ShowcaseView.Builder(this)
                    .setStyle(R.style.CustomShowcaseTheme3)
                    .setContentTitle("Welcome to listo")
                    .setContentText("The best way to share your to-do lists\nand manage them in just a few clicks!")
                    .setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {

                            if(showcase_num == 0){
                                showcase_num++;
                                mViews1.setTarget(new ViewTarget(R.id.fab,MainActivity.this));
                                mViews1.setContentTitle("Manage your lists");
                                mViews1.setContentText("Press on the plus button to add a new list.\nLong press on a list to exit from it, rename, mute or delete it." +
                                        "\n\nAt both sides of the list's name you can see the number of participants and tasks on it.");
                                mViews1.setButtonText("Got it!");

                            }else{
                                mViews1.hide();
                                mViews1.destroyDrawingCache();
                                mPlusButton.setClickable(true);

                                updateList(false);

                                SharedPreferences.Editor editor = prefs.edit();
                                editor.putInt("showcase_key", 0);
                                editor.commit();
                            }

                        }
                    })
                    .doNotBlockTouches()
                    .build();

            mViews1.setButtonText("I'm ready");
            mViews1.setButtonPosition(lps);

I didn't find any solution on the internet. from what i understand, for some reason the layout has a negative value which cause the Layout.java class to throw an exception...

4

1 回答 1

1

我在 ShowCaseView 项目的 github 上找到了解决方案: https ://github.com/amlcurran/ShowcaseView/issues/225

这是一个尚未在主分支上修复的错误,因此您需要自己编辑库。转到“TextDrawer”类并将 draw() 方法替换为:

public void draw(Canvas canvas) {
    if (shouldDrawText()) {

        float[] textPosition = getBestTextPosition();

        // ADDED FIX FOR LG G3
        // @author CollegeDev
        for (float position : textPosition) {
            if (position < 0) {
                return;
            }
        }

        if (!TextUtils.isEmpty(mTitle)) {
            canvas.save();
            if (hasRecalculated) {
                mDynamicTitleLayout = new DynamicLayout(mTitle, titlePaint,
                        (int) textPosition[2], Layout.Alignment.ALIGN_NORMAL,
                        1.0f, 1.0f, true);
            }
            if (mDynamicTitleLayout != null) {
                canvas.translate(textPosition[0], textPosition[1]);
                mDynamicTitleLayout.draw(canvas);
                canvas.restore();
            }
        }

        if (!TextUtils.isEmpty(mDetails)) {
            canvas.save();
            if (hasRecalculated) {
                mDynamicDetailLayout = new DynamicLayout(mDetails, textPaint,
                        (int) textPosition[2],
                        Layout.Alignment.ALIGN_NORMAL,
                        1.2f, 1.0f, true);
            }
            float offsetForTitle = mDynamicTitleLayout != null ? mDynamicTitleLayout.getHeight() :
                    0;
            if (mDynamicDetailLayout != null) {
                canvas.translate(textPosition[0], textPosition[1] + offsetForTitle);
                mDynamicDetailLayout.draw(canvas);
                canvas.restore();
            }

        }
    }
    hasRecalculated = false;
}
于 2015-12-23T08:15:55.890 回答