2015-07-01 4 views
13

Ich habe den neuen Stil Collapsible Toolbar implementiert. Ich benutze den gleichen Code wie das Beispiel (Cheesesquare) Demo-App - das funktioniert natürlich auf allen Geräten. Ich brauche Hilfe herauszufinden, was ich anders mache als die Probe (damit meine App nicht abstürzt).CollapsingToolbarLayout Absturz auf 4.4 Geräten (java.lang.IllegalArgumentException: Radius muss> 0 sein)

Meine App läuft hervorragend auf 5.0+ Geräten, stürzt aber auf älteren Geräten ab (OS 4.4.4) mit einem Fehler, den ich nicht auf meinen Code isolieren kann (keine Verweise auf die Klassen meines Projekts im Stack). Scheint mir so seltsam, dass dieses Gerät spezifisch ist (wenn dies ein Codefehler war, würde es überall abstürzen)

Ich habe (es versucht, aber nicht helfen):

  • durch alle sahen mein XML und Java, um sicherzustellen, ich bin nicht Einstellung ein 0 als jede Dimension auf jeder Ansicht
  • Ensured ich nicht padding überall
  • entfernt alle Ränder an Einstellung (nur zu überprüfen - nicht helfen, wieder hinzugefügt)
  • Alle meine setBackground() Methoden (Nr Hilfe)
  • Entfernt alle Höhe und Radius-Attribute
  • ALLE CardViews zu Visibility.GONE (noch einstellen stürzt auch mit allen CardViews keine)

Der Absturz von einer Klasse kommt in AOSP gezogen werden: https://android.googlesource.com/platform/frameworks/support/+/master/v7/cardview/eclair-mr1/android/support/v7/widget/RoundRectDrawableWithShadow.java

ich sehe ein ähnlicher Bug geöffnet (aber nicht vergeben): https://code.google.com/p/android/issues/detail?id=157919diese Fehler Zustände Interessanterweise ist dies nicht Absturz auf 4.3, aber ich habe nicht das Gerät handlich.

Vorschläge darüber, wie ich die Ursache dieser Absturz debuggen können ?:

