我正在尝试使用以下代码将EditText扩展到操作栏
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
getMenuInflater().inflate(R.menu.main , menu);
!! MenuItem mi = menu.getItem(R.id.item2);
!!EditText et = (EditText) MenuItemCompat.getActionView(mi).findViewById(R.id.editText1);
et.setOnEditorActionListener(this);
return super.onCreateOptionsMenu(menu);
备注:标有!!的声明导致应用程序崩溃。 我正在使用minSdk 8。
答案 0 :(得分:0)
为自定义操作栏创建布局资源
custom_action_bar.xml
<EditText
android:id="@+id/test_edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Please enter text here !"
android:gravity="center_vertical"
android:padding="5dp"
android:inputType="text" />
您的活动现在将扩展ActionBarActivity而不是Activity。
在super()调用之后的活动的onCreate()中,添加以下代码行:
查看actionBarLayout = getLayoutInflater()。inflate(R.layout.action_bar_layout,null);
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setCustomView(actionBarLayout);
EditText editText = (EditText) actionBarLayout.findViewById(R.id.test_edit);
editText.setOnEditorActionListener(new OnEditorActionListener()
{
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
{
// TODO Auto-generated method stub
Log.e("TAG", "key action");
return false;
}
});
替代方案,您可以尝试添加操作视图http://developer.android.com/guide/topics/ui/actionbar.html#ActionView
答案 1 :(得分:0)
尝试将MenuItem
与其类(MenuItem)
)一起投射,使用findItem
方法并使用虚增View
来检索EditText
,如下所示:
// cast the menu item
MenuItem mi = (MenuItem) menu.findItem(R.id.item2);
// Use an inflated view
View view = (View) MenuItemCompat.getActionView(mi);
// Retrieve the edittext
EditText et = (EditText) view.findViewById(R.id.editText1);
简而言之,作为您的代码,可能会通过以下代码恢复:
MenuItem mi = (MenuItem) menu.getItem(R.id.item2);
EditText et = (EditText) ( (View) MenuItemCompat.getActionView(mi) ).findViewById(R.id.editText1);
确保以true
而不是onCreateOptionsMenu
方式返回super
最后,还要确保该项使用如下自定义前缀:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:customapp="http://schemas.android.com/apk/res-auto" >
<item
android:id="@+id/item2"
customapp:showAsAction="always|collapseActionView"
customapp:actionLayout="@layout/layout_edittext" ... />
</menu>