添加 CheckBox 导致膨胀异常

Adding CheckBox causes Inflate Exception

我在 xml 文件中为我的对话框片段定义了一个复选框。执行代码时,它会导致 Inflate Exception。我不知道代码有什么问题。如果复选框被删除,一切正常。如果我也使用单选按钮,也会出现同样的异常。

这是我的 xml 文件。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#6688AA">

<LinearLayout
    android:id="@+id/linearLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:orientation="horizontal"
    android:padding="1dp"
    android:weightSum="4">
    <!--<TextView-->
    <!--android:layout_width="wrap_content"-->
    <!--android:layout_height="wrap_content"-->
    <!--android:text="Sample Photo"-->
    <!--android:layout_gravity="center"-->
    <!--android:textSize="18sp"/>-->
    <ImageView
        android:layout_width="0dp"
        android:layout_height="100dp"
        android:layout_weight="1"
        android:src="@drawable/correct_face" />

    <ImageView
        android:layout_width="0dp"
        android:layout_height="100dp"
        android:layout_weight="1"
        android:src="@drawable/error_face_1" />

    <ImageView
        android:layout_width="0dp"
        android:layout_height="100dp"
        android:layout_weight="1"
        android:src="@drawable/error_face_2" />


    <ImageView
        android:layout_width="0dp"
        android:layout_height="100dp"
        android:layout_weight="1"
        android:src="@drawable/error_face_3" />

</LinearLayout>

<TextView
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/linearLayout"
    android:layout_centerHorizontal="true"
    android:layout_gravity="center_horizontal"
    android:gravity="center"
    android:text="Upload Your Photo"
    android:textSize="40sp" />

<Button
    android:id="@+id/button_camera"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignEnd="@+id/textView"
    android:layout_alignRight="@+id/textView"
    android:layout_alignTop="@+id/button_gallery"
    android:background="#917528"
    android:drawableLeft="@android:drawable/ic_menu_camera"
    android:text="Camera" />

<Button
    android:id="@+id/button_gallery"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/textView"
    android:layout_alignStart="@+id/textView"
    android:layout_below="@+id/textView"
    android:background="#917528"
    android:drawableLeft="@android:drawable/ic_menu_gallery"
    android:text="Gallery" />

<ImageView
    android:id="@+id/uploadImage"
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:layout_below="@+id/button_camera"
    android:layout_centerHorizontal="true" />

<TextView
    android:id="@+id/crop_hint"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/uploadImage"
    android:layout_centerHorizontal="true"
    android:text="Touch the image to crop"
    android:textStyle="italic"
    android:visibility="visible" />

<CheckBox
    android:id="@+id/checkbox_default"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/button_gallery"
    android:layout_below="@+id/crop_hint"
    android:text="Checkbox"
     />

<HorizontalScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:visibility="gone">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <ImageView
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:src="@drawable/sample" />

        <ImageView
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:src="@drawable/sample" />

        <ImageView
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:src="@drawable/sample" />

        <ImageView
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:src="@drawable/sample" />
    </LinearLayout>
</HorizontalScrollView>

<RelativeLayout
    android:id="@+id/container_CropImageView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#fff"
    android:visibility="gone">

    <com.theartofdev.edmodo.cropper.CropImageView xmlns:custom="http://schemas.android.com/apk/res-auto"
        android:id="@+id/CropImageView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        custom:fixAspectRatio="true"
        custom:guidelines="onTouch"
        custom:scaleType="fitCenter" />

    <Button
        android:id="@+id/button_crop_save"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:text="Save" />

    <Button
        android:id="@+id/button_crop_cancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:text="Cancel" />


</RelativeLayout>

</RelativeLayout>

DialogFragment 文件

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.wizard_upload_photo, container, false);
    Button cameraButton = (Button) rootView.findViewById(R.id.button_camera);
    Button galleryButton = (Button) rootView.findViewById(R.id.button_gallery);
    uploadImage = (ImageView) rootView.findViewById(R.id.uploadImage);
    cropHint = (TextView) rootView.findViewById(R.id.crop_hint);
    mDefault = (CheckBox) rootView.findViewById(R.id.checkbox_default);
    cameraButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            cameraImage = null;
            try {
                cameraImage = Utils.createCameraImageFile();
            } catch (IOException ex) {
                Log.d("DEBUG", "onClick: Camera file generate exception" + ex);
                Utils.showAlertDialog(getActivity(), "Error Starting the Camera Please Try Again");
            }
            // Continue only if the File was successfully created
            if (cameraImage != null) {
                cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(cameraImage));
                startActivityForResult(cameraIntent, CAPTURE_IMAGE_FROM_CAMERA);
            }
        }
    });
    galleryButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent galleryIntent = new Intent();
            galleryIntent.setType("image/*");
            galleryIntent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(galleryIntent, "Select Picture"), CAPTURE_IMAGE_FROM_GALLERY);
        }
    });


    cropImageContainer = (RelativeLayout) rootView.findViewById(R.id.container_CropImageView);
    cropImageView = (CropImageView) rootView.findViewById(R.id.CropImageView);
    mCropSave = (Button) rootView.findViewById(R.id.button_crop_save);
    mCropCancel = (Button) rootView.findViewById(R.id.button_crop_cancel);

    mDefault.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            Toast.makeText(getContext(),"Default",Toast.LENGTH_LONG).show();
        }
    });

    return rootView;
}

