Android API 19启动MyActivity崩溃,API21及以上版本正常
解决Android API 19中加载矢量图导致的Activity崩溃问题
我之前也碰到过一模一样的情况——在API 21+上运行完全正常,但到了API 19(KitKat)就因为矢量图加载直接崩溃。从你的崩溃堆栈能明确看出问题根源:AppCompatButton通过android:drawableRight/android:drawableEnd引用矢量图时,低版本系统的原生TextView组件无法解析<vector>标签,哪怕你已经配置了vectorDrawables.useSupportLibrary = true和AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)也没用,因为原生的android:命名空间属性不会走AppCompat的兼容逻辑。
核心解决方案:改用AppCompat兼容属性替换原生属性
你需要把Button的android:drawableRight和android:drawableEnd替换成AppCompat库专门提供的app:drawableRightCompat和app:drawableEndCompat,这些兼容属性会由AppCompat框架接管处理,能在低版本系统中正确加载矢量图。
修改后的Button代码
<android.support.v7.widget.AppCompatButton android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/colorAccent" app:drawableEndCompat="@drawable/ic_warning_white_24px" app:drawableRightCompat="@drawable/ic_warning_white_24px" android:gravity="start|center_vertical" android:paddingLeft="16dp" android:paddingRight="16dp" android:text="Button" android:textColor="@color/white" />
额外确认项
- 确保布局文件已正确引入
app命名空间(你的代码里已经配置,这里再核对下):xmlns:app="http://schemas.android.com/apk/res-auto" - 保留已有的
build.gradle配置:defaultConfig { vectorDrawables.useSupportLibrary = true } - 确保
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)的调用时机正确,推荐放在MyActivity的静态代码块中:public class MyActivity extends AppCompatActivity { static { AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); } }
这样修改后,API 19就能正常加载矢量图,不会再出现InflateException崩溃了。
内容的提问来源于stack exchange,提问作者Jay Patel
相关产品推荐
相关产品推荐

