Android的动作条自定义搜索查看(Android ActionBar Customize Sea

2019-07-17 19:24发布

---解决的问题-加入编辑文本解答---

我使用的是ActionBar在我的Android应用程序福尔摩斯。 在那里,我想显示SearchView 。 它工作正常,到目前为止,但我意识到,试图来定制它,当我做错事。

我创建这样说:

searchView.setQueryHint("Search: ");
searchView.setOnQueryTextListener(this);
searchView.setOnCloseListener(...);

searchMenuItem = menu.add("Search place");
searchMenuItem.setIcon(R.drawable.ic_action_search)
              .setActionView(searchView)
              .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM |  MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);

我希望做两件事情:

  1. 更改文本“搜索”,这是在出现的文本字段中显示的颜色。 它看起来像我在我的主题整体的文本样式改变,但我希望我能以某种方式设置一个单独的颜色。

  2. 当打开这个搜索查看,它出现在操作栏的左侧。 但我需要它的右侧。 图标(放大镜)实际上是对栏的右侧,但按它打开左侧的EditTextfield。 我试图用的LayoutParams但尝试使用的LayoutParams将其添加到操作栏时,我想的东西是必不可少的。

所以希望有人可以帮助我这一点。

非常感谢你,托比亚斯

---- ----编辑

好了,有一件事是已经解决了这个问题。 通过XML添加动作条使得文本编辑的权利。

getSupportMenuInflater().inflate(R.menu.activity_main, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) searchItem.getActionView();
Log.e(TAG, "searchView: " + searchView);

在我menu.xml文件

<item android:id="@+id/action_search"
 android:title="Search"
 android:icon="@drawable/ic_action_search"          
 android:showAsAction="always"
 android:actionViewClass="com.actionbarsherlock.widget.SearchView" />

所以至少一个谜解(为什么这个曾经做了一个差异)。 但是,当调用新创建的XML不收了

searchMenuItem.collapseActionView();

所以,还有什么不妥的地方。

---编辑2 ---

只是让你知道。 我发现文本颜色的解决方案。 它可以通过搜索查看的AutoCompleteTextView来实现:

AutoCompleteTextView searchText = (AutoCompleteTextView) searchView.findViewById(R.id.abs__search_src_text);
searchText.setHintTextColor(getResources().getColor(R.color.white));
searchText.setTextColor(getResources().getColor(R.color.white));    

所以,最后一个问题我是在提交文本时,搜索查看不打烊任何更长的时间。 所以collapseActionView()等不能正常工作。 有任何想法吗?

---编辑3 ---

好吧,我找到了解决办法。 我不知道这是但正确的方式做,当使用

((SearchView) searchMenuItem.getActionView()).setIconified(true);

它关闭EditText

我必须这样做两次,因为第一次只“删除”我的输入文字,并显示“提示”,而第二个用途是“关闭”的提示的EditText,崩塌的搜索查看的放大镜。 笨拙的风格,但它的工作原理。 :-)

Answer 1:

我做了一个类SearchViewFormatter轻松格式化本地搜索查看Android小工具。 一个例子:

new SearchViewFormatter()
            .setSearchBackGroundResource(R.drawable.my_bg)
            .setSearchIconResource(R.drawable.my_ic, true, false) //true to icon inside edittext, false to outside
            .setSearchVoiceIconResource(R.drawable.my_ic)
            .setSearchTextColorResource(R.color.my_color)
            .setSearchHintColorResource(R.color.my_color)
            .setSearchCloseIconResource(R.drawable.my_ic)
            .setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS)
            .format(mSearchView);


Answer 2:

FYI现在动作条支持V7程序兼容性变革查询提示的颜色,文本颜色,文本大小的方法:

import android.support.v4.view.MenuItemCompat;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.SearchView.SearchAutoComplete;

...

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_home, menu);
    MenuItem searchItem = menu.findItem(R.id.item_search);
    mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem);
    mSearchView.setOnQueryTextListener(this);
    mSearchView.setQueryHint(getString(R.string.text));
    SearchAutoComplete searchAutoComplete = (SearchAutoComplete) mSearchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
    searchAutoComplete.setHintTextColor(mRes.getColor(android.R.color.white));
    searchAutoComplete.setTextSize(14);

    return super.onCreateOptionsMenu(menu);
}


Answer 3:

我做了编辑文本像这样的圆角。

int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_plate", null, null);
        View searchPlate = searchView.findViewById(searchPlateId);
        searchPlate.setBackgroundResource(R.drawable.bg_white_rounded);

        int searchSrcTextId = getResources().getIdentifier("android:id/search_src_text", null, null);
        EditText searchEditText = (EditText) searchView.findViewById(searchSrcTextId);
        searchEditText.setTextColor(Color.BLACK);
        searchEditText.setHintTextColor(Color.LTGRAY);

        int closeButtonId = searchView.getContext().getResources().getIdentifier("android:id/search_close_btn", null, null);
        ImageView closeButtonImage = (ImageView) searchView.findViewById(closeButtonId);
        closeButtonImage.setColorFilter(ContextCompat.getColor(MainActivity.this, R.color.colorPrimary), PorterDuff.Mode.SRC_IN);

bg_white_background.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#ffffff"/>
    <corners android:radius="8dp"/>
</shape>

<SearchView
                android:id="@+id/searchView"
                android:layout_width="match_parent"
                android:queryHint="Serach"
                android:layout_height="match_parent"></SearchView>


Answer 4:

要解决你的号码2的问题

改变这一行:

.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM |  MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);

至:

.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

仅使用SHOW_AS_ACTION_IF_ROOM上参数setShowAsAction()方法



文章来源: Android ActionBar Customize Search View