2011-11-08 3 views
1

J'utilise le champ Modifier le texte dans mon application. quand je clique dessus, le clavier virtuel apparaît. mais quand je clique sur le bouton "DONE" (qui est sur le clavier), il devrait disparaître mais il ne disparaît pas.j'ai défini le type d'entrée comme texte dans le fichier de disposition. Je veux cacher le clavier quand j'appuie sur le bouton. s'il vous plaît aider.Merci à l'avance.comment masquer softkeyboard dans android

Voici mon code.

public class locupdate extends MapActivity implements OnDoubleTapListener{ 

    GeoPoint p,geoPoint; 
    MapView SearchMap; 
    List<Overlay> list; 
    MapController map_controller; 
    LocationManager locationManager; 
    Location location,update_location ; 
    MyLocationOverlay me; 
    Button go_btn,done; 
    String city; 
    int cid; 
    Double lat_update,lng_update; 
    EditText location_entered; 
    @Override 
    public void onCreate(Bundle savedInstanceState){ 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.bingmapupdate); 
     go_btn=new Button(getApplicationContext()); 
     go_btn=(Button)findViewById(R.id.go_button); 

     location_entered=(EditText)findViewById(R.id.enterLocationforSearch); 
     location_entered.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       location_entered.setText(""); 

      } 
     }); 
     done=new Button(getApplicationContext()); 
     done=(Button)findViewById(R.id.button_locationUpdateDone); 
     done.setEnabled(false); 
     done.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
       SharedPreferences.Editor editor=preferences.edit(); 
       String memberid=preferences.getString("unique_userName", null); 

       String lat=Double.toString(lat_update); 
       String lang=Double.toString(lng_update); 
       editor.putString(memberid+"LATITUDE",lat); 
       editor.putString(memberid+"LONGITUDE",lang); 
       //editor.putLong(memberid+"LATITUDE",lat_update); 
       //editor.putLong(memberid+"LONGITUDE",lng_update); 

       editor.commit(); 
       //editor.putString("Location", update_location); 

       //update the "lat_update" , "lng_update" and "update_location" with UID(cell_id) 

       Intent i=new Intent(); 
       i.setClassName("some pkg name here", "some activity name here"); 
       startActivity(i); 

       finish(); 

      } 
     }); 

     SearchMap= (MapView)findViewById(R.id.View_map); 
     //SearchMap.setTraffic(true); 
     SearchMap.setBuiltInZoomControls(true); 
     map_controller=SearchMap.getController(); 
     SearchMap.setClickable(false); 
     map_controller.setZoom(10); 

     MapOverlay mapOverlay = new MapOverlay(); 
     List<Overlay> listOfOverlays = SearchMap.getOverlays(); 
     listOfOverlays.clear(); 
     listOfOverlays.add(mapOverlay);  
     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
     geoPoint=new GeoPoint((int)(location.getLatitude()*1e6),(int)(location.getLongitude()*1e6)); 
     p=geoPoint; 

     // map_controller.animateTo(geoPoint); 

     // SearchMap.invalidate(); 

     go_btn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       location_entered=new EditText(getApplicationContext()); 
       location_entered=(EditText)findViewById(R.id.enterLocationforSearch); 

       String area=location_entered.getText().toString(); 
       BingMapLocationUpdateActivity.this.changeMap(area); 
       SearchMap.setClickable(true); 

      } 
     }); 

    } 

    protected class MapOverlay extends com.google.android.maps.Overlay { 
     @Override 
     public boolean draw(Canvas canvas,MapView map,boolean shadow,long when){ 

      p=geoPoint; 
      //map_controller.animateTo(geoPoint); 
      Paint paint=new Paint(); 
      super.draw(canvas, map, shadow); 
      Point myScreenCoords = new Point(); 
      map.getProjection().toPixels(p, myScreenCoords); 
      paint.setStrokeWidth(1); 
      paint.setARGB(255, 255, 255, 255); 
      paint.setStyle(Paint.Style.STROKE); 
      Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.marker); 
      canvas.drawBitmap(bmp, myScreenCoords.x, myScreenCoords.y, paint); 
      canvas.drawText("I am here...", myScreenCoords.x, myScreenCoords.y, paint); 
      return true; 
     } 
     @Override 
     public boolean onTouchEvent(MotionEvent event,MapView SearchMap) 
     { 
      //Toast.makeText(BingMapLocationUpdateActivity.this, 
      // "Touch Event Listener called", 
      // Toast.LENGTH_SHORT).show(); 

      SearchMap.setClickable(true); 

      drawMarker(event); 
      done.setEnabled(true); 

      return false; 
     } 

    }/*--------------------------------------end of overlay class------------------------------------*/ 
    @Override 
    protected boolean isRouteDisplayed() { 
     // TODO Auto-generated method stub 
     return false; 
    } 
    @Override 
    protected void onDestroy() { 
     super.onStop(); 
    } 
    @Override 
    public boolean onDoubleTap(MotionEvent event) { 
     drawMarker(event); 
     Toast.makeText(BingMapLocationUpdateActivity.this, 
       "onDoubleTap called", 
       Toast.LENGTH_LONG).show(); 
     return false; 
    } 
    @Override 
    public boolean onDoubleTapEvent(MotionEvent event) { 
     drawMarker(event); 
     Toast.makeText(BingMapLocationUpdateActivity.this, 
       "onDoubleTapEvent called", 
       Toast.LENGTH_LONG).show(); 

     return false; 
    } 
    @Override 
    public boolean onSingleTapConfirmed(MotionEvent event) { 
     // TODO Auto-generated method stub 

     drawMarker(event); 
     Toast.makeText(BingMapLocationUpdateActivity.this, 
       "Single Tap Event Listener called", 
       Toast.LENGTH_LONG).show(); 
     return false; 
    } 
    /*-------------------------------------------get clicked location and draw marker---------------------------*/ 
    public void drawMarker(MotionEvent event){ 
     GeoPoint p = SearchMap.getProjection().fromPixels((int) event.getX(),(int) event.getY()); 
     //Toast.makeText(getBaseContext(),p.getLatitudeE6()/1E6 + "," +p.getLongitudeE6() /1E6 ,Toast.LENGTH_SHORT).show(); 
     /*save these latitude and longitude*/ 
     lat_update=p.getLatitudeE6()/1E6; 
     lng_update=p.getLongitudeE6() /1E6; 

     //lat_update=(long)(p.getLatitudeE6()/1E6); 
     //lng_update=(long)(p.getLongitudeE6() /1E6); 

     int X = (int)event.getX();   
     int Y = (int)event.getY(); 
     geoPoint = SearchMap.getProjection().fromPixels(X, Y); 
     //map_controller.animateTo(geoPoint); 

     //int lac = cellLocation.getLac(); 


     // me = new MyLocationOverlay(getApplicationContext(), SearchMap); 
     getLocationName(p); 

    } 
    /*-----------------------------------getLocationName method----------------------------------------*/ 
    public void getLocationName(GeoPoint point_city){ 
     float latitude = point_city.getLatitudeE6()/1000000F; 
     float longitude = point_city.getLongitudeE6()/1000000F; 

     location.setLatitude(latitude); 
     location.setLongitude(longitude); 

     Geocoder gcd = new Geocoder(this,Locale.getDefault()) ; 
     List<Address> addresses = null; 
     try { 
      addresses = gcd.getFromLocation(point_city.getLatitudeE6()/1E6 , point_city.getLongitudeE6() /1E6, 1); 
      //addresses = gcd.getFromLocation(latitude,longitude,5); 
      if (addresses.size() > 0) 
       city=addresses.get(0).getAddressLine(0); 
      String state=addresses.get(0).getAddressLine(1); 
      String country=addresses.get(0).getAddressLine(2); 
      String sb; 
      sb=city+""+state+""+country; 
      //Toast.makeText(getApplicationContext(),sb,Toast.LENGTH_SHORT).show(); 


     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     location_entered.setText(city); 
     /*save city in shared preferences*/ 
     SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
     SharedPreferences.Editor editor=preferences.edit(); 
     editor.putString("city",city); 
     editor.commit(); 

    } 

    /*-------------------------------------------Change Map Method---------------------------------------*/ 

    public void changeMap(String area) 
    { 

     GeoPoint myLocation=null; 

     double lat = 0; 
     double lng = 0; 
     try 
     { 

      Geocoder g = new Geocoder(this, Locale.getDefault()); 

      List<Address> result=g.getFromLocationName(area,5); 
      if(result.size()>0){ 

       //Toast.makeText(BingMapLocationUpdateActivity.this, "country: " + String.valueOf(result.get(0).getCountryName()), Toast.LENGTH_SHORT).show(); 

       lat = result.get(0).getLatitude(); 
       lng = result.get(0).getLongitude(); 
       myLocation=new GeoPoint((int)(lat*1e6),(int)(lng*1e6)); 
       map_controller.animateTo(myLocation); 

      }    
      else{ 
       Toast.makeText(BingMapLocationUpdateActivity.this, "record not found", Toast.LENGTH_SHORT).show(); 
       return; 
      } 
     } 
     catch(IOException io) 
     { 
      Toast.makeText(BingMapLocationUpdateActivity.this, "Connection Error", Toast.LENGTH_SHORT).show(); 
     } 

     //Drawable drawable = this.getResources().getDrawable(R.drawable.androidmarker); 

     map_controller.setZoom(12); 
     //SearchMap.invalidate(); 
    } 


} 

