2015-05-01 2 views
2

По какой-то причине я получаю эту ошибку на нескольких устройствах, например: google nexus 10 или lg g3.IllegalArgumentException: Layout: -998896 <0 in showcaseview

это код, который генерирует эту ошибку:

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); 

я не нашел какого-либо решения в Интернете. от того, что я понимаю, по какой-то причине макет имеет отрицательное значение, которое вызывает класс Layout.java бросить исключение ...

+0

У меня такая же ошибка. Вы нашли решение? –

+0

Это известная проблема SnowcaseView: https://github.com/amlcurran/ShowcaseView/issues/182. Попробуйте предоставленное решение и добавьте свой код в эту проблему, если это не поможет. – birdy

ответ

1

Я нашел решение на GitHub проекта ShowCaseView: 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; 
} 
+0

Я улучшил его, пожалуйста, проверьте еще раз. – kundasaba

+0

благодарит за изменение – Drew