E/AndroidRuntime( 708): java.lang.IllegalArgumentException: radius must be > 0 
E/AndroidRuntime( 708): at android.graphics.RadialGradient.<init>(RadialGradient.java:53) 
E/AndroidRuntime( 708): at android.support.v7.widget.RoundRectDrawableWithShadow.buildShadowCorners(RoundRectDrawableWithShadow.java:285) 
E/AndroidRuntime( 708): at android.support.v7.widget.RoundRectDrawableWithShadow.buildComponents(RoundRectDrawableWithShadow.java:307) 
E/AndroidRuntime( 708): at android.support.v7.widget.RoundRectDrawableWithShadow.draw(RoundRectDrawableWithShadow.java:209) 
E/AndroidRuntime( 708): at android.view.View.draw(View.java:15493) 
E/AndroidRuntime( 708): at android.widget.FrameLayout.draw(FrameLayout.java:472) 
E/AndroidRuntime( 708): at android.view.View.getDisplayList(View.java:14402) 
E/AndroidRuntime( 708): at android.view.View.getDisplayList(View.java:14444) 
E/AndroidRuntime( 708): at android.view.View.draw(View.java:15222) 
E/AndroidRuntime( 708): at android.view.ViewGroup.drawChild(ViewGroup.java:3340) 
E/AndroidRuntime( 708): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3176) 
E/AndroidRuntime( 708): at android.view.View.getDisplayList(View.java:14397) 
E/AndroidRuntime( 708): at android.view.View.getDisplayList(View.java:14444) 
E/AndroidRuntime( 708): at android.view.View.draw(View.java:15222) 
E/AndroidRuntime( 708): at android.view.ViewGroup.drawChild(ViewGroup.java:3340) 
E/AndroidRuntime( 708): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3176) 
E/AndroidRuntime( 708): at android.view.View.draw(View.java:15511) 
E/AndroidRuntime( 708): at android.widget.FrameLayout.draw(FrameLayout.java:472) 
E/AndroidRuntime( 708): at android.support.v4.widget.NestedScrollView.draw(NestedScrollView.java:1679) 
E/AndroidRuntime( 708): at android.view.View.getDisplayList(View.java:14402) 
E/AndroidRuntime( 708): at android.view.View.getDisplayList(View.java:14444) 
E/AndroidRuntime( 708): at android.view.View.draw(View.java:15222) 
E/AndroidRuntime( 708): at android.view.ViewGroup.drawChild(ViewGroup.java:3340) 
E/AndroidRuntime( 708): at android.support.design.widget.CoordinatorLayout.drawChild(CoordinatorLayout.java:1040) 
E/AndroidRuntime( 708): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3176) 
E/AndroidRuntime( 708): at android.view.View.getDisplayList(View.java:14397) 
E/AndroidRuntime( 708): at android.view.View.getDisplayList(View.java:14444) 
E/AndroidRuntime( 708): at android.view.View.draw(View.java:15222) 
E/AndroidRuntime( 708): at android.view.ViewGroup.drawChild(ViewGroup.java:3340) 
E/AndroidRuntime( 708): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3176) 
E/AndroidRuntime( 708): at android.view.View.draw(View.java:15511) 
E/AndroidRuntime( 708): at android.widget.FrameLayout.draw(FrameLayout.java:472) 
E/AndroidRuntime( 708): at android.view.View.getDisplayList(View.java:14402) 
E/AndroidRuntime( 708): at android.view.View.getDisplayList(View.java:14444) 
E/AndroidRuntime( 708): at android.view.View.draw(View.java:15222) 
E/AndroidRuntime( 708): at android.view.ViewGroup.drawChild(ViewGroup.java:3340) 
E/AndroidRuntime( 708): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3176) 
E/AndroidRuntime( 708): at android.view.View.getDisplayList(View.java:14397) 
E/AndroidRuntime( 708): at android.view.View.getDisplayList(View.java:14444) 
E/AndroidRuntime( 708): at android.view.View.draw(View.java:15222) 
E/AndroidRuntime( 708): at android.view.ViewGroup.drawChild(ViewGroup.java:3340) 
E/AndroidRuntime( 708): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3176) 
E/AndroidRuntime( 708): at android.view.View.getDisplayList(View.java:14397) 
E/AndroidRuntime( 708): at android.view.View.getDisplayList(View.java:14444) 
E/AndroidRuntime( 708): at android.view.View.draw(View.java:15222) 
E/AndroidRuntime( 708): at android.view.ViewGroup.drawChild(ViewGroup.java:3340) 
E/AndroidRuntime( 708): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3176) 
E/AndroidRuntime( 708): at android.view.View.getDisplayList(View.java:14397) 
E/AndroidRuntime( 708): at android.view.View.getDisplayList(View.java:14444) 
E/AndroidRuntime( 708): at android.view.View.draw(View.java:15222) 
E/AndroidRuntime( 708): at android.view.ViewGroup.drawChild(ViewGroup.java:3340) 
E/AndroidRuntime( 708): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3176) 
E/AndroidRuntime( 708): at android.view.View.draw(View.java:15511) 
E/AndroidRuntime( 708): at android.widget.FrameLayout.draw(FrameLayout.java:472) 
E/AndroidRuntime( 708): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2623) 
E/AndroidRuntime( 708): at android.view.View.getDisplayList(View.java:14402) 
E/AndroidRuntime( 708): at android.view.View.getDisplayList(View.java:14444) 
E/AndroidRuntime( 708): at android.view.HardwareRenderer$GlRenderer.buildDisplayList(HardwareRenderer.java:1597) 
E/AndroidRuntime( 708): at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:1469) 
E/AndroidRuntime( 708): at android.view.ViewRootImpl.draw(ViewRootImpl.java:2800) 
E/AndroidRuntime( 708): at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2666) 
E/AndroidRuntime( 708): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2234) 
E/AndroidRuntime( 708): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1267) 
E/AndroidRuntime( 708): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6638) 
E/AndroidRuntime( 708): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:813) 
E/AndroidRuntime( 708): at android.view.Choreogra 

Meine Aktivität:

public class PaymentActivity extends AppCompatActivity { 
    public static final String XTRA_DEVICENAME = ""; 
    private static String deviceName; 
    private ItemDto deviceDto; 
    private Activity mActivity; 

    private OkHttpClient okclient; 

