ped*_*dja 38 android android-vectordrawable
我试图在前棒棒糖设备上使用矢量drawables.我按照这里的指示完成了所有操作,但我仍然遇到了这次崩溃.
的build.gradle:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.0.0-beta6'
}
}
apply plugin: 'com.android.application'
repositories {
maven { url 'http://maven.android-forever.com' }
jcenter()
}
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.test.app"
minSdkVersion 16
targetSdkVersion 22
versionCode 1
versionName "1.0"
vectorDrawables.useSupportLibrary = true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.2.0'
compile 'com.android.support:design:23.2.0'
compile "de.greenrobot:eventbus:2.4.0"
compile 'de.greenrobot:greendao:2.1.0'
compile "com.af:android-utility:1.0.0.9"
compile project(':volleyplus')
compile project (':libvlc')
}
Run Code Online (Sandbox Code Playgroud)
triangle.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/triangle_v"/>
</selector>
Run Code Online (Sandbox Code Playgroud)
triangle_v.xml
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="100dp"
android:width="100dp"
android:viewportHeight="100"
android:viewportWidth="100">
<path
android:name="triangle"
android:fillColor="#FF0000"
android:pathData="m 50,0 l 50,100 -100,0 z"/>
</vector>
Run Code Online (Sandbox Code Playgroud)
layout.xml
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/triangle"/>
Run Code Online (Sandbox Code Playgroud)
我也试过app:srcCompat,在那种情况下,drawable只是不显示.
але*_*кей 29
如果使用
vectorDrawables.useSupportLibrary = true,此代码将与vector一起使用
并android:src改为app:srcCompat.
例如,
Run Code Online (Sandbox Code Playgroud)<ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/triangle"/>
至
Run Code Online (Sandbox Code Playgroud)<ImageView android:layout_width="match_parent" android:layout_height="match_parent" app:srcCompat="@drawable/triangle"/>
hea*_*uck 27
我遇到了类似的问题,@ pedja自己的答案很有用.更一般地说,正如Chris Banes关于vector drawable compat的文章中所提到的,支持库的工作原理是ImageView通过一些钩子在pre-L上注入它的系统版本.这隐含地要求使用AppCompat版本的类,例如AppCompatActivity.
在我的例子中,使用Application上下文,vector drawable用于独立的toast-like视图,没有相关的活动.我最终AppCompatImageView直接在xml布局定义中使用,例如
<android.support.v7.widget.AppCompatImageView
android:id="@+id/some_id"
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/selector_referencing_vector_drawable"/>
Run Code Online (Sandbox Code Playgroud)
因此,不需要神奇的"钩子"机制.经测试,这也适用于Activity该类而无需使用AppCompatActivity.所有上述操作都是在没有升级到23.2.1的情况下完成的,后者解决了另一个问题.
Ald*_*asa 26
从前棒棒糖设备上的选择器加载向量时也遇到此问题:
在onCreate方法中使用AppCompatDelegate.setCompatVectorFromResourcesEnabled(true):
设置是否可以在android.graphics.drawable.DrawableContainer资源中使用旧平台(<API 21)上的矢量绘图.启用后,AppCompat可以拦截框架中的一些可绘制通货膨胀,从而实现android.graphics.drawable.DrawableContainer资源中矢量drawable的隐式通货膨胀.
protected final void onCreate(Bundle savedInstanceState) {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
super.onCreate(savedInstanceState);
...
Run Code Online (Sandbox Code Playgroud)
nad*_*ada 11
这里给出的答案忽略了当您希望将drawable添加到textview时的情况,因为它给出了相同的错误.在我的情况下,我有
<TextView .... android:drawableLeft="some_vectore_drawable" />
Run Code Online (Sandbox Code Playgroud)
我找不到如何解决这个问题,所以我从xml代码中删除了该行,并以这种方式将其放入我的java代码中
Drawable somevectordrable = AppCompatDrawableManager.get().getDrawable(context, R.drawable.somevectordrawable);
mytextview.setCompoundDrawableWithIntrinsicBounds(somevectordrable, null, null, null);
Run Code Online (Sandbox Code Playgroud)
澄清代码,
使用AppCompatDrawableManager从drawables文件夹中获取矢量drawable
在我们的textview上设置我们刚刚得到的drawable作为左侧drawable
您还需要包含新的矢量支持库:
compile 'com.android.support:support-vector-drawable:23.2.0'
Run Code Online (Sandbox Code Playgroud)
小智 6
它适用于23.2.0或23.4.0,而不是23.3.0.认真谷歌!
首先,这个功能最初是在23.2.0发布的,但后来我们发现了一些内存使用和配置更新问题,所以我们在23.3.0中删除了它.在23.4.0(技术上是一个修复版本)中,我们重新添加了相同的功能,但是在需要手动启用的标志后面.
参考:https://medium.com/@chrisbanes/appcompat-v23-2-age-of-the-vectors-91cbafa87c88#.waicp19gh
这就是我在互联网上喜欢的一切,对我来说就是工作。检查您错过了哪一个。
1)在build.gradle内部
android {
...
defaultConfig {
...
vectorDrawables.useSupportLibrary = true
}
}
Run Code Online (Sandbox Code Playgroud)
2)必须使用 buildToolsVersion '27.0.3'和compile 'com.android.support:appcompat-v7:27.0.3'类似的版本代码。
3)使用上然后3 gradle版本
classpath 'com.android.tools.build:gradle:3.0.1'
4)ImageView使用app:srcCompat
xmlns:app="http://schemas.android.com/apk/res-auto"
app:srcCompat="@drawable/ic_logo"
Run Code Online (Sandbox Code Playgroud)
5),但是如果你需要android:drawableLeft或android:drawableRigth等则:
ic_logo.xml(矢量xml)
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:width="@dimen/home.button.icon"
android:height="@dimen/home.button.icon"
android:viewportWidth="24.0"
android:viewportHeight="24.0"
tools:ignore="VectorRaster">
<path
android:fillColor="#FFFFFF"
android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/>
</vector>
Run Code Online (Sandbox Code Playgroud)
ic_logo_select.xml(向量选择器)
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true"
android:drawable="@drawable/ic_logo" />
<item android:drawable="@drawable/ic_logo" />
</selector>
Run Code Online (Sandbox Code Playgroud)
现在您可以使用android:drawableLeft或android:drawableRight
<android.support.v7.widget.AppCompatButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/ic_logo_select"/>
Run Code Online (Sandbox Code Playgroud)
6)最后,在内部加载方法setCompatVectorFromResourcesEnabled = true,该方法在main方法之前加载。
public class MainActivity extends AppCompatActivity {
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
....
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24397 次 |
| 最近记录: |