mon fichier de mise en page

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

    <TextView 
     android:id="@+id/bingmapupdate_label" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:background="#FFFFFF" 
     android:text="Google Maps" 
     android:textColor="#ff000000" > 
    </TextView> 

    <EditText 
     android:id="@+id/enterLocationforSearch" 
     android:layout_width="170dp" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/bingmapupdate_label" 
     android:layout_marginTop="30dp" 
     android:layout_toLeftOf="@+id/go_button" 
     android:layout_toRightOf="@+id/enterLocation_label" 
     android:inputType="text" 
     android:singleLine="true" 
     android:text="search" > 
    </EditText> 

    <com.google.android.maps.MapView 
     android:id="@+id/View_map" 
     android:layout_width="fill_parent" 
     android:layout_height="250dp" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/enterLocationforSearch" 
     android:apiKey="GOOGLE_API_KEY" > 
    </com.google.android.maps.MapView> 

    <Button 
     android:id="@+id/go_button" 
     android:layout_width="50dp" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@+id/enterLocationforSearch" 
     android:layout_alignBottom="@+id/enterLocationforSearch" 
     android:layout_alignParentRight="true" 
     android:background="@drawable/btn_ng" 
     android:text="Go" > 
    </Button> 

    <Button 
     android:id="@+id/button_locationUpdateDone" 
     android:layout_width="wrap_content" 
     android:layout_height="25dp" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:background="@drawable/btn_ng" 
     android:text="DONE" > 
    </Button> 

    <TextView 
     android:id="@+id/enterLocation_label" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@+id/enterLocationforSearch" 
     android:layout_alignBottom="@+id/enterLocationforSearch" 
     android:layout_marginLeft="20dp" 
     android:text="Enter City" 
     android:textColor="#111111" > 
    </TextView> 

