Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:如何让SearchView占据ActionBar中的整个水平空间?_Android_Android Layout_Android Actionbar_Searchview_Layoutparams - Fatal编程技术网

Android:如何让SearchView占据ActionBar中的整个水平空间?

Android:如何让SearchView占据ActionBar中的整个水平空间?,android,android-layout,android-actionbar,searchview,layoutparams,Android,Android Layout,Android Actionbar,Searchview,Layoutparams,在下面的屏幕截图中,ActionBar中的SearchView小部件不会占用整个可用空间 我需要它占据ActionBar中的所有水平空间(因此它水平地跨越整个屏幕) 我的尝试: <!-- Search, should appear as action button --> <item android:id="@+id/action_search" android:icon="@drawable/searchmenu" android:title="

在下面的屏幕截图中,
ActionBar
中的
SearchView
小部件不会占用整个可用空间

我需要它占据
ActionBar
中的所有水平空间(因此它水平地跨越整个屏幕)

我的尝试:

  <!-- Search, should appear as action button -->
<item
    android:id="@+id/action_search"
    android:icon="@drawable/searchmenu"
    android:title="@string/search"
    yourapp:showAsAction="always"
    yourapp:actionViewClass="android.support.v7.widget.SearchView"
    />
<item
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu items for use in the action bar
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.top_menu, menu);

    // SearchAction
    SManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    searchMenuItem = menu.findItem(R.id.action_search);
    searchViewAction = (SearchView) MenuItemCompat
            .getActionView(searchMenuItem);
    searchViewAction.setSearchableInfo(SManager
            .getSearchableInfo(getComponentName()));
    searchViewAction.setIconifiedByDefault(true);

    SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {

        @Override
        public boolean onQueryTextChange(String newText) {
            // this is your adapter that will be filtered
                return true;

        }

        @Override
        public boolean onQueryTextSubmit(String query) {
            // this is your adapter that will be filtered

            return true;
        }
    };
    searchViewAction.setOnQueryTextListener(queryTextListener);

    return super.onCreateOptionsMenu(menu);
}
  • 按编程方式,在创建选项菜单中尝试此操作:

    View searchViewView = (View) searchView;
    searchViewView.getLayoutParams().width=LayoutParams.MATCH_PARENT;`
    
    这使得:

    java.lang.NullPointerException: Attempt to write to
    field 'int android.view.ViewGroup$LayoutParams.width' on a null
    object reference ...       
    TestActionBarTwo.MainActivity.onCreateOptionsMenu(MainActivity.java:57)
    
  • 在菜单资源中:

    android:layout\u width=“match\u parent”似乎不会影响 什么都行

  • 我还尝试了android:layout\u weight=“1”(假设
    ActionBar
    有一个
    LinearLayout
    ),但这也不起作用

那么有没有一种方法可以让
搜索视图(未图标化)占据
操作栏的整个水平空间呢?


编辑1

菜单资源是:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:testactionbartwo="http://schemas.android.com/apk/res-auto" >
      <item android:id="@+id/action_search"
        android:icon="@drawable/ic_action_search"
        android:title="@string/mainActivity_searchActionTitle"
        testactionbartwo:showAsAction="always"
        testactionbartwo:actionViewClass="android.support.v7.widget.SearchView"  />
</menu>
结果,当我单击图标化搜索图标将其展开时:


编辑3:从@MaheeraJazi的答案中复制的代码似乎仍然不起作用。我现在发布整个SSCCE:

  <!-- Search, should appear as action button -->
<item
    android:id="@+id/action_search"
    android:icon="@drawable/searchmenu"
    android:title="@string/search"
    yourapp:showAsAction="always"
    yourapp:actionViewClass="android.support.v7.widget.SearchView"
    />
<item
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu items for use in the action bar
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.top_menu, menu);

    // SearchAction
    SManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    searchMenuItem = menu.findItem(R.id.action_search);
    searchViewAction = (SearchView) MenuItemCompat
            .getActionView(searchMenuItem);
    searchViewAction.setSearchableInfo(SManager
            .getSearchableInfo(getComponentName()));
    searchViewAction.setIconifiedByDefault(true);

    SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {

        @Override
        public boolean onQueryTextChange(String newText) {
            // this is your adapter that will be filtered
                return true;

        }

        @Override
        public boolean onQueryTextSubmit(String query) {
            // this is your adapter that will be filtered

            return true;
        }
    };
    searchViewAction.setOnQueryTextListener(queryTextListener);

    return super.onCreateOptionsMenu(menu);
}

MainActivity.java:-

activity\u main\u action\u bar\u menu.xml:-


活动\u main.xml:-


清单文件:-


您无需指定
android:layout\u weight
或任何其他属性。在我的代码中,我这样做了,一切都很顺利

在主菜单上,您需要添加以下内容:

  <!-- Search, should appear as action button -->
<item
    android:id="@+id/action_search"
    android:icon="@drawable/searchmenu"
    android:title="@string/search"
    yourapp:showAsAction="always"
    yourapp:actionViewClass="android.support.v7.widget.SearchView"
    />
<item
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu items for use in the action bar
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.top_menu, menu);

    // SearchAction
    SManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    searchMenuItem = menu.findItem(R.id.action_search);
    searchViewAction = (SearchView) MenuItemCompat
            .getActionView(searchMenuItem);
    searchViewAction.setSearchableInfo(SManager
            .getSearchableInfo(getComponentName()));
    searchViewAction.setIconifiedByDefault(true);

    SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {

        @Override
        public boolean onQueryTextChange(String newText) {
            // this is your adapter that will be filtered
                return true;

        }

        @Override
        public boolean onQueryTextSubmit(String query) {
            // this is your adapter that will be filtered

            return true;
        }
    };
    searchViewAction.setOnQueryTextListener(queryTextListener);

    return super.onCreateOptionsMenu(menu);
}
照片看起来像:

getSupportActionBar().setDisplayShowHomeEnabled(false)
时,
searchview
看起来像:


我希望这有帮助

工具栏中搜索视图的默认宽度由非公共属性定义abc\u search\u view\u preferred\u width。对于所有屏幕尺寸,它设置为320dp

解决方法是设置SearchView的maxWidth:

searchView.setMaxWidth(Integer.MAX_VALUE);

感谢您的回答,但这正是我的代码在采取问题中提到的任何步骤之前的样子。请在打开的
搜索视图
下发布您的
操作栏
的屏幕截图,以便我们可以查看
搜索视图
是否横向跨越
操作栏
吗?不,不一样,您可以看到编辑:)它需要完整的操作栏@Zaraha关于显示图片,我的帐户与Facebook关联,所以。。。不管怎样,我认为你的评论一定违反了这样的政策。我建议你在获得否决票之前把它删除。)请试试这个。。。删除searchView.setIconifiedByDefault(false)行将使searchView在展开时看起来像正常的。。我希望你一切顺利!!顺便说一句,您需要在onCreate(..)方法上调用以下行[getSupportActionBar().setDisplayShowHomeEnabled(false);getSupportActionBar().setDisplayShowTitleEnabled(false);]!!!请使用前一个代码“setIconifiedByDefault(false);”,将其从代码中删除。。。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu items for use in the action bar
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.top_menu, menu);

    // SearchAction
    SManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    searchMenuItem = menu.findItem(R.id.action_search);
    searchViewAction = (SearchView) MenuItemCompat
            .getActionView(searchMenuItem);
    searchViewAction.setSearchableInfo(SManager
            .getSearchableInfo(getComponentName()));
    searchViewAction.setIconifiedByDefault(true);

    SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {

        @Override
        public boolean onQueryTextChange(String newText) {
            // this is your adapter that will be filtered
                return true;

        }

        @Override
        public boolean onQueryTextSubmit(String query) {
            // this is your adapter that will be filtered

            return true;
        }
    };
    searchViewAction.setOnQueryTextListener(queryTextListener);

    return super.onCreateOptionsMenu(menu);
}
searchView.setMaxWidth(Integer.MAX_VALUE);