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


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

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

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

  • просмотрел все мои XML и Java, чтобы убедиться, что я не устанавливаю 0 как любое измерение на любом представлении
  • обеспечено, что я нигде не устанавливаю отступ
  • убрал все поля (просто проверить-не помогло, добавил обратно)
  • удалены все мои методы setBackground () (нет помощи)
  • удалены все атрибуты высоты и радиуса
  • установка Все просмотры карт для видимости.Ушел (по-прежнему вылетает, даже если все просмотры карт не рисуются)

Сбой происходит из класса в 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) {

        }
    }

}

Мой Макет.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>

Стиль CardView.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">
5 14

5 ответов:

Есть одна вещь, которая выделяется для меня в ваших ошибках стека. Похоже, в 4.4 и ниже ваше приложение пытается нарисовать графический интерфейс, превышающий фактическую ширину телефона. Ошибка 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. Чтобы заставить код работать, нужно просто отредактировать класс radialgradient, если вы можете это сделать (в Android Studio есть способ что).

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

android:fitsSystemWindows="true"

FitSystemWindow Множественные Вызовы

Также еще одна вещь, которую вы должны избегать, - это weightsum и весовые метки для линейной компоновки. И попробуйте сделать свой родительский виджет относительным.

Правка:

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

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

Итак, если у вас нет папки values-v21, сделайте это: - Создайте папку values-v21 в папке res. - Тогда создайте стили.папку 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).

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

В ретроспективе я вызывал регрессию, используя это общее имя.

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

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

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

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

Эти ссылки, возможно, помогут:

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

Android CardView padding и minHeight

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

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

У меня дупл с главного элемента контейнера как cardview и у меня cardCornerRadius значение 0 :

app:cardCornerRadius="0dp"

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

app:cardCornerRadius="1dp"

Теперь он работал отлично.

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