2011-11-08 207 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);