2010-12-23 14 views
5

Tüm gün boyunca başımı tırmalamaktayım. Sanal klavyeyi çağırdığım zaman aktivitelerimden birinde (ve yalnızca bir tanesinde) kayar çekmece tutamacı bunun üstünde görünür. Uygulamamdaki diğer tüm etkinliklerde bu sorunu düzeltmeyi başardım. Bu, söz konusu etkinliğin de dahil olduğu Manafest.xml dosyasındaki her etkinlikte android: windowSoftInputMode = "adjustPan" yazarak. Ayrıca, aktivitedeki nesnelerin hiçbirinin odaklanamayacağı kadarıyla, odak noktası (eğer nasıl bulacağımı anlayamazsam). Odaklama için this.getCurrentFocus() yöntemini kullanarak kontrol ettim, sonra eğer varsa, görünümde view.clearFocus(). şimdiye kadar hiçbir şeyin odaklanmadığını söyleyebildiğim kadarıyla bir görüş geri dönmedi.Sanal çekmecenin üst kısmından sürgülü çekmeceyi nasıl tutacağınız

herhangi bir fikir?

+1

arasında onCreate() yılında setContext() çağrı emin olun. Eğer çalışan bir çözüm bulursanız, aşağıda mesaj göndermekten çekinmeyin. – keyboardsurfer

cevap

0

Bu benim geçici çözümümdür .. EditText'i tutan etkinlikte, EditText'u genişleten bir alt sınıfa sahibim. Bu alt sınıfta, klavyenin açık olup olmadığını kontrol eden onMeasure() yöntemini geçersiz kıldım. Klavye gizli olup olmadığını

klavye açıksa Sonra aktivitede, çekmece kolu bir 1px x 1px şeffaf görüntüye ayarlanır
public static class MyEditText extends EditText { 
      MyActivity context; 

      public void setContext(MyActivity context) { 
       this.context = context; 
      } 

      @Override 
      protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
       int height = MeasureSpec.getSize(heightMeasureSpec); 
       Activity activity = (Activity)getContext(); 
       Rect rect = new Rect(); 
       activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect); 
       int statusBarHeight = rect.top; 
       int screenHeight = activity.getWindowManager().getDefaultDisplay().getHeight(); 
       int diff = (screenHeight - statusBarHeight) - height; 
       // assume all soft keyboards are at least 128 pixels high 
       if (diff>128) 
        context.showHandle(false); 
       else 
        context.showHandle(true); 

       super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
      } 
    } 

, gerçek kolu gösterilmiştir:

Nihayet
private void showHandle(boolean show) { 
    ImageView drawer_handle = (ImageView) findViewById(R.drawable.handle); 
    if (show) 
      drawer_handle.setImageResource(R.drawable.handle); 
    else 
      drawer_handle.setImageResource(R.drawable.handle_blank); 
} 

, Eğer ben aynı sorunu koştum ve ilk sonucu olarak sorunuzu bulundu MyActivity

MyEditText met = (MyEditText) findViewById(R.id.edit_text); 
met.setContext(this); 
İlgili konular