2011-11-08 161 views
1

我正在使用我的应用程序中的编辑文本字段。当我点击它软键盘出现。但是当我点击“完成”按钮(这是在软键盘上),它应该消失,但它不会消失。我将输入类型设置为布局文件中的文本。当我按下按钮时,我想隐藏软键盘。 请help.Thanks提前。如何在android中隐藏软键盘

这是我的代码。

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(); 
    } 


} 

我的布局文件

<?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

检查这个.... HTTP://stackoverflow.com/questions/7289335/soft -keyboard-shows-up-on-edittext-focus-only-once/7291121#7291121 –

+0

[如何关闭/隐藏Android软键盘?](http://stackoverflow.com/questions/1109022/how - 关闭 - 隐藏的安卓软键盘) – vcsjones

回答

7

我用这个函数:

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

为您的特定情况下,你可以使用这个:

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; 
     } 
    }); 

这部分您的onCreate后:

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

当我从软输入键盘按完成按钮时,如何调用任何方法?它必须隐藏,当我点击完成软输入键盘... – puneetbhardwaj

+0

它是奇怪的,完成按钮不会自动隐藏它。我尝试在我的应用程序,它确实。你能添加你的布局吗? – SERPRO

+0

<?XML版本= “1.0” 编码= “UTF-8”?> <的EditText机器人:layout_height = “WRAP_CONTENT” 机器人:文本= “搜索” \t机器人:layout_width = “170dp” 机器人:ID = “@ + ID/enterLocationforSearch” \t机器人:的inputType = “文本” \t机器人:layout_below = “@ + ID/bingmapupdate_label” 机器人:单线= “真” \t机器人:layout_toLeftOf = “@ + ID/go_button” \t> puneetbhardwaj

0

简单的方法来做到这一点...

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