我在我的应用程序中使用“编辑文本”字段。当我单击它时,会出现软键盘。但是,当我单击“完成”按钮(位于软键盘上)时,它应该消失但不会消失。我将输入类型设置为布局文件中的文本。我想在按下按钮时隐藏软键盘。
请帮忙。谢谢。
这是我的代码。
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>
最佳答案
我使用此功能:
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() {
[...]
关于android - 如何在Android中隐藏软键盘,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8051012/