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

Просто чтобы дать свою идею.

Вы попробуйте обертывание всех ваших элементов в dialog_fragment.xml другой компоновки, такие как FrameLayout затем установить paddingTop равными или больше, чем размер ToolBar

или

Установки marginTop корневого элемент, равного или большего чем размер 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' и установки верхнего слоя, а затем установки 'LayoutParams' нравится эта ' window.setFlags (WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT); ' –

+0

диалог Мой должно быть фиксированное положение, ширина/высота, поэтому все, что родитель LinearLayout или FrameLayout, это lw будет перемещен вверх, если softInputMode будет SOFT_INPUT_ADJUST_PAN или SOFT_INPUT_ADJUST_RESIZE – maphongba008

 Смежные вопросы

  • Нет связанных вопросов^_^