2016-12-13 4 views
0

EditTextをクリックすると、EditTextのサービスでフローティングレイアウトが使用されていますが、キーボードは表示されていますがレイアウトは調整されていません。私は2日間掘り下げており、答えはどれも私のために働いていません。私はマニフェストでwindowSoftInputModeを設定し、setFitsSystemWindowsを私のレイアウトでもtrueに設定しました。サービスのレイアウトはキーボードで調整されません

FloatingService.java

public class FloatingService extends Service implements View.OnClickListener { 
private WindowManager windowManager; 
private LinearLayout contentLayout; 

private View mainView; 


@Override 
public void onCreate() { 
    super.onCreate(); 
    windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 

    WindowManager.LayoutParams mainParams = getMainParams(); 
    contentLayout = new LinearLayout(this); 

    contentLayout.setFitsSystemWindows(true); 

    windowManager.addView(contentLayout, mainParams); 

    LayoutInflater layoutInflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    mainView = layoutInflater.inflate(R.layout.content_floating_iv, contentLayout); 

    EditText editText = (EditText) mainView.findViewById(R.id.editText); 
    editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View view, boolean b) { 
      InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
      inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); 
     } 
    }); 
} 

@Nullable 
@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

@Override 
public void onClick(View view) { 

} 



@Override 
public void onDestroy() { 
    if (contentLayout != null) { 
     windowManager.removeView(contentLayout); 
    } 
    super.onDestroy(); 
} 

private WindowManager.LayoutParams getMainParams() { 
    WindowManager.LayoutParams mainParams = new WindowManager.LayoutParams(
      WindowManager.LayoutParams.MATCH_PARENT, 
      WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.TYPE_PHONE, 
      WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
      PixelFormat.TRANSLUCENT); 

    mainParams.gravity = Gravity.BOTTOM ; 
    mainParams.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; 

    return mainParams; 
} 

マニフェスト

<service 
     android:name="com.jibmobile.pogotoolkit.services.FloatingService" 
     android:windowSoftInputMode="stateVisible|adjustResize"/> 
+0

、あなたはそれがFacebookのchatheadのように、すべてのアプリケーションの上に浮いているように持っているサービス –

+0

の代わりに活動を使用することができます。あなたは私の知る限り、ただの活動でそれをすることはできません –

答えて

0

[OK]を、それは私が使っていたFLAGであることが判明したので。以下のコードは私の問題を解決しました。あなたがサービスをuysingているのはなぜ

WindowManager.LayoutParams mainParams = new WindowManager.LayoutParams(
     WindowManager.LayoutParams.MATCH_PARENT, 
     WindowManager.LayoutParams.WRAP_CONTENT, 
     WindowManager.LayoutParams.TYPE_PHONE, 
     WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, 
     PixelFormat.TRANSLUCENT); 
関連する問題