我想在文件上实现自己的Tokenizer “MultiAutoCompleteTextView.java”,
但是当我尝试
时遇到错误“com.android.internal.R cannot be resolved
”
将“MultiAutoCompleteTextView.java
”导入我的项目。
代码:
public class MultiAutoCompleteTextView extends AutoCompleteTextView {
private Tokenizer mTokenizer;
public MultiAutoCompleteTextView(Context context) {
this(context, null);
}
public MultiAutoCompleteTextView(Context context, AttributeSet attrs) {
this(context, attrs, com.android.internal.R.attr.autoCompleteTextViewStyle);
}
public MultiAutoCompleteTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
.
.
.
}
我没有研究解决这个问题的任何解决方案。如何纠正“com.android.internal.R.attr.autoCompleteTextViewStyle”我自己的attr?
感谢您提出任何建议。
答案 0 :(得分:12)
您可以使用
public MultiAutoCompleteTextView(Context context, AttributeSet attrs) {
this(context, attrs,
Resources.getSystem().getIdentifier("autoCompleteTextViewStyle", "attr", "android");
}
您无法在编译时访问com.android.internal.R的id,但您可以在运行时访问已定义的内部资源并按名称获取资源。 您应该知道这比直接访问慢,并且无法保证在未来的android版本或特定于供应商的版本中可以使用内部资源。
答案 1 :(得分:3)
尝试从attrs.xml
复制attr
条目:
<attr name="autoCompleteTextViewStyle" format="reference" />
在您的应用中添加res/values/attrs.xml
并将此行放入其中。
最后,更新您的代码以从您的包中引用R:
import com.your.package.R;
...
public MultiAutoCompleteTextView(Context context, AttributeSet attrs) {
this(context, attrs, R.attr.autoCompleteTextViewStyle);
}
此程序归功于inazaruk。
答案 2 :(得分:1)
是的,你可以使用内部R和Java反射。
获取autoCompleteTextViewStyle:
Class clasz = Class.forName("com.android.internal.R$attr")
Field field = clasz.getDeclaredField("autoCompleteTextViewStyle");
field.setAccessible(true);
int autoCompleteTextViewStyle= (int)field.get(null);
如上所述,这种方式是黑客攻击,通常Android提供类似或相同的公共风格基于android.R
答案 3 :(得分:1)
这有效:
int id = Resources.getSystem().getIdentifier("config_sms_capable", "bool", "android");
Resources res = Resources.getSystem();
boolean configSMSCapable = res.getBoolean(id);
TextView displayText = findViewById(R.id.displayText);
String configSMSCapableString = configSMSCapable ? "TRUE" : "FALSE";
displayText.setText("config_sms_capable = " + configSMSCapableString);
您需要以相同的方式指定所需的变量。
答案 4 :(得分:0)
我不确定您是否可以从internal
导入和引用。
作为解决方法,从android源代码下载引用,并包含在您自己的资源中,并从您的包中引用。