2010-08-15 20 views
16

我想在文件 「MultiAutoCompleteTextView.java」上實現我自己的Tokenizer庫,當我使用android文件'MultiAutoCompleteTextView.java'時,如何解決「com.android.internal.R無法解析」的錯誤,

,但我遇到了錯誤「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); 
    } 
    . 
    . 
    . 
} 

我還沒有研究任何解決方案來解決這個problem.How糾正 「com.android.internal.R.attr.autoCompleteTextViewStyle」 我自己ATTR?

謝謝你的任何建議。

+0

嘗試按ctrl + 0? – Techboy 2010-08-15 09:26:42

+0

不能直接在SDK中使用'MultiAutoCompleteTextView'而不聲明自己? – rciovati 2013-04-29 09:50:33

回答

0

我不確定您是否可以從internal導入和參考。 作爲一種解決方法,從android源代碼下載參考資料,並將其包含在您自己的資源中,並從您的軟件包中引用。

+0

謝謝你的回答。我想將這個java配置文件中的一些方法改爲我的方法,並將其導入到我的項目中。 但我不能更正這句話中的錯誤 「this(context,attrs,com.android.internal.R.attr。autoCompleteTextViewStyle)「 – huaigu 2010-08-15 12:08:19

+1

你有沒有嘗試通過取下內部包來重寫'com.android.R.attr.autoCompleteTextViewStyle'? – Pentium10 2010-08-15 12:15:52

+0

我不知道如何重寫這個文件,我找不到這個文件... – huaigu 2010-08-15 12:59:51

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此過程。

11

你可以使用

public MultiAutoCompleteTextView(Context context, AttributeSet attrs) { 
     this(context, attrs, 
     Resources.getSystem().getIdentifier("autoCompleteTextViewStyle", "attr", "android"); 
    } 

你不能在編譯時訪問com.android.internal.R的ID的,但你可以在運行時訪問定義的內部資源和名稱獲取資源。 您應該意識到這比直接訪問要慢,並且不能保證內部資源將在未來的Android版本或特定於供應商的版本中可用。

+1

這不會編譯,因爲調用this()或super ()必須是構造函數中的第一行,但是可以內聯id變量,即: 'public MultiAutoCompleteTextView(Context context,AttributeSet attrs){ this(context,attrs,Resources.getSystem()。getIdentifier(「autoCompleteTextViewStyle」,「attr」,「android」)); }' – k2col 2015-05-08 23:15:15

+0

當然你是對的,我修改了答案,謝謝 – yonojoy 2015-05-11 09:16:32

1

是的,你可以使用Java反射的內部R.

要獲得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

+0

反射導致運行時懲罰。 – 2015-12-15 19:57:32

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); 

您需要以相同的方式指定所需的變量。

相關問題