前提・実現したいこと
Android javaの質問です。
Serviceでオーバーレイ表示したレイアウトにEditTextを表示させ、その中にEditTextに文字を入力したいです。(PCの最前面に表示され続ける付箋ソフトのようなイメージです)
発生している問題・エラーメッセージ
EditTextをタッチしてもキーボードが表示されません。
現状、オーバーレイ表示やオーバーレイ中のボタンクリックは問題ないです。
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
↑を削除すればEditTextをタッチした際にキーボードが表示されますが、今度はレイアウト外をタッチした際の反応がなくなってしまいます。
EditText内をタッチした時のみFLAG_NOT_FOCUSABLE除外する、
もしくは別の方法でキーボードを表示させるにはどのようなどのような記述をすればよいのでしょうか。
該当のソースコード
public class Activity_Sub1 extends Service {
View view; WindowManager wm; // ***** 追加 ***** WindowManager.LayoutParams params; private float downX; private float downY; private int dpScale; @Override public void onCreate() { super.onCreate(); dpScale = (int) getResources().getDisplayMetrics().density;
}
@Override public int onStartCommand(Intent intent, int flags, int startId) { super.onStartCommand(intent, flags, startId); LayoutInflater layoutInflater = LayoutInflater.from(this); // ***** 修正 ***** params = new WindowManager.LayoutParams( WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, PixelFormat.TRANSLUCENT); wm = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE); view = layoutInflater.inflate(R.layout.overlay, null); wm.addView(view, params); view.findViewById(R.id.myView1).setOnTouchListener(moving); EditText et = view.findViewById(R.id.etl); HelloListener listener = new HelloListener(); stopBtn.setOnClickListener(listener); return START_STICKY; } final View.OnTouchListener moving = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { downX = Math.round(event.getRawX()); downY = Math.round(event.getRawY()); if (event.getAction() == MotionEvent.ACTION_DOWN) { return true; } else if (event.getAction() == MotionEvent.ACTION_MOVE) { // ***** 追加 ***** Point displaySize = new Point(); wm.getDefaultDisplay().getSize(displaySize); int centerX = Math.round(downX - displaySize.x / 2); int centerY = Math.round(downY - displaySize.y / 2); params.x = centerX; params.y = centerY; wm.updateViewLayout(view, params); return true; } return false; } }; private class HelloListener implements OnClickListener{ @Override public void onClick(View v){ Log.v("Button","onClick"); int id = v.getId(); EditText et = view.findViewById(R.id.etl); HelloListener listener = new HelloListener(); et.setOnClickListener(listener); }
試したこと
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | の削除
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー