2012-12-21 24 views
6

MenuItems'in searchIcon'u için bir ActionLayout var. Bu ActionLayout, imeOption = "actionSearch" olan bir AutoCompleteTextView'a sahip.Yumuşak klavyede arama simgesi

MenüItems ve ActionLepout öğelerini tıklattığımda, yazılım klavyesi açılır, ancak yine de searchIcon yerine yeni satır anahtarı vardır.

Etkinlik kodu:

private AutoCompleteTextView mEtSearchbar; 
private MenuItem mSearchbar; 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 

    case R.id.searchIcon: 

     mEtSearchbar.clearFocus(); 
     (new Handler()).postDelayed(new Runnable() { 
      public void run() { 
       mEtSearchbar.dispatchTouchEvent(MotionEvent.obtain(
         SystemClock.uptimeMillis(), 
         SystemClock.uptimeMillis(), 
         MotionEvent.ACTION_DOWN, 0, 0, 0)); 
       mEtSearchbar.dispatchTouchEvent(MotionEvent.obtain(
         SystemClock.uptimeMillis(), 
         SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, 
         0, 0, 0)); 
      } 
     }, 100); 
     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    // TODO Auto-generated method stub 
    inflater.inflate(R.menu.m_menu, menu); 


    mSearchbar = (MenuItem) menu.findItem(R.id.searchIcon); 
    View actionview = mSearchbar.getActionView(); 
    mEtSearchbar = ((AutoCompleteTextView) actionview 
      .findViewById(R.id.search_editText)); 
    final ImageView searchImage = ((ImageView) actionview 
      .findViewById(R.id.search_image)); 
    searchImage.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 

      String s = mEtSearchbar.getText().toString(); 

       Intent intent = new Intent(getSherlockActivity(), 
         SearchActivity.class); 
       intent.putExtra("search_string", s); 
       startActivity(intent); 
     } 
    }); 

    mEtSearchbar 
      .setOnEditorActionListener(new TextView.OnEditorActionListener() { 

       @Override 
       public boolean onEditorAction(TextView v, int actionId, 
         KeyEvent event) { 
        if (actionId == EditorInfo.IME_ACTION_SEARCH) { 

         searchImage.performClick(); 
         return true; 
        } 
        return false; 
       } 
      }); 

    super.onCreateOptionsMenu(menu, inflater); 
} 

* menü Layou * t

m_menu.xml

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

    <item 
     android:id="@+id/searchIcon" 
     android:actionLayout="@layout/search_icon_actionview" 
     android:icon="@drawable/search_icon" 
     android:showAsAction="ifRoom|collapseActionView" 
     android:title="Search"/> 
    <item 
     android:id="@+id/notificationIcon" 
     android:icon="@drawable/notification_icon" 
     android:orderInCategory="0" 
     android:showAsAction="ifRoom|collapseActionView" 
     android:title="Notifications"/> 

</menu> 

search_icon_actionview.xmltıklamada i var searcIcon ait tıklama gerçekleştirmelisiniz yumuşak klavyede bir searchIcon veya en az bir bitti düğmesine, ActionLayout

Teşekkür sahip Nasıl

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

    <ImageView 
     android:id="@+id/search_image" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:layout_alignParentRight="true" 
     android:clickable="true" 
     android:contentDescription="Search icon" 
     android:src="@drawable/search_icon" /> 

    <AutoCompleteTextView 
     android:id="@+id/search_editText" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_toLeftOf="@id/search_image" 
     android:hint="Search" 
     android:imeOptions="actionSearch" /> 

</RelativeLayout> 

cevap

12

Ben

android:singleLine="true" 
eklemek zorunda

ayrıca

İlgili konular