    //Views 
    private RelativeLayout infoLayout; 
    private TextView deviceOwner; 
    private TextView devicePrice; 
    private TextView deviceInfo; 
    private TextView payDurationTitle; 
    private TextView payPriceTitle; 
    private TextView payDurationText; 
    private TextView payPriceText; 
    private Button upBtn; 
    private Button downBtn; 
    private TextView incText; 
    private View incrDivider; 
    private FloatingActionButton fab; 
    private ProgressBar devInfoProgress; 
    private LinearLayout incrBtnView; 

    private int mIterVal = 1; 

    private Constants.ColorInfo colorTheme = Constants.ColorInfo.GREY; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mActivity = this; 

     Intent intent = getIntent(); 
     deviceName = intent.getStringExtra(XTRA_DEVICENAME); 

     setTheme(ColorUtil.getThemeForDevice(deviceName)); 
     colorTheme = ColorUtil.getColorTheme(deviceName); 
     setContentView(R.layout.act_payment); 

     final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       onBackPressed(); 
      } 
     }); 

     okclient = new OkHttpClient(); 

     CollapsingToolbarLayout collapsingToolbar = 
       (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar); 
     collapsingToolbar.setTitle(deviceName.toUpperCase()); 

     okclient = new OkHttpClient(); 

     final ImageView imageView = (ImageView) findViewById(R.id.backdrop); 
     // todo get better default image 
     final String paymentIconUrl = "http://xxx/" + deviceName + "_lg.png"; 

     Glide.with(mActivity) 
       .load(paymentIconUrl) 
       .diskCacheStrategy(DiskCacheStrategy.ALL) 
       .placeholder(R.drawable.ic_logo_allwhite) 
       .error(R.drawable.ic_logo_allwhite) 
       .into(imageView); 

     setupViews(); 
     new GetItemInfoTask().execute(deviceName); 
    } 

    private void setupViews() { 
     infoLayout = (RelativeLayout) findViewById(R.id.device_info_layout); 
     infoLayout.setBackgroundColor(getResources().getColor(ColorUtil.getDeviceColor(deviceName, ColorUtil.COLOR_SECONDARY))); 

     incrBtnView = (LinearLayout) findViewById(R.id.incr_btn_view); 
     deviceOwner = (TextView) findViewById(R.id.info_owner); 
     devicePrice = (TextView) findViewById(R.id.info_price); 
     deviceInfo = (TextView) findViewById(R.id.info_max_amount); 
     payDurationTitle = (TextView) findViewById(R.id.paidDurationTitle); 
     payPriceTitle = (TextView) findViewById(R.id.paidAmountTitle); 
     payDurationText = (TextView) findViewById(R.id.paidDurationText); 
     payPriceText = (TextView) findViewById(R.id.paidAmountText); 

     devInfoProgress = (ProgressBar) findViewById(R.id.devinfo_progress); 
     devInfoProgress.getIndeterminateDrawable().setColorFilter(getResources().getColor(R.color.card_white), android.graphics.PorterDuff.Mode.MULTIPLY); 

     Drawable tmpDrawable = ColorUtil.getTintedDrawable(mActivity, R.drawable.ic_attach_money, colorTheme.getSecondary()); 
     payPriceTitle.setCompoundDrawablesWithIntrinsicBounds(tmpDrawable, null, null, null); 

     Drawable tmpDrawable2 = ColorUtil.getTintedDrawable(mActivity, R.drawable.ic_clock, colorTheme.getSecondary()); 
     payDurationTitle.setCompoundDrawablesWithIntrinsicBounds(tmpDrawable2, null, null, null); 

     upBtn = (Button) findViewById(R.id.pay_inc_up_btn); 
     downBtn = (Button) findViewById(R.id.pay_inc_down_btn); 
     incText = (TextView) findViewById(R.id.pay_inc_text); 
     incrDivider = (View) findViewById(R.id.iter_divider); 

     upBtn.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       ... 
      } 
     }); 
     downBtn.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       ... 
      } 
     }); 

     upBtn.setBackground(mActivity.getResources().getDrawable(colorTheme.getSelectorId())); 
     downBtn.setBackground(mActivity.getResources().getDrawable(colorTheme.getSelectorId())); 

     fab = (FloatingActionButton) findViewById((R.id.pay_fab_btn)); 
     //TODO - manually coloring FAB, should do with color state list 
     fab.setEnabled(false); 
     fab.setBackgroundTintList(ColorStateList.valueOf(getResources().getColor(R.color.grey_300))); 

     fab.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       fab.setBackgroundTintList(ColorStateList.valueOf(getResources().getColor(R.color.card_white))); 
       ... 

      } 
     }); 

    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_payment, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 


    private class GetItemInfoTask extends AsyncTask<String, Void, String> { 
     @Override 
     protected String doInBackground(String... params) { 
      ... 

      return null; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
     ... 

     } 

     @Override 
     protected void onPreExecute() { 
      devInfoProgress.setVisibility(View.VISIBLE); 
     } 

     @Override 
     protected void onProgressUpdate(Void... values) { 

     } 
    } 

} 

