在工具栏(片段)

时间:2016-06-27 12:10:45

标签: android xml android-layout android-fragments android-toolbar

在我的片段中我添加了一个工具栏,现在我试图在这里添加一个searchView,它在一个操作栏上展开并折叠其工作正常但在我的工具栏上使用它时出现布局问题:

这是我的工具栏,下面是2个按钮 我的问题#1是这里我的searchView图标不可见,但是当你触摸时钟下方(状态栏中的5:16)时,searchView会扩展看第二张图片

enter image description here

你可以看到现在searchView是可见的,工具栏的标题(它的textView)向左移动,为searchView腾出空间,这也是一个问题,当我在搜索视图上输入任何内容时,文本的颜色是不可见的(但是searchView工作正常)只有搜索到的文本在searchView

中不可见

enter image description here

当我再次点击下面的时钟时,我的searchView会崩溃,而标题也会设置在正确的位置

这是片段的xml文件:

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



<android.support.v7.widget.Toolbar
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:minHeight="?attr/actionBarSize"
    android:id="@+id/toolbar"
    android:theme="@style/ToolBarStyle"
    android:elevation="5dp"
    android:textAlignment="center"
    android:background="@android:color/holo_red_light">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Channel"
        android:layout_gravity="center"
        android:id="@+id/toolbar_title"
        android:textSize="20sp"
        android:textStyle="bold"
        android:background="#00000000"
        android:textColor="#ffffff" />
</android.support.v7.widget.Toolbar>


<RelativeLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/toolbar">

  .... other ui elements 
</RelativeLayout>
</RelativeLayout>

searchView菜单xml文件:

<?xml version="1.0" encoding="utf-8"?>

xmlns:app="http://schemas.android.com/apk/res-auto">
<item
    android:id="@+id/action_search"
    android:icon="@drawable/done"
    app:showAsAction="always"
    app:actionViewClass="android.support.v7.widget.SearchView"
    android:title="Search"/>

这个片段在tabLayout中,我不能使用Actionbar而不是工具栏 任何想法如何解决这个问题?或者为什么会发生这种情况?请让我知道这对我很有帮助

在我的片段类中:

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if(id == R.id.menu_action_next){
        //Do whatever you want to do

        return true;
    }

    return super.onOptionsItemSelected(item);
}

@Override
public void onPrepareOptionsMenu(Menu menu) {
    final MenuItem searchItem = menu.findItem(R.id.action_search);

}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);

    MenuInflater menuInflater = inflater;
    menuInflater.inflate(R.menu.search_bar_menu, menu);

    MenuItem searchItem = menu.findItem(R.id.action_search);
    SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);

    android.support.v7.widget.SearchView searchView = null;
    if (searchItem != null) {
        searchView = (android.support.v7.widget.SearchView) searchItem.getActionView();
    }
    if (searchView != null) {
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName()));
    }

    if (searchView != null )
    {

        searchView.setOnClickListener(onClickListener);
        searchView.setOnQueryTextListener(onQueryTextListener);
        searchView.setOnCloseListener(onCloseListener);


    }
}

更新:

在我的搜索菜单xml中添加app:showAsAction="ifRoom|collapseActionView"后(感谢@Ashwinikutre)我得到了这个

现在图标可见

enter image description here

并通过删除标题来进行扩展,该标题很好但没有文字颜色和关闭按钮(现在在另一边但是看不见)

enter image description here

2 个答案:

答案 0 :(得分:1)

<item
        android:id="@+id/action_search"
        android:icon="@drawable/ic_search_white_24dp"
        android:orderInCategory="80"
        android:title="@string/action_search"
        app:actionLayout="@layout/search"
        app:showAsAction="ifRoom|collapseActionView" />

<强> search.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="horizontal"
              android:layout_width="wrap_content"
              android:layout_height="match_parent"
              android:gravity="center_vertical">
    <EditText
        android:id="@+id/search"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:minWidth="200dp"
        android:inputType="text|textAutoCorrect"
        android:imeOptions="actionSearch"
        android:background="@android:color/transparent"/>
    <ImageButton
        android:id="@+id/close"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_close_white_24dp"
        android:contentDescription="@string/button_close"
        style="@android:style/Widget.ActionButton"/>
</LinearLayout>

答案 1 :(得分:1)

尝试显式添加以下属性以显示它是搜索视图

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto">
 <item
    android:id="@+id/action_search"
    android:icon="@drawable/search"
    android:orderInCategory="100"
    android:title="@string/search"
    app:actionViewClass="android.support.v7.widget.SearchView"
    app:showAsAction="always"/>

当然,您可能也正确设置了这个

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.global_search, menu);

    final MenuItem item = menu.findItem(R.id.action_search);

    MenuItemCompat.expandActionView(item);

    final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);

    searchView.setQueryHint(getString(R.string.search_customers));

    searchView.setOnQueryTextListener(this);

    return true;
}

让我知道它是否有帮助!