Android 在SearchView中放置进度微调器?

Android 在SearchView中放置进度微调器?,android,Android,我正在活动中使用SearchView。当用户输入时,我将执行对服务器的搜索请求。我想指出一些活动正在发生。是否可以在SearchView中显示进度微调器 <LinearLayout orientation="horizontal"> <SearchView /> <ProgressBar /> </LinearLayout> 否则,人们如何处理这个问题?我们是否创建自定义actionbar父布局,并在其中嵌入SearchView

我正在活动中使用SearchView。当用户输入时,我将执行对服务器的搜索请求。我想指出一些活动正在发生。是否可以在SearchView中显示进度微调器

<LinearLayout orientation="horizontal">
    <SearchView />
    <ProgressBar />
</LinearLayout>
否则,人们如何处理这个问题?我们是否创建自定义actionbar父布局,并在其中嵌入SearchView

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


谢谢

我知道它不在SearchView中,但这是迄今为止在这里找到的操作栏中提供进度指示的最简单方法:


如果您确实希望进度显示在SearchView中,我假设您可以使用FrameLayout而不是LinearLayout(或至少作为父级),将进度放在XML的底部(这将使其位于SearchView的顶部)。

首先为progressbar创建布局。这样的XML应该可以完成以下工作:

R.layout.加载图标

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

如果您正在使用扩展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();

    }

好吧,我认为这个解决方案依赖于这样一个事实,即谷歌没有发布一个“搜索板”发生变化的更新,对吗?是的。您还可以通过使用google sdk创建自己的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();

    }