Logcat 留言

com.realeffecx.styleu E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.realeffecx.styleu, PID: 23411
        android.view.InflateException: Binary XML file line #98: Error inflating class android.widget.CheckBox
        at android.view.LayoutInflater.createView(LayoutInflater.java:626)
        at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
        at android.view.LayoutInflater.onCreateView(LayoutInflater.java:675)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:700)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
        at com.realeffecx.styleu.fragments.wizard_UploadPhoto.onCreateView(wizard_UploadPhoto.java:107)
        at android.support.v4.app.Fragment.performCreateView(Fragment.java:1988)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1268)
        at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:754)
        at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1614)
        at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:633)
        at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143)
        at android.support.v4.view.ViewPager.populate(ViewPager.java:1177)
        at android.support.v4.view.ViewPager.populate(ViewPager.java:1025)
        at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1545)
        at android.view.View.measure(View.java:17495)
        at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719)
        at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455)
        at android.view.View.measure(View.java:17495)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5363)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
        at android.view.View.measure(View.java:17495)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5363)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1410)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
        at android.view.View.measure(View.java:17495)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5363)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2548)
        at android.view.View.measure(View.java:17495)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2285)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1396)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1595)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1254)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6637)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:814)
        at android.view.Choreographer.doCallbacks(Choreographer.java:614)
        at android.view.Choreographer.doFrame(Choreographer.java:584)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:800)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:146)
        at android.app.ActivityThread.main(ActivityThread.java:5602)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
        at dalvik.system.NativeStart.main(Native Method)
        Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.constructNative(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at android.view.LayoutInflater.createView(LayoutInflater.java:600)
        at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
        at android.view.LayoutInflater.onCreateView(LayoutInflater.java:675)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:700)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
        at com.realeffecx.styleu.fragments.wizard_UploadPhoto.onCreateView(wizard_UploadPhoto.java:107)
        at android.support.v4.app.Fragment.performCreateView(Fragment.java:1988)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1268)
        at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:754)
        at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1614)
        at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:633)
        at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143)
        at android.support.v4.view.ViewPager.populate(ViewPager.java:1177)
        at android.support.v4.view.ViewPager.populate(ViewPager.java:1025)
        at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1545)
        at android.view.View.measure(View.java:17495)
        at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719)
        at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455)
        at android.view.View.measure(View.java:17495)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5363)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
        at android.view.View.measure(View.java:17495)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5363)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1410)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
        at android.view.View.measure(View.java:17495)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5363)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2548)
        at android.view.View.measure(View.java:17495)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2285)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1396)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1595)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1254)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6637)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:814)
        at android.view.Choreographer.doCallbacks(Choreographer.java:614)
        at android.view.Choreographer.doFrame(Choreographer.java:584)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:800)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:146)
        at android.app.ActivityThread.main(ActivityThread.java:5602)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
        at dalvik.system.NativeStart.main(Native Method)
        Cause

这几乎是教科书上的东西,所以我不知道我做错了什么。 请帮我。 提前致谢

根据上面的布局 xml 代码,您在相对布局中的第一个视图似乎是错误的(假设您已按原样从文件中粘贴)。 android:layout_below="@+id/linearLayout" 应该被删除。 我想知道你怎么编译?

<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/linearLayout"
android:layout_centerHorizontal="true"
android:layout_gravity="center_horizontal"
android:gravity="center"
android:text="Upload Your Photo"
android:textSize="40sp" />

检查一下。

终于解决了这个问题。 Inflate 异常是由 InvokeTargetException 引起的,而 InvokeTargetException 又是由 ResourceNotFoundException 引起的。错误在 android 支持库 23.2 中。我不清楚为什么,但是 google 已经重命名并从他们的支持库中删除了一些 xml 文件,并且使用矢量而不是 PNG。可以简单地通过恢复到以前的库 (23.1.1) 或分别使用 AppCombatRadioButton 或 AppCombatCheckBox 代替 RadioButton 和 CheckBox 来解决该错误。如果其他人遇到同样的问题,您可以查看在 google 代码 https://code.google.com/p/android/issues/detail?id=202144

中打开的这个问题

在我的例子中,这是一个无效的属性:

android:textSize="?android:attr/textAppearanceSmall"

删除后一切正常。我想这个错误应该更具解释性。