0

enter image description hereキーボードの表示時にダイアログの断片化を無効にする

ピンク色はDialogFragmentです。キーボードが表示されたら、それは上がっていて、ツールバーと重なっていました。どのようにしてダイアログのフラグメントを同じにし、edittextだけを上げることができますか?

私はSOFT_INPUT_ADJUST_PANまたはSOFT_INPUT_ADJUST_RESIZEを使用しますがフラグメントはまだ

SOFT_INPUT_ADJUST_NOTHING上がる:両方のダイアログと編集テキストが同じままに、私は編集テキストが

を上がるすべてのヘルプは理解されるであろうしたいですか?

MainActivity.java:

public class HelloDialogFragment extends DialogFragment { 


    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.dialog_fragment, container, false); 
     return v; 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     Dialog dialog = getDialog(); 
     if (dialog != null && dialog.getWindow() != null) { 
      Window window = dialog.getWindow(); 
      TypedValue tv = new TypedValue(); 
      getContext().getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true); 
      int actionBarHeight = getResources().getDimensionPixelSize(tv.resourceId); 
      int statusBarHeight = (int) getResources().getDimension(R.dimen.status_bar_height); 
      window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 
      window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, 
        WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); 
      window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 
      WindowManager.LayoutParams params = window.getAttributes(); 
      params.gravity = Gravity.LEFT | Gravity.TOP; 
      params.x = 200 + 2 * Utils.dpToPx(8); 
      params.y = statusBarHeight + actionBarHeight + Utils.dpToPx(8); 
      params.width = Utils.screenWidth()/3; 
      params.height = Utils.screenHeight() - statusBarHeight - actionBarHeight - 2 * Utils.dpToPx(8); 
      window.setAttributes(params); 
      dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); 
     } 
    } 

    static class Utils { 

     public static int screenWidth() { 
      return Resources.getSystem().getDisplayMetrics().widthPixels; 
     } 

     public static int screenHeight() { 
      return Resources.getSystem().getDisplayMetrics().heightPixels; 
     } 

     public static int dpToPx(int dp) { 
      return (int) (dp * Resources.getSystem().getDisplayMetrics().density); 
     } 

    } 

} 

dialog_fragment.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#f2f" 
    android:orientation="vertical"> 

    <View 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:layout_weight="1"/> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="#E8E8E8" 
     android:gravity="center_vertical" 
     android:orientation="horizontal"> 

     <EditText 
      android:id="@+id/chatEditText" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_margin="8dp" 
      android:layout_weight="1" 
      android:background="#fff" 
      android:hint="Enter" 
      android:padding="8dp" 
      android:textColor="#B0B0B0" 
      android:textDirection="locale"/> 

     <Button 
      android:id="@+id/sendButton" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginRight="8dp" 
      android:background="@color/colorPrimary" 
      android:padding="8dp" 
      android:text="SEND" 
      android:textColor="#fff"/> 

    </LinearLayout> 

</LinearLayout> 

答えて

0

によって要素をラッピングするコードですビュー(ツールバーに等しい高さ)だから、キーボードが表示されるとき、ダイアログはサイズ変更されますが、上に移動せず、ツールバーをオーバーラップします

0

ちょうど私のアイデアを与えるために。

あなたは FrameLayoutその後 paddingTop同等または同等もしくはより大きなルート要素の marginTopを設定 ToolBar

または

のサイズよりも大きく設定するなど、別のレイアウトによってdialog_fragment.xmlであなたのすべての要素をラップ試してみますToolBar

これが役に立ちそうなら、私はしません。ここで

は、私はそれが まず、ダイアログの断片の高さが一致する親 セカンドを作るの上部に透明のビューを追加実装するのが難しい見つけ FrameLayout最後に

<FrameLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:android:paddingTop=toolBarSize/> 
     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="#f2f" 
      android:orientation="vertical"> 

      <View 
       android:layout_width="0dp" 
       android:layout_height="0dp" 
       android:layout_weight="1"/> 

      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:background="#E8E8E8" 
       android:gravity="center_vertical" 
       android:orientation="horizontal"> 

       <EditText 
        android:id="@+id/chatEditText" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        android:layout_margin="8dp" 
        android:layout_weight="1" 
        android:background="#fff" 
        android:hint="Enter" 
        android:padding="8dp" 
        android:textColor="#B0B0B0" 
        android:textDirection="locale"/> 

       <Button 
        android:id="@+id/sendButton" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_marginRight="8dp" 
        android:background="@color/colorPrimary" 
        android:padding="8dp" 
        android:text="SEND" 
        android:textColor="#fff"/> 

      </LinearLayout> 

     </LinearLayout> 
    </FrameLayout> 
+0

助けてくれてありがとうございました – maphongba008

+0

すべてのレイアウトを 'FrameLayout'でラップし、この 'window.setFlags(WindowManager.LayoutParams.MATCH_PARENT、 WindowManager.LayoutParams.MATCH_PARENT)のような' LayoutParams'; ' –

+0

私のダイアログが位置、幅/高さを固定している必要がありますので、親はのLinearLayoutかでframeLayoutが何であれ、それはsoftInputModeがSOFT_INPUT_ADJUST_PANまたはSOFT_INPUT_ADJUST_RESIZEの場合に移動します。 – maphongba008

関連する問題