我知道这里有几个类似的问题,但是没有一个解决方案适合我。
我刚将我的应用程序从Ecilpse(juno)转移到Android Studio 1.5.1;从API 19到API 23(compileSdkVersion)。
目前我遇到了这样的错误,即“getResources()。getColor(R.color.my_color)”已折旧且无法使用。
在线搜索后,我尝试使用“ContextCompat.getColor(context,R.color.my_color)”代替。错误在于“getColor”部分,因为它表示它无法解决:
“ContextCompat”方法允许我使用“getDrawable”,“getExternalCacheDirs”,“getExternalFilesDirs”和“getObbDirs”; 除了“getColor”
我还确保在我的app build.gradle(在依赖项{}下)中有这两个:
此外,我还尝试使用“ContextCompat”以外的“ResourcesCompat”;它仍然不适合我。
我仍然是Android Development的初学者,从事学校项目。 任何人都可以提供一些关于我做错的建议,并指出我正确的方向?非常感谢提前!
答案 0 :(得分:3)
您可以使用此方法。
这是支持库中的ContextCompat Developer Link:
public static final int getColor(Context context, int id) {
final int version = Build.VERSION.SDK_INT;
if (version >= 23) {
return ContextCompat.getColor(context, id);
} else {
return context.getResources().getColor(id);
}
}
答案 1 :(得分:1)
如果您使用大于24的API级别进行编译,则不必在那里使用ContextCompat,因为这只是早期版本的兼容性功能。您还可以使用Context.getColor()但请注意方法签名!如果您只想在默认主题中使用颜色,则只需提供其引用的int值:http://developer.android.com/reference/android/content/Context.html#getColor(int)
您目前正在尝试使用两个参数(颜色和主题)访问getColor(),这两个参数无法在那里工作,因为没有方法支持这些参数。如果删除第二个参数,则当前解决方案将起作用。 但是直接使用Context或Resources会更方便,如果你不需要,可以删除v4 Appcompat引用。
答案 2 :(得分:1)
在使用此方法之前,首先在build.gradle脚本中添加Dependencies。具体如下:
import numpy as np
import cv2
from matplotlib import pyplot as plt
img = cv2.imread('messi.jpg',0)
dft = cv2.dft(np.float32(img),flags = cv2.DFT_COMPLEX_OUTPUT)
dft_shift = np.fft.fftshift(dft)
magnitude_spectrum = np.log(cv2.magnitude(dft_shift[:,:,0],dft_shift[:,:,1]))
plt.subplot(131),plt.imshow(img, cmap = 'gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(132),plt.imshow(magnitude_spectrum, cmap = 'gray'), plt.colorbar(cmap = 'gray')
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
plt.show()