我有以下布局文件
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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:id="@+id/rootConstraintLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimary"
tools:context="mtronics.alertme.HomePage">
<TextView
android:id="@+id/tvSpeedSet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="My Limit : 0 Km/h"
android:textAlignment="center"
android:textColor="@color/colorText"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/speedView" />
<SeekBar
android:id="@+id/seekBarSpeedSet"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@drawable/corner_fillet_background"
android:max="200"
android:progress="0"
android:thumb="@drawable/icon_seek_thumb"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvSpeedSet" >
</SeekBar>
<ListView
android:id="@+id/listAlerts"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_gravity="center"
android:layout_weight="1"
android:divider="@color/colorTransparent"
android:dividerHeight="8dp"
android:padding="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/seekBarSpeedSet">
</ListView>
</android.support.constraint.ConstraintLayout>
可绘制文件 的 icon_seek_thumb.xml
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape>
<size
android:height="40dp"
android:width="40dp" />
<solid android:color="@android:color/transparent" />
</shape>
</item>
<item android:drawable="@drawable/ic_seek_thumb"/>
</layer-list>
ic_seek_thumb.xml
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="@color/colorText"
android:pathData="...."/>
</vector>
在上面的布局中,我只得到API 19的跟随错误,因为它正在工作 注意:如果我从搜索栏中删除android:thumb,它也适用于API 19
当我尝试在API 19中执行时,我收到以下错误
android.view.InflateException: Binary XML file line #0: Error inflating class SeekBar
答案 0 :(得分:1)
对API 21中的框架添加了对VectorDrawables的支持,因此它们在API 19中不受支持 - 因此崩溃。
支持库提供了一个可以在较低Android版本上使用的反向移植版本VectorDrawableCompat
。不幸的是,如果我没记错的话,从xml充气时它不会挂钩到seekbar拇指。
要解决此问题,您必须在java中创建拇指Drawable并手动将其设置为Seekbar。
首先确保您的build.gradle
:
api "com.android.support:appcompat-v7:${supportLibVersion}"
然后在使用Seekbar
的java类中创建一个设置拇指的新方法。以下内容应与原始xml相同:
private void initThumbDrawable() {
final int size = convertDpToPixel(40);
GradientDrawable square = new GradientDrawable();
square.setShape(GradientDrawable.RECTANGLE);
square.setSize(size, size);
square.setColor(Color.TRANSPARENT);
VectorDrawableCompat thumb = VectorDrawableCompat.create(getResources(), R.drawable. ic_seek_thumb, null);
LayerDrawable layerDrawable = new LayerDrawable(new Drawable[] {square, thumb});
seekBar.setThumb(layerDrawable);
}
private int convertDpToPixel(int dp) {
DisplayMetrics displayMetrics = Resources.getSystem().getDisplayMetrics();
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, displayMetrics);
}
如果将填充包含在向量中而不是使用图层列表,则可能更简单!
最后一定要删除:
android:thumb="@drawable/icon_seek_thumb"
来自布局xml文件的
答案 1 :(得分:0)
一旦我遇到同样的问题。我修复了它将所有可绘制文件放在 drawable 文件夹下。我的问题是一些可绘制的文件仅出现在 drawable -xxdpi 而不是 drawable 文件夹中,其中较低的API级别查找该文件..
替换可绘制文件夹中可能解决您问题的所有文件。