Binary XML file line #20 in com.example.nearmedemo:layout/fragment_home

возникла следующая проблема:

Binary XML file line #20 in com.example.nearmedemo:layout/fragment_home: 
Binary XML file line #20 in com.example.nearmedemo:layout/fragment_home: 
Error inflating class com.google.android.material.textfield.TextInputLayout
Caused by: android.view.InflateException: 
Binary XML file line #20 in com.example.nearmedemo:layout/fragment_home: 
Error inflating class com.google.android.material.textfield.TextInputLayout

Часть из HomeFragment.java:

   public HomeFragment() {
    }


    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        binding = FragmentHomeBinding.inflate(inflater, container, false);
        appPermissions = new AppPermissions();
        firebaseAuth = FirebaseAuth.getInstance();
        loadingDialog = new LoadingDialog(requireActivity());
        retrofitAPI = RetrofitClient.getRetrofitClient().create(RetrofitAPI.class);
        googlePlaceModelList = new ArrayList<>();
        userSavedLocationId = new ArrayList<>();
        locationReference = FirebaseDatabase.getInstance().getReference("Places");
        userLocationReference = FirebaseDatabase.getInstance().getReference("Users")
                .child(firebaseAuth.getUid()).child("Saved Locations");

        binding.btnMapType.setOnClickListener(view -> {
            PopupMenu popupMenu = new PopupMenu(requireContext(), view);
            popupMenu.getMenuInflater().inflate(R.menu.map_type_menu, popupMenu.getMenu());


            popupMenu.setOnMenuItemClickListener(item -> {
                switch (item.getItemId()) {
                    case R.id.btnNormal:
                        mGoogleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                        break;

                    case R.id.btnSatellite:
                        mGoogleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
                        break;

                    case R.id.btnTerrain:
                        mGoogleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
                        break;
                }
                return true;
            });

            popupMenu.show();
        });

fragment_home.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Fragments.HomeFragment">

    <fragment
        android:id="@+id/homeMap"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <androidx.coordinatorlayout.widget.CoordinatorLayout
        android:id="@+id/coordinate"
        android:layout_width="match_parent"
        android:layout_height="120dp">

        <com.google.android.material.textfield.TextInputLayout
            style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginHorizontal="40dp"
            android:elevation="10dp"
            app:boxBackgroundColor="@color/white"
            app:boxCornerRadiusBottomEnd="25dp"
            app:boxCornerRadiusBottomStart="25dp"
            app:boxCornerRadiusTopEnd="25dp"
            app:boxCornerRadiusTopStart="25dp"
            app:boxStrokeColor="@color/white"
            app:boxStrokeWidth="0dp"
            app:endIconMode="clear_text"
            app:hintEnabled="false"
            app:layout_anchor="@id/view"
            app:layout_anchorGravity="bottom|center">

            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/edtPlaceName"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:drawableStart="@drawable/ic_location"
                android:drawablePadding="10dp"
                android:drawableTint="@color/primaryColor"
                android:hint="Search Place"
                android:inputType="text"
                android:maxLines="1"
                android:textColorHint="@color/itemTextColor" />
        </com.google.android.material.textfield.TextInputLayout>


        <View
            android:id="@+id/view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginBottom="30dp"
            android:background="@drawable/map_background"
            android:elevation="5dp" />

    </androidx.coordinatorlayout.widget.CoordinatorLayout>


    <HorizontalScrollView
        android:id="@+id/placesList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/coordinate"
        android:scrollbars="none">

        <com.google.android.material.chip.ChipGroup
            android:id="@+id/placesGroup"
            style="@style/Widget.MaterialComponents.Chip.Choice"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:singleLine="true"
            app:singleSelection="true" />

    </HorizontalScrollView>


    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/btnMapType"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/placesList"
        android:layout_alignParentEnd="true"
        android:layout_margin="15dp"
        android:src="@drawable/ic_map_type"
        app:backgroundTint="@color/white"
        app:fabCustomSize="40dp"
        app:tint="@color/primaryColor" />

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/enableTraffic"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/btnMapType"
        android:layout_alignParentEnd="true"
        android:layout_marginEnd="15dp"
        android:src="@drawable/ic_traffic"
        app:backgroundTint="@color/white"
        app:fabCustomSize="40dp"
        app:tint="@color/itemTextColor" />

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/currentLocation"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/enableTraffic"
        android:layout_alignParentEnd="true"
        android:layout_margin="15dp"
        android:src="@drawable/ic_my_location"
        app:backgroundTint="@color/white"
        app:fabCustomSize="50dp"
        app:tint="@color/primaryColor" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/placesRecyclerView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="26dp"
        android:clipToPadding="false"
        android:orientation="horizontal"
        android:paddingLeft="8dp"
        android:paddingRight="8dp"
        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />


</RelativeLayout>

Logcat:

2021-04-30 19:23:05.175 11441-11441/com.example.nearmedemo E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.nearmedemo, PID: 11441
    android.view.InflateException: Binary XML file line #20 in com.example.nearmedemo:layout/fragment_home: Binary XML file line #20 in com.example.nearmedemo:layout/fragment_home: Error inflating class com.google.android.material.textfield.TextInputLayout
    Caused by: android.view.InflateException: Binary XML file line #20 in com.example.nearmedemo:layout/fragment_home: Error inflating class com.google.android.material.textfield.TextInputLayout
    Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
        at android.view.LayoutInflater.createView(LayoutInflater.java:854)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1006)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:1123)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:1126)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:682)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:534)
        at com.example.nearmedemo.databinding.FragmentHomeBinding.inflate(FragmentHomeBinding.java:85)
        at com.example.nearmedemo.Fragments.HomeFragment.onCreateView(HomeFragment.java:115)
        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
        at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
        at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
        at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
        at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2722)
        at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:346)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1188)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
        at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
        at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
        at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
        at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
        at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
        at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:210)
        at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1433)
        at android.app.Activity.performStart(Activity.java:7986)
        at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3677)
        at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
        at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
        at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2267)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:237)
        at android.app.ActivityThread.main(ActivityThread.java:8167)
2021-04-30 19:23:05.175 11441-11441/com.example.nearmedemo E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)
     Caused by: java.lang.IllegalArgumentException: This component requires that you specify a valid TextAppearance attribute. Update your app theme to inherit from Theme.MaterialComponents (or a descendant).
        at com.google.android.material.internal.ThemeEnforcement.checkTextAppearance(ThemeEnforcement.java:187)
        at com.google.android.material.internal.ThemeEnforcement.obtainTintedStyledAttributes(ThemeEnforcement.java:118)
        at com.google.android.material.textfield.TextInputLayout.<init>(TextInputLayout.java:460)
        at com.google.android.material.textfield.TextInputLayout.<init>(TextInputLayout.java:419)
            ... 46 more
2021-04-30 19:23:05.200 11441-11441/com.example.nearmedemo I/Process: Sending signal. PID: 11441 SIG: 9

Что это и с чем оно связано? Прошу помогите...


Ответы (1 шт):

Автор решения: Shams

Вы должны наследовать от темы MaterialComponents чтобы использовать этот view (то есть TextInputLayout).

Для этого создайте новую тему в styles.xml.

<style name="MaterialTheme" parent="Theme.MaterialComponents.Light.DarkActionBar.Bridge">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
</style>

В манифестe в теге application используйте только что созданную тему

<application
    android:theme="@style/MaterialTheme"

Или примените эту тему на конкретную activity. В вашем случае activity который содержит HomeFragment

<activity
    android:theme="@style/AppTheme"
    android:name=".ui.HomeFragmentActivity"/>
→ Ссылка