11

执行此操作时,我总是认为 textView 为空:

public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.main, menu);

        MenuItem searchItem = menu.findItem(R.id.action_search);
        SearchView searchView = (SearchView) MenuItemCompat
                .getActionView(searchItem);

        int id = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
        TextView textView = (TextView) searchView.findViewById(id);
        textView.setTextColor(Color.WHITE);
}

有谁知道为什么?

4

3 回答 3

36

我正在使用 appcompat v7 的操作栏,我的解决方案是:

TextView searchText = (TextView) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);

希望这有帮助。

于 2014-09-05T18:39:32.563 回答
21

EditText不是一个TextView

尝试这样的事情:

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

希望能帮助到你。

于 2013-10-10T12:30:52.587 回答
1

如果您使用的是 AndroidX,那么您可以在 kotlin 中这样做。

override fun onCreateOptionsMenu(menu: Menu): Boolean {
            // Inflate the menu; this adds items to the action bar if it is present.
            menuInflater.inflate(R.menu.main, menu)
            val searchItem: MenuItem = menu.findItem(R.id.action_search)
            val searchView: SearchView = searchItem.actionView as SearchView
            val searchText: TextView = searchView?.findViewById(androidx.appcompat.R.id.search_src_text);
            searchText.setTextColor(Color.BLACK)
            searchText.background = resources.getDrawable(R.drawable.rounded_corner_background)

            return true
        }
于 2020-05-25T23:16:43.030 回答