目前我在ActionBar上遇到一个奇怪的问题,特别是三星Galaxy Tab设备。
该应用程序有一个标准的ActionBar(而不是Sherlock)并显示一个SearchView。此视图旨在随时可见。这也很有效。
在SearchView中解除软键盘后出现问题。在Nexus(4.4)或华硕设备(4.0)上,SearchView失去了Focus。在Galaxy Tab上,这不会发生。
如果使用“setOnQueryTextFocusChangeListener”将侦听器设置为SearchView,则仅在请求焦点时调用它。但不是,当用户解雇键盘时。 (这也仅限于这些Galaxy Stuff)。以编程方式使用“clearFocus()”时,会显示并触发两个事件。
这些行为使得使用该应用程序非常糟糕: 1)在SearchView中输入一些文本 2)关闭键盘 3)从操作栏打开菜单(...) 4)在不选择条目的情况下关闭菜单 =>键盘向上滑动,SearchView聚焦
有什么想法吗?我们不想编写自己的实现,这应该是Android核心。
这是一个图像,您可以清楚地看到,在用户取消键盘后,SearchView仍然具有焦点。
我创建了一些小型演示应用程序,可以帮助您了解我的所作所为。
MainActivity 公共类MainActivity扩展了Activity {
protected static final String TAG = "MainActivity";
private SearchView mSearchView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
mSearchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
mSearchView.setQueryHint("Search something");
mSearchView.setIconifiedByDefault(false);
mSearchView.setOnQueryTextFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
Log.d(TAG, "Focus is: " + hasFocus);
Toast.makeText(MainActivity.this, "Focus is: " + hasFocus, Toast.LENGTH_SHORT).show();
}
});
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_browse:
//Just find out how focus changes if another activity is launched
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
startActivity(browserIntent);
return true;
case R.id.action_setFocus:
if (mSearchView != null) {
mSearchView.requestFocus();
}
return true;
case R.id.action_clearFocus:
if (mSearchView != null) {
mSearchView.clearFocus();
}
return true;
default:
if (mSearchView != null) {
mSearchView.clearFocus();
}
return super.onOptionsItemSelected(item);
}
}
}
activity_main.xml中
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:descendantFocusability="beforeDescendants"
android:focusable="true"
android:focusableInTouchMode="true"
tools:context=".MainActivity" >
<EditText
android:id="@+id/testEditText"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:hint="@string/hello_world">
</EditText>
</RelativeLayout>
main.xml(菜单)
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/menu_search"
android:showAsAction="always"
android:focusable="false"
android:actionViewClass="android.widget.SearchView" />
<item
android:id="@+id/action_browse"
android:orderInCategory="100"
android:showAsAction="always"
android:title="Browse"/>
<item
android:id="@+id/action_setFocus"
android:orderInCategory="100"
android:showAsAction="never"
android:title="Set Focus"/>
<item
android:id="@+id/action_clearFocus"
android:orderInCategory="100"
android:showAsAction="never"
android:title="Clear Focus"/>
</menu>
的AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<uses-permission
android:name="android.permission.INTERNET" />
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="18" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.searchviewtest.MainActivity"
android:windowSoftInputMode="stateAlwaysHidden"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
答案 0 :(得分:0)
试试这个:
item
其中{{1}}是您点击的菜单项