2016-02-24 159 views
0

我在工具欄的可擴展操作視圖中有一個EditText。當我展開動作時,會顯示EditText,我希望它能夠獲得焦點。爲了實現這個目標我以下:EditText.requestFocus()返回true,但沒有真正把焦點放在視圖

action_layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    android:id="@+id/connections_find_people_container" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent"> 

    <EditText 
     android:id="@+id/connections_find_people_edit" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center_vertical"/> 

</RelativeLayout> 

在我的片段

@Override 
public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) { 
    inflater.inflate(R.menu.add_connection, menu); 
    mAddMenuItem = menu.findItem(R.id.menu_add); 

    MenuItemCompat.setActionView(mAddMenuItem, R.layout.action_layout); 
    mSearchView = MenuItemCompat.getActionView(mAddMenuItem); 

    mSearchEditText = (EditText) mSearchView.findViewById(R.id.connections_find_people_edit); 

    MenuItemCompat.setOnActionExpandListener(mAddMenuItem, mOnSearchExpandListener); 
    super.onCreateOptionsMenu(menu, inflater); 
} 

private final OnSearchExpandListener mOnSearchExpandListener = new MenuItemCompat.OnActionExpandListener { 
     mSearchEditText.requestFocus(); 
     return true; 
    } 

    @Override 
    public boolean onMenuItemActionCollapse(final MenuItem item) { 
     return true; 
    } 
} 

出人意料的是,這是行不通的。點擊工具欄中的動作後,視圖展開,顯示mSearchEditText,但未獲得焦點。

具體地說(古怪),mSearchEditText.requestFocus();返回true,但軟鍵盤仍然未顯示並且在mSearchEditText沒有光標。

顯示軟件鍵盤不是什麼大不了的事,有辦法,迫使它,但即使當我告訴鍵盤,打字不插入任何文本mSearchEditText。只有當光標出現時我點擊mSearchEditText,然後我可以在其中鍵入一些文字。


我已經試過什麼:

  • 在XML和無論是在onCreateOptionsMenu()當動作視圖中展開
  • 結算重點要求它像mSearchEditText.clearFocus()
  • 之前設置 focusablefocusableInTouchMode都和編程
  • 視圖展開後延遲requestFocus()

這真的很奇怪,因爲以下

@Override 
public boolean onMenuItemActionExpand(final MenuItem item) { 
    mSearchEditText.setFocusableInTouchMode(true); 
    mSearchEditText.setFocusable(true); 
    mSearchView.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      if (mSearchEditText.requestFocus()) { 
       KeyboardUtils.showSoftKeyboard(ConnectionsFragment.this); 
      } 
     } 
    }, 300); 
    return true; 
} 

顯示鍵盤,這應該意味着mSearchEditText具有焦點,但打字不輸入任何文字。 (再次,當我點擊EditText時,光標出現,一切正常)。

+0

嘗試改變相對佈局的android:layout_width到match_parent。將一些提示文本設置爲editext以查看效果。 – cgr

回答

0

Aaand有時會發生這種問題,我發現問題後不久我自己找到了答案。

而不是在onCreateOptionsMenu()我不得不使用MenuItem傳遞給onMenuItemActionExpand()並在那裏得到參考。

所以現在這個工作對我來說:

@Override 
public boolean onMenuItemActionExpand(final MenuItem item) { 
    final View actionView = MenuItemCompat.getActionView(item); 
    final View edit = actionView.findViewById(R.id.connections_find_people_edit); 
    if(edit.requestFocus()) { 
     KeyboardUtils.showSoftKeyboard(ConnectionsFragment.this); 
    } 
    return true; 
} 
相關問題