Mein Layout.xml:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:card_view="http://schemas.android.com/tools" 
    android:id="@+id/main_content" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appbar" 
     android:layout_width="match_parent" 
     android:layout_height="@dimen/payments_backdrop_height" 
     android:fitsSystemWindows="true" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

     <android.support.design.widget.CollapsingToolbarLayout 
      android:id="@+id/collapsing_toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:fitsSystemWindows="true" 
      app:contentScrim="?attr/colorPrimary" 
      app:expandedTitleMarginEnd="64dp" 
      app:expandedTitleMarginStart="48dp" 
      app:layout_scrollFlags="scroll|exitUntilCollapsed"> 

      <ImageView 
       android:id="@+id/backdrop" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:fitsSystemWindows="true" 
       android:scaleType="centerCrop" 
       android:transitionName="device_img" 
       app:layout_collapseMode="parallax" /> 

      <android.support.v7.widget.Toolbar 
       android:id="@+id/toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       app:layout_collapseMode="pin" 
       app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 
     </android.support.design.widget.CollapsingToolbarLayout> 

    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.widget.NestedScrollView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="@color/grey_200" 
      android:orientation="vertical"> 

      <RelativeLayout 
       android:id="@+id/device_info_layout" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="vertical"> 

       <TextView 
        android:id="@+id/info_owner" 
        style="@style/DeviceInfo" /> 

       <TextView 
        android:id="@+id/info_price" 
        style="@style/DeviceInfo" 
        android:layout_below="@+id/info_owner"/> 

       <TextView 
        android:id="@+id/info_max_amount" 
        style="@style/DeviceInfo" 
        android:layout_below="@+id/info_price" 
        android:layout_marginBottom="@dimen/grid1" /> 

       <ProgressBar 
        android:id="@+id/devinfo_progress" 
        style="?android:attr/progressBarStyleLarge" 
        android:layout_width="@dimen/rythm48" 
        android:layout_height="@dimen/rythm48" 
        android:layout_toRightOf="@+id/info_price" 
        android:layout_marginRight="@dimen/grid5" 
        android:layout_marginTop="@dimen/grid1" 
        android:visibility="gone" /> 

      </RelativeLayout> 

      <android.support.v7.widget.CardView 
       android:id="@+id/device_info_card" 
       style="@style/CardView" 
       card_view:cardCornerRadius="4dp" 
       card_view:cardElevation="6dp"> 

       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="vertical"> 

        <TextView 
         android:id="@+id/launch_title" 
         style="@style/CardTitle" 
         android:text="Current Amounts" /> 

        <LinearLayout 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:layout_below="@+id/confirm_text" 
         android:layout_marginBottom="@dimen/grid5" 
         android:orientation="horizontal" 
         android:weightSum="2"> 

         <LinearLayout 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:layout_weight="1" 
          android:gravity="center" 
          android:orientation="vertical"> 

          <TextView 
           android:id="@+id/paidAmountTitle" 
           style="@style/TextAppearance.AppCompat.Medium" 
           android:layout_width="wrap_content" 
           android:layout_height="wrap_content" 
           android:drawableLeft="@drawable/ic_dollar" 
           android:gravity="center" 
           android:text="@string/paid_amount_title" /> 

          <TextView 
           android:id="@+id/paidAmountText" 
           style="@style/TextAppearance.AppCompat.Headline" 
           android:layout_width="wrap_content" 
           android:layout_height="wrap_content" /> 

         </LinearLayout> 

         <LinearLayout 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:layout_weight="1" 
          android:gravity="center" 
          android:orientation="vertical"> 

          <TextView 
           android:id="@+id/paidDurationTitle" 
           style="@style/TextAppearance.AppCompat.Medium" 
           android:layout_width="wrap_content" 
           android:layout_height="wrap_content" 
           android:drawableLeft="@drawable/ic_clock" 
           android:gravity="center" 
           android:text="@string/paid_duration_title" /> 

          <TextView 
           android:id="@+id/paidDurationText" 
           style="@style/TextAppearance.AppCompat.Headline" 
           android:layout_width="wrap_content" 
           android:layout_height="wrap_content" /> 

         </LinearLayout> 
        </LinearLayout> 

        <View 
         android:id="@+id/iter_divider" 
         android:layout_width="wrap_content" 
         android:layout_height="1dp" 
         android:layout_marginBottom="@dimen/grid2" 
         android:layout_marginTop="@dimen/grid_5" 
         android:background="@color/grey_400" 
         android:visibility="gone"/> 

        <LinearLayout 
         android:id="@+id/incr_btn_view" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:layout_marginBottom="@dimen/grid5" 
         android:layout_marginLeft="@dimen/grid4" 
         android:layout_marginRight="@dimen/grid4" 
         android:orientation="horizontal" 
         android:gravity="center" 
         android:weightSum="3" 
         android:visibility="gone"> 

         <Button 
          android:id="@+id/pay_inc_down_btn" 
          style="@style/InfoButton" 
          android:layout_width="@dimen/rythm48" 
          android:layout_height="@dimen/rythm48" 
          android:text="-" 
          android:textSize="32sp" 
          android:layout_weight="1"/> 

         <TextView 
          android:id="@+id/pay_inc_text" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:text="1" 
          android:gravity="center" 
          android:layout_marginRight="@dimen/grid2" 
          android:layout_marginLeft="@dimen/grid2" 
          android:textSize="24sp" 
          android:layout_weight="1"/> 

         <Button 
          android:id="@+id/pay_inc_up_btn" 
          style="@style/InfoButton" 
          android:layout_width="@dimen/rythm48" 
          android:layout_height="@dimen/rythm48" 
          android:text="+" 
          android:textSize="32sp" 
          android:layout_weight="1"/> 

        </LinearLayout> 
       </LinearLayout> 

      </android.support.v7.widget.CardView> 

      <android.support.v7.widget.CardView 
       android:id="@+id/provider_card_view" 
       style="@style/CardView" 
       card_view:cardCornerRadius="4dp" 
       card_view:cardElevation="6dp"> 

       <fragment 
        android:id="@+id/provider_fragment" 
        android:name="com.cleartoken.pay.ui.frag.ProviderFragment" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" /> 

      </android.support.v7.widget.CardView> 

      <android.support.v7.widget.CardView 
       style="@style/CardView" 
       card_view:cardCornerRadius="4dp" 
       card_view:cardElevation="6dp"> 

       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="vertical"> 

        <TextView 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:text="Info" 
         android:textAppearance="@style/TextAppearance.AppCompat.Title" /> 

        <TextView 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:text="@string/long_text" /> 
       </LinearLayout> 
      </android.support.v7.widget.CardView> 
     </LinearLayout> 
    </android.support.v4.widget.NestedScrollView> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/pay_fab_btn" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="@dimen/grid2" 
     android:clickable="true" 
     android:src="@drawable/ic_fab_enabled" 
     app:borderWidth="0dp" 
     app:layout_anchor="@id/device_info_card" 
     app:layout_anchorGravity="bottom|right|end" /> 

