Как разрешить ошибку "com.android.internal.R невозможно решить", когда я использую файл android MultiAutoCompleteTextView.java,
Я хочу реализовать свою собственную базу 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?
Спасибо за любые предложения.
Ответы
Ответ 1
Вы можете использовать
public MultiAutoCompleteTextView(Context context, AttributeSet attrs) {
this(context, attrs,
Resources.getSystem().getIdentifier("autoCompleteTextViewStyle", "attr", "android");
}
Вы не можете получить доступ к id com.android.internal.R во время компиляции, но вы можете получить доступ к определенным внутренним ресурсам во время выполнения и получить ресурс по имени.
Вы должны знать, что это медленнее, чем прямой доступ, и нет гарантии, что внутренний ресурс будет доступен в будущих версиях android или в сборках, специфичных для вендора.
Ответ 2
Попробуйте скопировать запись attr
из attrs.xml
:
<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 для этой процедуры.
Ответ 3
Да, вы можете использовать внутренний 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
Ответ 4
Это работает:
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);
Вам нужно указать переменную, которую вы хотите, таким же образом.
Ответ 5
Я не уверен, что вы можете импортировать и ссылаться на internal
.
В качестве обходного решения загрузите ссылки из источника android и включите в свои собственные ресурсы и ссылку из своего пакета.