搜索框如何去除蓝色焦点线并在特定位置显示光标

14

我一直在尝试去掉SearchView中的蓝色焦点线。我将其强制转换为AutoCompleteTextView,以便可以使用自定义图标来设置搜索视图。

    int id = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
    searchtextView = (AutoCompleteTextView) searchView.findViewById(id); 

我已经尝试过使用

searchtextView.setBackGroundColor(0) 

我手动在XML中将背景设置为#0000000,但仍然可以看到底部的蓝色线。

我面临的第二个问题是,初始时光标不会显示在文本上。我希望在搜索视图中没有输入内容时显示光标。我尝试通过编程方式实现,使用以下方法:

if (searchtextView.getText().toString().length() >= 0) {
   searchtextView.setSelection(searchtextView.getText().toString().length());
 }

即使在搜索视图内没有文本存在时,也应该显示光标。我认为这与焦点有关,因为当我输入2-3个字符时,光标会自动显示。


android:background = @android:color/transparent。这将移除蓝线。 - Rahul Gupta
我尝试过这样做,但是蓝色线条并没有消失。background属性只是将Searchview的背景设置为透明,并不能去除焦点线。 - luckysing_noobster
3个回答

28

我可以通过将默认搜索视图平台的背景设置如下来解决它

int searchPlateId = searchView.getContext().getResources()
            .getIdentifier("android:id/search_plate", null, null);
    View searchPlateView = searchView.findViewById(searchPlateId);
    if (searchPlateView != null) {
        searchPlateView.setBackgroundColor(Color.BLACK);
    }

这篇文章很有用。文章链接


1
你帮我省了好几个小时,伙计。 - Mightian

2

您可以使用

android:queryBackground="@android:color/transparent"

2
Android API最低版本为21级。 - Xero

0

我成功地通过在菜单创建函数期间清除搜索编辑文本的焦点来使其工作。以下是代码:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);

        ...

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

        if (searchItem != null) {
            // Associate searchable configuration with the SearchView
            SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
            final SearchView view = (SearchView) searchItem.getActionView();
            if(view !=null){
                LinearLayout searchPlate = (LinearLayout)mSearchView.findViewById(R.id.search_plate);
                if(searchPlate != null){
                    mSearchEditText = (EditText)searchPlate.findViewById(R.id.search_src_text);
                    if(mSearchEditText != null){
                        mSearchEditText.clearFocus();     // This fixes the keyboard from popping up each time
                    }
                }
            }
        }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接