</android.support.design.widget.CoordinatorLayout> 

Der CardView Stil .xml Schnipsel:

<style name="CardView"> 
    <item name="android:layout_width">match_parent</item> 
    <item name="android:layout_height">wrap_content</item> 
    <item name="android:layout_gravity">center</item> 
    <item name="android:layout_margin">@dimen/grid1</item> 
</style> 

Hinweis:

Ich benutze diese gleiche Kartenart universell. Auf Act # 1 funktioniert das * (großer Unterschied darin, dass Act # 1 NICHT das Coordinator Layout hat).

Meine Karte XML sieht aus wie dieses universell:

<android.support.v7.widget.CardView 
      android:id="@+id/device_info_card" 
      style="@style/CardView" 
      card_view:cardCornerRadius="4dp" 
      card_view:cardElevation="6dp"> 
+0

Wenn Sie die Ränder von Ihren CardViews entfernen, erhalten Sie immer noch den Absturz? – Marko

+0

Entfernen der Ränder hat nicht geholfen - ich benutze tatsächlich einen Stil, so dass es einfach ist, dies an einer Stelle hinzuzufügen/zu entfernen. Ich habe meinen Code aktualisiert (und ihn hier aufgenommen), um sicherzustellen, dass ich CardView universell einsetze. Das Entfernen des Randattributs von ihm macht keinen Unterschied. Was merkwürdig ist, ist, dass dieser Kartenstil auf der vorherigen Aktivität funktioniert. Dang. – Booger

