二进制XML文件第26行:解析android.widget.TextView类时出错
二进制XML文件第26行:解析android.widget.TextView类时出错
我正在使用Android Studio,当我在我的布局中使用TextView时,应用程序关闭并显示错误:
android.view.InflateException:二进制XML文件第26行:膨胀类android.widget.TextView at android.view.LayoutInflater.createView(LayoutInflater.java:633) at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55) at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741) at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) at android.view.LayoutInflater.rInflate(LayoutInflater.java:809) at android.view.LayoutInflater.inflate(LayoutInflater.java:504) at android.view.LayoutInflater.inflate(LayoutInflater.java:414) at com.SubFragment.onCreateView(SubFragment.java:20) at android.support.v4.app.Fragment.performCreateView(Fragment.java:1786) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489) at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:486) at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141) at android.support.v4.view.ViewPager.populate(ViewPager.java:1073) at android.support.v4.view.ViewPager.populate(ViewPager.java:919) at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1441) at android.view.View.measure(View.java:17430) at android.widget.LinearLayout.measureVertical(LinearLayout.java:875) at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) at android.view.View.measure(View.java:17430) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) at android.view.View.measure(View.java:17430) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) at android.view.View.measure(View.java:17430) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) at android.view.View.measure(View.java:17430) at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:851) at android.view.View.measure(View.java:17430) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) at android.view.View.measure(View.java:17430) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) at android.view.View.measure(View.java:17430) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) at android.view.View.measure(View.java:17430) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) at android.view.View.measure(View.java:17430) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) at android.view.View.measure(View.java:17430) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) at android.view.View.measure(View.java:17430) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2560) at android.view.View.measure(View.java:17430)
并且在我的Fragment类中:
public class SubFragment extends Fragment{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_homescreen, container, false);// 这里出现错误 return rootView; } }
XML代码:
android:layout_margin="10dp" android:layout_width="match_parent" android:orientation="vertical" android:gravity="center_vertical|center_horizontal" android:layout_height="0dp" android:layout_weight="1" android:background="@drawable/offers"> android:id="@+id/imageButtonOffers" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:src="@drawable/offers_icon" /> android:id="@+id/textViewOffers" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/imageButtonOffers" android:layout_centerHorizontal="true" android:layout_marginTop="5dp" android:gravity="center_horizontal" android:text="Offer" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/white" android:textSize="15sp" />
这段代码在eclipse中工作得很好。只有在我尝试在Studio中工作时才出现问题。
出现这个问题的原因是在xml布局文件中,TextView的属性值设置不正确。
解决方法是将TextView的属性值修改为正确的值。
修改后的xml布局文件如下所示:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="0dp" android:layout_margin="10dp" android:layout_weight="1" android:background="/offers" android:gravity="center_vertical|center_horizontal" android:orientation="vertical" > <ImageView android:id="@+id/imageButtonOffers" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="/offers_icon" /> <TextView android:id="@+id/textViewOffers" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:gravity="center_horizontal" android:text="Offer" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/white" android:textSize="15sp" /> </LinearLayout>
通过修改属性值,可以解决这个问题。
在Android开发中,有时候会遇到"Binary XML file line #26: Error inflating class android.widget.TextView"的问题。这个问题的原因可能是以下几点:
1. XML文件中的android:background属性的值为"/offers",可能是一个图片,并且这个图片的尺寸大于屏幕的尺寸。解决方法是将这个属性的值改为一个颜色代码,比如"#ff0000"。
2. 可能还有其他的问题导致了这个错误,可以参考stackoverflow上的相关问题android.view.InflateException: Binary XML file line #12: Error inflating class <unknown>来寻找解决方法。
3. XML文件中的android:textAppearance属性的值为"?android:attr/textAppearanceMedium",可能也会导致这个错误。尝试将这个属性移除,然后再次运行程序。
4. 有一位开发者解决了一个奇怪的问题,他在改变android:textSize属性时,直接将数值写死在XML文件中,而不是从dimens.xml文件中引用。他将android:textSize的值改为"35sp"后问题解决。
对于一位开发者提出的问题,如果styles.xml文件中有"parent="TextAppearance.Widget.AppCompat.Toolbar.Title""这一行,应该怎么处理呢?目前还没有具体的解决方法。