执行此操作时,我始终认为textView为null:
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);
}
任何人都知道为什么?
答案 0 :(得分:34)
我正在使用appcompat v7的操作栏,我的解决方法是:
TextView searchText = (TextView) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
希望得到这个帮助。
答案 1 :(得分:15)
这是EditText
而不是TextView
。
尝试类似的东西:
int id = searchView.getContext()
.getResources()
.getIdentifier("android:id/search_src_text", null, null);
EditText editText = (EditText) searchView.findViewById(id);
希望它有所帮助。
答案 2 :(得分: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
}