1

ここにこれらのいずれかがまだ存在しないことを確認するために、しばらくオンラインで探していましたが、何らかの理由で、これを機能させる正確な方法を見つけることができないようで、4時間試した後、質問することにしました専門家。

私は今、ウィンドウがロードされたときに onFocusChangeListener を持つと思われるクラスを持っています。これは、背景をクリックしてソフトキーボードを非表示にするときにトリガーされると想定されています。

要するに、バックグラウンドをクリックしてキーボードを非表示にしたときにクラスをリッスンするように修正するにはどうすればよいでしょうか。

これまでの私のコードは次のとおりです: (レイアウトをフォーカス可能かつクリック可能にしたことを覚えておいてください)

package com.example.haymaker;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;

public class addAppointment extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.appointment);
    final EditText appointmentName = (EditText) findViewById(R.id.editText1);

    appointmentName.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {
                InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(appointmentName.getWindowToken(), 0);

            }
        }
    });


    }

}

ご協力ありがとうございます

4

2 に答える 2

0

onFocuschanged リスナーを使用しないでください。. 画面全体をカバーする LinearLayout のように、Outter レイヤーに OnTouchListener を実装するだけです。そしてそのイベントで、キーボードを非表示にします。

この例を参照してください。

    MainActivity.java
package com.at.keyboardhide;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnTouchListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.LinearLayout;

import com.at.bugsfixing.R;

public class MainActivity extends Activity implements OnTouchListener{
 private EditText getEditText;
 private LinearLayout getLinearLayout;
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 this.getWindow().setSoftInputMode(
 WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
 requestWindowFeature(Window.FEATURE_NO_TITLE);
 setContentView(R.layout.keyboardmain);
 getEditText = (EditText)findViewById(R.id.editText1);
 getLinearLayout = (LinearLayout)findViewById(R.id.LinearLayout01);
 getLinearLayout.setOnTouchListener(this);
 }
 @Override
 public boolean onTouch(View v, MotionEvent event) {
 if(v==getLinearLayout){
 InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
 imm.hideSoftInputFromWindow(getEditText.getWindowToken(), 0);
 return true;
 }
 return false;
 } 
} 

それは私にとって完璧に機能し、あなたにも役立つことを願っています.

楽しみ。:)

于 2012-02-25T04:25:20.793 に答える