2013-05-11 23 views
5

Bir web servisine bağladığım bir otomatik tamamlama görünümü var, bu yüzden yazarken öneri göstermemi sağlayın. Şimdi, kullanıcı otomatik tamamlama açılır menüsünde gezinmeye başladığında yumuşak klavyeyi nasıl gizleyebilirim? Net üzerinden baktım ama otomatik tamamlama açılır menüsünde dokunmalarını algılamak için herhangi bir yöntem bulamadım.Android'de otomatik tamamlama görünümünde açılır menüde gezinirken klavyeyi kapatın

+0

http://developer.android.com/reference/android/view/inputmethod /InputMethodManager.html & http://developer.android.com/reference/android/view/inputmethod/InputMethodManager.html#hideSoftInputFromWindow%28android.os.IBinder,%20int%29 – Sam

cevap

0

Doğru anlıyorsam, açılır listeniz için daha fazla yer bırakacağı için klavyenin kaybolmasını ister misiniz? Belki de bu ilişkilidir: kullanıcı listesini kaydırma ve kullanıcı tekrar textview üzerinde dokunursa, tekrar klavyeyi gösteren başladığında bunun için gelebilir

Scrolling drop-down-menu over the keyboard in autocompletetextview

5

iyi çözüm, klavyeyi saklıyor. Bu, OS sürümlerinin ve cihazlarının çoğunda, dropDownHeight'ın yüksekliğinin ayarlanması gibi görebileceğiniz diğer çözümlerden farklı olarak oldukça fazla çalışır.

Aşağıda, kullanıcı kaydırma yapmaya başladığında klavyeyi gizleyen örnek bir kod verilmiştir. Temel olarak, AutoCompleteTextView bağdaştırıcınızda bir dokunma dinleyicisi oluşturmanız gerekir.

public View getView(final int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    ViewHolder holder; 
    if (convertView == null) { 
     convertView = inflater.inflate(viewResourceId, parent, false); 
     holder = new ViewHolder(); 
     init(convertView, holder); 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    convertView.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 

      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       InputMethodManager imm = (InputMethodManager) getContext() 
         .getSystemService(
           Context.INPUT_METHOD_SERVICE); 
       imm.hideSoftInputFromWindow(
         searchView.getWindowToken(), 0); 
      } 

      return false; 
     } 
    }); 

    setView(position, holder); 
    return convertView; 
} 
+0

parlak !!!!! – Netero

0

XML Bu satır sayesinde bu kaydırma listesinden arkasında klavyeyi yapacak bana

için çalışıyor.

android:dropDownHeight="wrap_content" 
2

Ben bu cevabı almak veya kabul edilen cevap olarak @ ayorhan cevabı olurdu, gerçekten bir açılır seçim kaydırma yaparken klavyeyi görevden işlemek için en iyi yoldur.

Bu, SimpleCursorAdapter ile kullanmak için @ ayorhan'ın çözümünün kapalı bir oyunudur.

public class SimpCursAdap extends SimpleCursorAdapter { 

public SimpCursAdap(Context context, int layout, Cursor c, String[] from, int[] to, int flags) { 
    super(context, layout, c, from, to, flags); 

} 

public View getView(int position, View convertView, ViewGroup parent) { 
    View view = super.getView(position, convertView, parent); 
    view.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View view, MotionEvent motionEvent) { 
      if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { 
       InputMethodManager imm = (InputMethodManager) getContext() 
         .getSystemService(Context.INPUT_METHOD_SERVICE); 
       imm.hideSoftInputFromWindow(
         view.getApplicationWindowToken(), 0); 
      } 
      return false; 
     } 
    }); 
    return view; 
    } 
} 

Sonra her yerde sınıfı örneğini: Özel bir SimpleCursorAdapter sınıf yapmak zorunda

final SimpleCursorAdapter adapter = new SimpCursAdap(aContext, 
      aRowLayout, 
      null, 
      aColNames, 
      aRowViewsIds, 
      0); 
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
adapter.setStringConversionColumn(aValueColId); 
autocompletetextview.setAdapter(adapter); 
u kullanabilir miyim