2013-03-24 2 views
0

EditText 요소를 내 ActionBar에 안드로이드 프로그램에 추가했습니다. 아이콘을 클릭하면 EditText 요소가 나타나며 Enter 키를 누르면 데이터가 입력되고 캡처됩니다. EditText 요소를 사라지게하고 아이콘을 다시 표시하려면 어떻게합니까? 현재 EditText 필드는 ActionBar에 남아 있으며 아이콘은 숨겨져 있습니다. 아래는 내 메뉴 XML 파일입니다. 어떤 도움을 주셔서 감사합니다. 여기 액션 바에서 아이콘을 재설정하는 방법

그리고

 <menu xmlns:android="http://schemas.android.com/apk/res/android" > 

<item 
    android:id="@+id/action_settings" 
    android:orderInCategory="100" 
    android:showAsAction="never" 
    android:title="@string/action_settings"/> 
    <item 
    android:id="@+id/herbsearch" 
    android:title="HerbSearch" 
    android:showAsAction="always" 
    android:icon="@android:drawable/ic_menu_search" 
    /> 
    <item 
    android:id="@+id/locationchange" 
    android:title="Change Location" 
    android:showAsAction="ifRoom|collapseActionView" 
    android:icon="@drawable/ic_launcher" 
    android:actionLayout="@layout/search_layout" 
    /> 

내 글고 레이아웃입니다.

그리고 아래에있는 내의 onCreateOptionsMenu 논리입니다

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="match_parent" 
android:orientation="horizontal" > 

<EditText 
    android:id="@+id/txt_search" 
    android:inputType="text" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="#FFFFFF" 
    android:textColor="#000000" 
    android:textSize="15sp" 
    android:singleLine="true" 
    android:hint="Enter new location" 
    android:imeOptions="actionDone" 
/> 

.

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.main, menu); 

    /** Get the action view of the menu item whose id is search */ 
    View v = (View) menu.findItem(R.id.locationchange).getActionView(); 

    /** Get the edit text from the action view */ 
    EditText locSearch = (EditText) v.findViewById(R.id.txt_search); 
    locSearch.requestFocus(); 
    /** Setting an action listener */ 
    locSearch.setOnEditorActionListener(new OnEditorActionListener() { 

     @Override 
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
     // Toast.makeText(getBaseContext(), "Search : " + v.getText(), Toast.LENGTH_SHORT).show(); 

      GetMap(String.valueOf(v.getText())); 
      invalidateOptionsMenu(); 

      /** Get the edit text from the action view */ 
      EditText locSearch = (EditText) v.findViewById(R.id.txt_search); 

     // I tried these next 3 instructions with no success 
     // locSearch.setVisibility(1); 

     // v.setTextColor(Color.WHITE); 

     // v.setVisibility(1); 
      return false; 

     } 
    }); 
    } 
+0

내 대답이 정확하다고 생각되면 올바른 대답으로 받아 들여주세요. 고맙습니다. –

답변

1

이 시도 :

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main, menu); 

    final MenuItem locationItem = menu.findItem(R.id.locationchange); 
    View v = (View) locationItem.getActionView(); 
    EditText locSearch = (EditText) v.findViewById(R.id.txt_search); 
    locSearch.requestFocus(); 

    locSearch.setOnEditorActionListener(new OnEditorActionListener() { 
     @Override 
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
      if (actionId == EditorInfo.IME_ACTION_SEARCH || (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) { 
       locationItem.collapseActionView(); 
       return true; 
      } 
      return false; 
     } 
    }); 
} 

는 I는 최종 라인의 MenuItem locationItem = menu.findItem (R.id.locationchange)를 첨가; 위치 변경 메뉴 항목을 검색하려면 locationItem.collapseActionView();를 호출합니다. 액션 뷰/검색 뷰를 제거합니다.

+0

좋아요! 제안 해 주셔서 감사합니다. 마지막 MenuItem을 삽입했습니다. locationItem = menu.findItem (R.id.locationchange); 명령을 onCreateOptionsMenu 메서드에 추가했지만 location.Item.collapseActionView(); 지시문 바로 전에 OnEditorActionListener 메서드에서 GetMap을 호출했습니다. 입력 한 경우 – Dave

+0

마지막 코멘트가 죄송합니다. 반복하기 - 제안에 감사드립니다. GetMap()을 호출 한 후 루틴을 삽입하면 원하는대로 작동합니다. collapseActionView를 호출해야한다는 것을 알고 있었지만 아직 초보자 인 경우 메뉴 항목을 가져 오는 방법을 알지 못했습니다. 너희들은 Stack Overflow에서 내 목숨을 구하고있다. – Dave

+1

당신을 진심으로 환영합니다. 그렇다면 올바른 답으로 표시하는 것은 어떻습니까? ;-) –

관련 문제