Xamarin.Android如何将搜索工具栏添加到搜索视图中

时间:2016-12-20 11:55:47

标签: android xamarin.android

我想添加进程条来搜索视图。但是searchPlate返回null。

public void showProgressBar(SearchView searchView, Activity context)
{
    var id = searchView.Context.Resources.GetIdentifier("android:id/search_plate", null, null);
    var searchPlate = searchView.FindViewById(id);

    ...
}

请帮帮我

更新
我在菜单中创建搜索视图

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">
  <item android:id="@+id/action_item_search"
        android:title="Seach Item"
        android:icon="@drawable/ic_search_black_24dp"
        app:showAsAction="always|collapseActionView"
        app:actionViewClass="android.support.v7.widget.SearchView" />
</menu>

2 个答案:

答案 0 :(得分:0)

android:id / search_plate是指SearchView中的一些背景图片。您无法使用进度条替换它。 SearchView扩展了LinearLayout,因此可以使用SearchView完成可以使用LinearLayout完成的任何操作。但是,SearchView是一个特殊用途的View。我不建议修改其默认行为。所以我建议将ProgressBar添加到SearchView的右侧,并将ProgressBar置于不确定模式,这是一些旋转轮。

答案 1 :(得分:0)

我可以使用您的代码获取searchPlate:

 public class MainActivity : Activity
 {
        SearchView sv;
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            // Set our view from the "main" layout resource
            SetContentView (Resource.Layout.Main);
            sv = FindViewById<SearchView>(Resource.Id.searchView1);
            showProgressBar(sv, this);   
        }

        void showProgressBar(SearchView searchView, Context context)
        {
            int id = searchView.Context.Resources.GetIdentifier("android:id/search_plate", null, null);
            View searchPlate = searchView.FindViewById(id);

            if (searchView.FindViewById(id).FindViewById(Resource.Id.progressBar1) != null)
            {
                searchView.FindViewById(id).FindViewById(Resource.Id.progressBar1).Animate().SetDuration(200).Alpha(1).Start();
            }
            else
            {
                View v = LayoutInflater.From(context).Inflate(Resource.Layout.loading, null);
                ((ViewGroup)searchView.FindViewById(id)).AddView(v, 1);
            }
        }
  }

你可以参考我的项目并找出核心问题。

Here is the project address

enter image description here