+0

Ich werde den Code nochmal durchkämmen - auch, es ist merkwürdig, dass dies nur auf 4.4 Geräten (wenn es wirklich einen schlechten Rand oder Polsterung gab - es würde überall abstürzen, würde ich denken) ... danke für Hilfe! – Booger

Antwort

2

Für zukünftige Menschen, fand ich mein Problem - die Art ich vom Framework verwendet wurde, hatte den gleichen Namen wie eine andere Art wurde mit (CardView).

Ich habe den Namen in meinen Stilen geändert.XML-Datei zu etwas anderem (MyCardView) und der Absturz ging weg.

Rückblickend verursachte ich eine Regression, indem ich diesen gebräuchlichen Namen verwendete.

1

Nach CardView's Doc:

Vor L, fügt CardView Polsterung dessen Inhalt und zieht Schatten diesem Bereich. Dieser Auffüllbetrag entspricht maxCardElevation + (1 - cos45) * cornerRadius an den Seiten und maxCardElevation * 1.5 + (1 - cos45) * cornerRadius oben und unten.

Da Padding verwendet wird, um Inhalt für Schatten auszugleichen, können Sie in CardView kein Padding festlegen. Stattdessen können Sie die Inhaltsauffüllattribute in XML oder setContentPadding (int, int, int, int) im Code verwenden, um den Abstand zwischen den Kanten der Karte und den untergeordneten Elementen von CardView festzulegen.

Überprüfen Sie alle wrap-parent Werte. Ich denke, einige in Ihrem Code ändert dieses Auffüllen Verhalten verursacht mCornerRadius < 0 in buildShadowCorners Methode in RoundRectDrawableWithShadow.java.

Diese Links vielleicht helfen:

width and height must be > 0 error

Android CardView padding and minHeight

CardView inside RecyclerView has extra margins

+0

Vielen Dank, ich habe alle meine Layoutattribute überprüft und sie haben nichts Seltsames (wrap_content überall) jede zusätzliche Auffüllung in XML (doppelte Überprüfung jetzt Java) Vielen Dank auch für die SO-Links! – Booger

4

Es ist eine Sache, die in Ihrem Stack Fehler mir auffällt. Es scheint in 4.4 und unten, Ihre App versucht, eine GUI größer als die tatsächliche Telefonbreite zu zeichnen. Der RadialGradient-Fehler macht für mich keinen Sinn, da er größer als die Bildschirmgröße und nicht kleiner als Null sein soll.

/** Create a shader that draws a radial gradient given the center and radius. 
    @param centerX The x-coordinate of the center of the radius 
    @param centerY The y-coordinate of the center of the radius 
    @param radius Must be positive. The radius of the circle for this gradient. 
    @param colors The colors to be distributed between the center and edge of the circle 
    @param stops May be <code>null</code>. Valid values are between <code>0.0f</code> and 
        <code>1.0f</code>. The relative position of each corresponding color in 
        the colors array. If <code>null</code>, colors are distributed evenly 
        between the center and edge of the circle. 
    @param tileMode The Shader tiling mode 
*/ 
public RadialGradient(float centerX, float centerY, float radius, 
      @NonNull int colors[], @Nullable float stops[], @NonNull TileMode tileMode) { 
    if (radius <= 0) { 
     throw new IllegalArgumentException("radius must be > 0"); 
    } 
    if (colors.length < 2) { 
     throw new IllegalArgumentException("needs >= 2 number of colors"); 
    } 
    if (stops != null && colors.length != stops.length) { 
     throw new IllegalArgumentException("color and position arrays must be of equal length"); 
    } 
    mType = TYPE_COLORS_AND_POSITIONS; 
    mX = centerX; 
    mY = centerY; 
    mRadius = radius; 
    mColors = colors; 
    mPositions = stops; 
    mTileMode = tileMode; 
    init(nativeCreate1(centerX, centerY, radius, colors, stops, tileMode.nativeInt)); 
} 

