2015-02-24 76 views
7

在API 17中引入的方法setText(CharSequence text, boolean filter)AutoCompleteTextView似乎也適用於較低的Android版本。我曾期待它會在使用NoSuchMethodError的2.3版設備中崩潰,但它工作正常。這不是一個真正的問題,但我只是好奇,想知道它是如何工作:)在API 17中添加的方法也在較低的API級別工作

這裏是我的代碼 -

<AutoCompleteTextView 
     android:id="@+id/autoCompleteTextView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/textView1" 
     android:textColor="@android:color/black" 
     android:ems="10" 
     android:text="AutoCompleteTextView" > 

     <requestFocus /> 
    </AutoCompleteTextView> 

....

import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.widget.AutoCompleteTextView; 

public class MainActivity extends ActionBarActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     AutoCompleteTextView autoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView1); 
     //method introduced in API 17!! 
     autoCompleteTextView.setText("Example text", false); 
    } 


} 

回答

7

當谷歌說, API級別17中引入了一些內容,它們都意味着它已公開可用並記錄在API級別17中。

從Android的第一天開始,實際實現可能已經存在,但它是w作爲隱藏於開發人員使用特殊註釋或僅使用private

編輯: 下面是實際的方法簽名+文件從薑餅源代碼,展示了使用這種anotation的

/** 
* Like {@link #setText(CharSequence)}, except that it can disable filtering. 
* 
* @param filter If <code>false</code>, no filtering will be performed 
* as a result of this call. 
* 
* @hide Pending API council approval. 
*/ 
public void setText(CharSequence text, boolean filter) 
+1

你是對的。我只是看着'AutoCompleteTextView'薑餅源代碼(https://android.googlesource.com/platform/frameworks/base/+/gingerbread/core/java/android/widget/AutoCompleteTextView.java),並且該方法被標記爲隱藏。感謝你的回答。 – 2015-02-24 07:16:20

+1

@AbhishekV這就是StackOverflow的用處,不是嗎? :) – 2015-02-24 07:19:48

相關問題