2014-10-01 70 views
4

我在我的活動中使用了SearchView。當用戶鍵入時,我正在向服務器執行搜索請求。我想指出一些活動正在發生。是否有可能在SearchView中顯示進度微調器?將進度微調器放入SearchView中?

否則,人們如何處理這個問題 - 我們是否創建了一個自定義的操作欄父級佈局,並在其中嵌入了SearchView?

<LinearLayout orientation="horizontal"> 
    <SearchView /> 
    <ProgressBar /> 
</LinearLayout> 

謝謝

回答

6

首先爲進度條創建佈局。像這樣的XML應該做的工作:

R.layout.loading_icon

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ProgressBar 
     style="?android:attr/progressBarStyleLarge" 
     android:layout_width="25dp" 
     android:layout_height="25dp" 
     android:id="@+id/search_progress_bar" 
     android:layout_marginTop="5dp" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" /> 
</RelativeLayout> 

下創建兩個功能。一個顯示在您的搜索查看進度條等來隱藏它:

public void showProgressBar(SearchView searchView, Context context) 
{ 
    int id = searchView.getContext().getResources().getIdentifier("android:id/search_plate", null, null); 
    if (searchView.findViewById(id).findViewById(R.id.search_progress_bar) != null) 
     searchView.findViewById(id).findViewById(R.id.search_progress_bar).animate().setDuration(200).alpha(1).start(); 

    else 
    { 
     View v = LayoutInflater.from(context).inflate(R.layout.loading_icon, null); 
     ((ViewGroup) searchView.findViewById(id)).addView(v, 1); 
    } 
} 
public void hideProgressBar(SearchView searchView) 
{ 
    int id = searchView.getContext().getResources().getIdentifier("android:id/search_plate", null, null); 
    if (searchView.findViewById(id).findViewById(R.id.search_progress_bar) != null) 
     searchView.findViewById(id).findViewById(R.id.search_progress_bar).animate().setDuration(200).alpha(0).start(); 
} 
+0

好吧,我正確地認爲這個解決方案依賴於谷歌沒有發佈更新「search_plate」更改的事實嗎? – user3203425 2014-10-02 19:19:31

+0

是的。您也可以通過應對Google sdk中的一個來創建自己的SearchView。 – 2014-10-02 19:21:07

+0

不錯的工作。謝謝 :) – 2015-06-12 11:49:44

1

我知道這是不是搜索查看內,但是這是迄今爲止最簡單的方法來提供進度指示在動作條在這裏找到http://blog.denevell.org/android-progress-spinner.html

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

    // Turn it on 
    setProgressBarIndeterminateVisibility(true); 
    // And when you want to turn it off 
    setProgressBarIndeterminateVisibility(false); 
} 

如果你真的希望進度出現在SearchView中,我會假設你可以使用FrameLayout而不是LinearLayout(或者至少是父類),將進度放在XML的底部(它將放置在SearchView的頂部) 。

0

如果您使用的是擴展android.support.v7.widget.SearchView自定義SearchView類,你需要這樣做:

public void init(Context context){ 

     EditText searchPlate = (EditText) findViewById(android.support.v7.appcompat.R.id.search_src_text); 
     //searchPlate.setHint("Search"); 
     mSearchPlateView = findViewById(android.support.v7.appcompat.R.id.search_plate); 
     mSearchPlateView.setBackgroundColor(ContextCompat.getColor(context, android.R.color.transparent)); 
    } 
public void showProgressBar(Context context) { 

     if (mProgressBar != null) { 
      mProgressBar.animate() 
        .setDuration(200) 
        .alpha(1) 
        .start(); 
     } 
     else { 
      RelativeLayout relativeLayout = (RelativeLayout) LayoutInflater.from(context).inflate(R.layout.invest_progress_loading, null); 
      mProgressBar = (ProgressBar) relativeLayout.findViewById(R.id.search_progress_bar); 
      ((ViewGroup) mSearchPlateView).addView(relativeLayout, 1); 
     } 
    } 

    public void hideProgressBar() { 

     if(mProgressBar == null) 
      return; 

     mProgressBar.animate() 
        .setDuration(200) 
        .alpha(0) 
        .start(); 

    }