CollapsingToolbarLayout crash на 4.4 устройствах (java.lang.IllegalArgumentException: радиус должен быть> 0)

Я реализовал новую панель инструментов «Складная панель». Я использую тот же код, что и демонстрационное приложение примера (Cheesesquare), которое, конечно, отлично работает на всех устройствах. Мне нужна помощь в выяснении того, что я делаю иначе, чем образец (так что мое приложение не будет разбиваться).

Мое приложение отлично работает на устройствах 5.0+, но сбой на старых устройствах (OS 4.4.4) с ошибкой, которую я не могу выделить для своего кода (нет ссылок на классы моего проекта в стеке). Мне кажется настолько странным, что это специфично для устройства (если это была ошибка кода, это повредило бы всюду)

Я (попробовал, но не помог):

  • Просмотрел все мои XML и Java, чтобы убедиться, что я не устанавливаю 0 как любое измерение в любом представлении
  • Убедитесь, что я не устанавливаю прокладку в любом месте
  • Удалены ВСЕ поля (просто чтобы проверить – не помогло, добавлено обратно)
  • Удалены все мои методы setBackground () (без помощи)
  • Удалены все атрибуты высоты и радиуса
  • Установка ALL CardViews на Visibility.GONE (по-прежнему происходит сбой даже при отсутствии всех карт-карт)

Авария происходит из класса в AOSP: https://android.googlesource.com/platform/frameworks/support/+/master/v7/cardview/eclair-mr1/android/support/v7/widget/RoundRectDrawableWithShadow.java

Я вижу, что связанная ошибка открыта (но не назначена): https://code.google.com/p/android/issues/detail?id=157919 Интересно, что эта ошибка указывает, что это не сбой в 4.3, но я не знаю, Это устройство удобно.

Предложения о том, как я могу отладить причину этого сбоя ?:

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 

Моя деятельность:

 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) { } } } 

Мой 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> 1 <?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> 

Флажок CardView style.xml:

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

Заметка:

Я использую этот же стиль карты универсально. По Закону № 1 это работает * (большая разница в том, что в Законе № 1 отсутствует формат координатора).

Моя карточка XML выглядит так универсально:

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

Есть одна вещь, которая выделяется мне в ваших ошибках стека. Кажется, что в 4.4 и ниже ваше приложение пытается нарисовать gui больше, чем фактическая ширина телефона. Ошибка RadialGradient не имеет для меня смысла, поскольку она должна быть больше размера экрана, а не меньше нуля.

 /** 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)); } 

Это фрагмент из класса радиального градиента. Путем принудительного запуска кода было бы просто отредактировать класс radialgradient, если вы можете это сделать (у Android Studio есть способ сделать это).

Мое решение этой проблемы состояло в том, чтобы сначала просмотреть ваш XML-файл и начать удалять строки кода, которые не являются общими / не имеют смысла. Подобно:

 android:fitsSystemWindows="true" 

FitSystemWindow Несколько вызовов

Кроме того, вам следует избегать весов и весов для линейной компоновки. И попробуйте сделать свой родительский виджет RelativeLayout.

РЕДАКТИРОВАТЬ:

Подумав некоторое время (всего 2 минуты), я понял, что ошибка может быть вызвана реализацией styles.xml. Вы уверены, что скопировали все папки, которые вы видели в git repo?

Иногда, когда возникают эти ошибки, обычно это связано с тем, что папка values-v21 не добавлена ​​с соответствующим стилем .xml.

Итак, если у вас нет папки значений-v21, сделайте следующее: -Создайте папку значений-v21 в папке res. -Затем создайте папку styles.xml в папке values-v21 и добавьте этот код.

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

Для будущих людей я нашел свою проблему – стиль, который я использовал, имел то же имя, что и другой стиль, используемый каркасом ( CardView ).

Я изменил имя этого в файле styles.xml на другое ( MyCardView ), и авария исчезла.

Оглядываясь назад, я вызывал регресс, используя это общее имя.

Согласно документу CardView Doc :

До L CardView добавляет дополнение к своему контенту и рисует тени в этой области. Это количество дополнений равно maxCardElevation + (1 – cos45) * cornerRadius по бокам и maxCardElevation * 1.5 + (1 – cos45) * cornerRadius сверху и снизу.

Поскольку прокладка используется для смещения содержимого для теней, вы не можете установить дополнение в CardView. Вместо этого вы можете использовать атрибуты атрибутов контента в XML или setContentPadding (int, int, int, int) в коде, чтобы установить отступы между краями Карты и дочерними элементами CardView.

Проверьте все значения wrap-parent . Я думаю, что некоторые из которых в вашем коде изменяют это поведение дополнений, которое вызвало mCornerRadius < 0 в методе RoundRectDrawableWithShadow.java в RoundRectDrawableWithShadow.java .

Эти ссылки могут помочь:

Ширина и высота должны быть> 0 ошибка

Android CardView padding и minHeight

CardView внутри RecyclerView имеет дополнительные поля

У меня была такая же проблема, и я обнаружил, что у меня есть app:cardCornerRadius="0dp" в атрибутах cardview. Когда я удалил его, моя проблема решена. Надеюсь это поможет

У меня есть adater с основным контейнером item как cardview, и у меня был установлен cardCornerRadius равным 0:

 app:cardCornerRadius="0dp" 

Я изменил его на:

 app:cardCornerRadius="1dp" 

Теперь он отлично справился.

Я также тестировал с и без android:fitsSystemWindows="true" , он ничего не менял для меня.

Intereting Posts