</RelativeLayout> 
+0

vérifier cette .... http: //stackoverflow.com/questions/7289335/soft -keyboard-montre-sur-edittext-focus-only-once/7291121 # 7291121 –

+0

duplication possible de [Comment fermer/cacher le clavier logiciel Android?] (http://stackoverflow.com/questions/1109022/how -to-fermer-cacher-le-clavier-android-doux-clavier) – vcsjones

Répondre

7

J'utilise cette fonction:

public static void hideSoftInput(Context ctx) 
{ 
    InputMethodManager inputManager = (InputMethodManager) ctx.getSystemService(INPUT_METHOD_SERVICE); 
    inputManager.hideSoftInputFromWindow(new View(ctx).getWindowToken(), 0); 
} 

Pour votre cas particulier, vous pouvez utiliser ceci:

location_entered.setOnKeyListener(new View.OnKeyListener() 
    { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) 
     { 
      if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER) 
      { 
       // code to hide the soft keyboard 
       InputMethodManager imm = (InputMethodManager) getSystemService(
        Context.INPUT_METHOD_SERVICE); 
       imm.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0); 
      } 
      return false; 
     } 
    }); 

après cette partie de votre onCreate:

location_entered.setOnClickListener(new View.OnClickListener() { 
    [...] 
+0

comment puis-je appeler n'importe quelle méthode quand j'appuie sur le bouton fait du clavier d'entrée douce? il faut le cacher quand je clique sur le clavier d'entrée soft ... – puneetbhardwaj

+0

C'est bizarre que le bouton Terminé ne le cache pas automatiquement. J'ai essayé dans mon application et c'est le cas. Pouvez-vous ajouter votre mise en page? – SERPRO

0

façon facile de le faire ...

 getWindow().setSoftInputMode(
     WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
Questions connexes