我在使用Android 4.3和API 18的三星Galaxy Nexus手机上进行测试时遇到以下错误。
#include <iostream>
#include <vector>
using namespace std;
bool find_sol(vector<int> &N, vector<int> &I, int S, int sum){
if (I.size() == 4)
if (S == sum)
return true;
else
return false;
for (int i = 0; i < N.size(); ++i){
if (I.empty() || I[I.size()-1] < i){
I.push_back(i);
if (find_sol(N,I,S,sum+N[i]))
return true;
else {
I.pop_back();
}
}
}
return false;
}
int main(){
int S = 23;
vector<int> numbers = {1,3,5,6,7,8,9};
vector<int> indices;
find_sol(numbers,indices,S,0);
// prints 0, 2, 5, 6
for (int i = 0; i < indices.size(); ++i)
cout << indices[i] <<" ";
cout<<endl;
return 0;
}
在我的Acitivty.java文件中,我尝试使用以下方法设置我的矢量drawable:
Caused by: android.content.res.Resources$NotFoundException: File res/drawable/ic_error.xml
from drawable resource ID #0x7f020098
at android.content.res.Resources.loadDrawable(Resources.java:2091)
at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
at android.widget.TextView.<init>(TextView.java:803)
at android.widget.EditText.<init>(EditText.java:60)
我在build.gradle文件中使用了最新的支持库,如下所示:
editTextNickname.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_error, 0);
editTextNickname.setCompoundDrawables(null, null,
ContextCompat.getDrawable(getApplicationContext(), R.drawable.ic_error), null);
我已经在StackOverflow上发布了类似的问题,但还没有很好的解决方案。如果有人有任何见解,请帮忙!谢谢!
&LT; - 编辑 - &GT;
在忽略了问题并回到它之后,我找到了解决VectorDrawable不支持问题的可靠解决方案。除了建议之外,您还可以使用以下代码创建VectorDrawable:
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.peprally.jeremy.peprally"
minSdkVersion 16
targetSdkVersion 24
versionCode 1
versionName "1.0"
vectorDrawables.useSupportLibrary = true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
debuggable true
}
}
repositories {
mavenCentral()
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:24.1.1'
compile 'com.android.support:design:24.1.1'
compile 'com.android.support:cardview-v7:24.1.1'
compile 'com.android.support:support-v4:24.1.1'
compile 'com.android.support:support-vector-drawable:24.1.1'
compile 'com.facebook.android:facebook-android-sdk:4.6.0'
compile 'com.google.android.gms:play-services-appindexing:9.2.1'
compile 'com.google.firebase:firebase-core:9.2.1'
compile 'com.google.firebase:firebase-messaging:9.2.1'
compile 'com.amazonaws:aws-android-sdk-core:2.+'
compile 'com.amazonaws:aws-android-sdk-cognito:2.+'
compile 'com.amazonaws:aws-android-sdk-s3:2.+'
compile 'com.amazonaws:aws-android-sdk-ddb:2.+'
compile 'com.amazonaws:aws-android-sdk-ddb-mapper:2.+'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.android.volley:volley:1.0.0'
compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha1'
testCompile 'junit:junit:4.12'
}
apply plugin: 'com.google.gms.google-services'
我也试图将矢量drawable直接放入xml文件中。而且我无法找到解决问题的方法,所以我最终只是从我的xml文件中取出它们并使用与上面相同的函数以编程方式在java中注入它们。我在xml中使用矢量drawables得到的错误如下所示,如果有人有更好的解决方案,我很乐意听到它!
public static Drawable getAPICompatVectorDrawable(Context callingContext, int resource_id) {
if (android.os.Build.VERSION.SDK_INT >= 21) {
return ContextCompat.getDrawable(callingContext.getApplicationContext(), resource_id);
} else {
return VectorDrawableCompat.create(
callingContext.getResources(),
resource_id,
callingContext.getTheme());
}
}
答案 0 :(得分:6)
请测试下面的代码吗?只是看看是否有效...... 然后,我将用更多信息更新答案
public class MainActivity extends AppCompatActivity {
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
@Override
protected void onCreate(Bundle arg0) {
...
}
...
}
<强>背景强>
我知道由于this Google Issue - 205236,由于内存问题,对矢量Drawable的支持被禁用。
该问题的一个评论是:
要解决此问题,必须删除对资源XML中的VectorDrawable的支持。
然后,
在下一个版本中,我添加了一个选择加入API,您可以在其中重新启用已删除的VectorDrawable支持。
因此,他们重新启用了该选项 Android Support Library 23.4.0
对于AppCompat用户,我们添加了选择加入 API,以便通过AppCompatDelegate.setCompatVectorFromResourcesEnabled从资源(23.2中的行为)重新启用支持Vector Drawables (true) - 请记住,这仍然会导致内存使用问题和更新配置实例的问题,因此默认情况下会禁用它。
可能,build.gradle
设置现已过时,您只需要在适当的活动中启用它(但需要测试)。
答案 1 :(得分:0)
关于AppCompatDelegate:&#34;此功能默认为禁用,因为启用它可能会导致内存使用问题,以及更新配置实例时出现问题。如果手动更新配置,则可能不希望启用此配置。你被警告了。
即使禁用此功能,您仍然可以通过setImageResource(int)及其app:srcCompat属性使用矢量资源。它们也可用于AppCompat为您充气的任何内容,例如菜单资源。&#34; source
答案 2 :(得分:0)
这不是首选的解决方案,但有效, 我混合了来自 this 网站的矢量可绘制和 PNG。