Подтвердить что ты не робот

Как разрешить ошибку "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?

Спасибо за любые предложения.

4b9b3361

Ответ 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 и включите в свои собственные ресурсы и ссылку из своего пакета.