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...

kitsuneFox
  • 1,243
  • 3
  • 18
  • 31

1 Answers1

1

I found a solution on the github of the ShowCaseView project: https://github.com/amlcurran/ShowcaseView/issues/225

This is a bug that has not been fixed yet on the main branch so you need to edit the library yourself. Go to the the "TextDrawer" class and replace the draw() method with this:

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;
}
niryo
  • 1,275
  • 4
  • 15
  • 26