Das ist ein Ausschnitt aus der Klasse radialgradient. Eine Möglichkeit, den Code zum Ausführen zu zwingen, wäre, die Klasse radiantgradient einfach zu bearbeiten, wenn Sie dies tun können (Android Studio hat eine Möglichkeit, dies zu tun).

Meine Lösung für dieses Problem wäre, zuerst Ihre XML-Datei zu durchlaufen und Codezeilen zu entfernen, die nicht üblich sind/macht keinen Sinn. Wie:

android:fitsSystemWindows="true" 

fitSystemWindow Multiple Calls

Auch eine andere Sache, die Ihre vermeiden soll, ist die weightsum und Gewicht Tags für Linear-Layout. Und versuchen Sie, Ihr Eltern-Widget zu einem RelativeLayout zu machen.

EDIT:

Nachdem er eine Weile zu denken (nur 2 Minuten) wurde mir klar, der Fehler nur aufgrund der styles.xml Umsetzung sein könnte. Bist du sicher, dass du alle Ordner kopiert hast, die du im Git Repo gesehen hast?

Manchmal, wenn diese Fehler auftreten, ist es in der Regel wegen der Werte-v21 Ordner nicht mit der entsprechenden styles.xml hinzugefügt worden.

Wenn Sie also nicht den Ordner "values-v21" haben, tun Sie Folgendes: - Erstellen Sie einen Ordner "values-v21" unter dem Ordner "res". - Erstellen Sie dann einen Ordner styles.xml im Ordner values-v21, und fügen Sie diesen Code hinzu.

<resources> 

<style name="Theme.DesignDemo" parent="Base.Theme.DesignDemo"> 
    <item name="android:windowDrawsSystemBarBackgrounds">true</item> 
    <item name="android:statusBarColor">@android:color/transparent</item> 
</style> 

+0

Ich entfernte alle "android: fitsSystemWindows =" true ", aber dies hatte keine Wirkung - diese Attribute werden von" Cheesesquare "kopiert Also habe ich das gewichtete lineare Layout entfernt (Sichtbarkeit = "weg, vielleicht muss ich es wirklich entfernen) - ohne Wirkung. Ich werde es weiter versuchen und vielen Dank für deine Hilfe." – Booger

+0

@Booger Hey, überprüfe, ob meine Bearbeitung dein Problem gelöst hat, du musst vielleicht ein separates Ordnersystem für 4.4.x und niedriger oder so etwas erstellen. – Tobidae

+0

Ich schätze Ihren zusätzlichen Vorschlag sehr, aber das hat nicht geholfen (ich habe bereits einen V21-Ordner für eine themes.xml-Datei hinzugefügt und die neue styles.xml hinzugefügt). Ich werde die Cheesesquare-Implementierung überprüfen, da ich nicht alle Implementierungen von Stilen und Designs kopiert habe. Das ist ein großartiger Vorschlag. – Booger

0

Ich hatte das gleiche Problem und ich fand, dass ich app:cardCornerRadius="0dp" auf Cardview-Attribute hatte. Als ich es entfernte, löste sich mein Problem. Hoffe, das hilft

0

I Adater mit der Artikelhauptbehälter als cardview haben und ich hatte die cardCornerRadius auf 0:

app:cardCornerRadius="0dp" 

ich es geändert:

app:cardCornerRadius="1dp" 

Es funktionierte perfekt jetzt.

Ich auch mit und ohne android:fitsSystemWindows="true" getestet, tat es NICHT ändern Sie alles für mich.

Verwandte Themen