SVG/VectorDrawable 问题在 android
SVG/VectorDrawable issue in android
我在我的 Android 项目中使用了 svg 文件。 Android 4.4 或更低版本中存在问题。我在 gradle 文件和 [ 中尝试了这些解决方案
app:srcCompat
,-
vectorDrawables.useSupportLibrary = true
=19=] AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
在 BaseActivity
. 的静态块中
除了 gridview,图像不显示在应用程序中。
不要使用以上 3 种解决方案,只需将 ImageView
替换为 android.support.v7.widget.AppCompatImageView
。无需做任何额外的努力。
注意:- TextView
、EditText
和其他 classes,不支持使用 drawableRight 和 drawableLeft。对于他们,在 FrameLayout
或 RelativeLayout
中使用 TextView or EditText
和 AppCompatImageView
创建您自己的复合视图 class。 EditText
中的 drawableRight
示例:-
布局文件
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/edt_search"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:maxLines="1"
android:paddingEnd="40dp"
android:paddingLeft="5dp"
android:paddingRight="40dp"
android:paddingStart="5dp" />
<android.support.v7.widget.AppCompatImageView
android:id="@+id/search"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_gravity="right|center_vertical"
android:layout_margin="8dp"
android:src="@drawable/ic_svg_search" />
</FrameLayout>
代码
public class EditTextWithDrawable extends FrameLayout {
public AppCompatImageView mDrawableRight;
public EditText mAppEditText;
public AppEditTextWithDrawable(Context context, AttributeSet attrs) {
super(context, attrs);
init(attrs);
}
private void init(AttributeSet attrs) {
if (attrs != null && !isInEditMode()) {
LayoutInflater inflater = (LayoutInflater) getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.compound_view, this, true);
mDrawableRight = (AppCompatImageView) ((FrameLayout) getChildAt(0)).getChildAt(1);
mAppEditText = (EditText) ((FrameLayout) getChildAt(0)).getChildAt(0);
TypedArray attributeArray = getContext().obtainStyledAttributes(
attrs,
R.styleable.EditTextWithDrawable);
int drawableRes =
attributeArray.getResourceId(
R.styleable.EditTextWithDrawable_drawableRightSVG, -1);
if (drawableRes != -1) {
mDrawableRight.setImageResource(drawableRes);
}
attributeArray.recycle();
}
}
}
attrs.xml 文件
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="AppEditTextWithDrawable">
<attr name="drawableRightSVG" format="reference" />
</declare-styleable>
</resources>
将 SVG
文件转换为 XML
并从 Drawable
文件夹中使用它。检查 this .
我在我的 Android 项目中使用了 svg 文件。 Android 4.4 或更低版本中存在问题。我在 gradle 文件和 [ 中尝试了这些解决方案
app:srcCompat
,-
vectorDrawables.useSupportLibrary = true
=19=]AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
在BaseActivity
. 的静态块中
不要使用以上 3 种解决方案,只需将 ImageView
替换为 android.support.v7.widget.AppCompatImageView
。无需做任何额外的努力。
注意:- TextView
、EditText
和其他 classes,不支持使用 drawableRight 和 drawableLeft。对于他们,在 FrameLayout
或 RelativeLayout
中使用 TextView or EditText
和 AppCompatImageView
创建您自己的复合视图 class。 EditText
中的 drawableRight
示例:-
布局文件
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/edt_search"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:maxLines="1"
android:paddingEnd="40dp"
android:paddingLeft="5dp"
android:paddingRight="40dp"
android:paddingStart="5dp" />
<android.support.v7.widget.AppCompatImageView
android:id="@+id/search"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_gravity="right|center_vertical"
android:layout_margin="8dp"
android:src="@drawable/ic_svg_search" />
</FrameLayout>
代码
public class EditTextWithDrawable extends FrameLayout {
public AppCompatImageView mDrawableRight;
public EditText mAppEditText;
public AppEditTextWithDrawable(Context context, AttributeSet attrs) {
super(context, attrs);
init(attrs);
}
private void init(AttributeSet attrs) {
if (attrs != null && !isInEditMode()) {
LayoutInflater inflater = (LayoutInflater) getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.compound_view, this, true);
mDrawableRight = (AppCompatImageView) ((FrameLayout) getChildAt(0)).getChildAt(1);
mAppEditText = (EditText) ((FrameLayout) getChildAt(0)).getChildAt(0);
TypedArray attributeArray = getContext().obtainStyledAttributes(
attrs,
R.styleable.EditTextWithDrawable);
int drawableRes =
attributeArray.getResourceId(
R.styleable.EditTextWithDrawable_drawableRightSVG, -1);
if (drawableRes != -1) {
mDrawableRight.setImageResource(drawableRes);
}
attributeArray.recycle();
}
}
}
attrs.xml 文件
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="AppEditTextWithDrawable">
<attr name="drawableRightSVG" format="reference" />
</declare-styleable>
</resources>
将 SVG
文件转换为 XML
并从 Drawable
文件夹中使用它。检查 this .