DialogFragment 지 않는 크기를 조정하는 경우 키보드 표시

나는'm 를 사용하려고 시도SherlockDialogFragment하는 물에서 입력 사용자. 모든 것을 전(갤럭시 넥서스,4.2),그러나 더 작은 휴대 전화(에뮬레이터 2.3.3),경우 키보드 보여줍니다,그것을 커버의 두 개의 버튼 DialogFragment 은 다음과 같습니다.

나의 레이아웃 안에 스크롤,그리고 나는'm 을 변경하 softInputMode 을SOFT_INPUT_ADJUST_RESIZEonViewCreated. 도SOFT_INPUT_ADJUST_PAN,그리고 그't work

MyCustomDialog.java

public class AddTaskDialog extends SherlockDialogFragment implements OnDateSetListener{
//...
    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
    }
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the Builder class for convenient dialog construction
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        this.inflater =  getActivity().getLayoutInflater();
        View mainView =inflater.inflate(R.layout.custom_dialog, null);
        builder.setView(mainView);
        this.taskNote = (EditText) mainView.findViewById(R.id.ET_taskNote);
        this.taskText = (EditText) mainView.findViewById(R.id.ET_taskText);
        this.taskValue = (EditText) mainView.findViewById(R.id.ET_taskValue);
        /*
         * Other stuff
         */
        builder.setTitle(getString(R.string.new_task, hType.toString()))
               .setPositiveButton(R.string.dialog_confirm_button, new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                    //...
                    }
               })
               .setNegativeButton(R.string.dialog_cancel_button, new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                       // User cancelled the dialog
                   }
               });
        // Create the AlertDialog object and return it
        return builder.create();
    }
}

그리고 여기 나의 레이아웃:

custom_dialog.xml

<?xml version="1.0"encoding="utf-8"?> <스크롤 xmlns:안드로이드="http://schemas.android.com/apk/res/android" 안드로이드:layout_width="match_parent" 안드로이드:layout_height="match_parent">

<LinearLayout 
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" 
android:background="@color/abs__background_holo_light">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:paddingLeft="@dimen/activity_vertical_margin"
        android:paddingRight="@dimen/activity_vertical_margin">
        <TextView
            android:id="@+id/TV_taskText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/task_text"
            android:textAppearance="?android:attr/textAppearanceLarge" />
        <EditText
            android:id="@+id/ET_taskText"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ems="10"
            android:hint="@string/create_task_hint"
            android:inputType="textNoSuggestions"
            android:singleLine="true" />

    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="@dimen/activity_vertical_margin"
        android:paddingRight="@dimen/activity_vertical_margin" >
        <TextView
            android:id="@+id/TV_taskNote"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/task_note"
            android:textAppearance="?android:attr/textAppearanceLarge" />

        <EditText
            android:id="@+id/ET_taskNote"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:minLines="2"
            android:layout_weight="1"
            android:ems="10"
            android:inputType="textMultiLine"
            android:hint="@string/task_note_hint">

        </EditText>

    </LinearLayout>
    <LinearLayout
        android:id="@+id/repeat_days"
        android:layout_width="wrap_content"
        android:layout_height="48dp"
        android:layout_gravity="top"
        android:orientation="horizontal"
        android:visibility="gone"
        android:paddingLeft="@dimen/activity_vertical_margin"
        android:paddingRight="@dimen/activity_vertical_margin">
        <!-- Day buttons are put here programatically -->
    </LinearLayout>
</LinearLayout>

</스크롤>

그래서,당신은 나에게 도움이 될 수,그리고 나를 안내하는 방법에 대하여 그의 버튼? 을 보거나 그것의 크기를 조정...

나는 단지를 사용하여 다음 줄에서 내 DialogFragment:

getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

과 아무것도 여기를 참조하십시오 전체 예제:

    public class TextEditor extends DialogFragment {

    public TextEditor () {

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_text_editor, container);

        //set to adjust screen height automatically, when soft keyboard appears on screen 
        getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

        //[add more custom code...]
        return view;
    }
}
해설 (2)
해결책

설정windowSoftInputMode속성을adjustNothing 에서``AndroidManifest.xml의 활동을 사용하는 대화 조각입니다.


...

그리고onCreateDialog을 숨기려면 소프트 입력:

...
Dialog dialog = builder.create();
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
return dialog;
}

참고:https://developer.android.com/training/keyboard-input/visibility.html#ShowOnStart

해설 (3)

비록 그것이 조금 늦에 대한 답변,때문에 이 질문은 DialogFragment,다음과 같은 코드를 해결이 내 문제입니다.

@Override
public void onCreate(Bundle savedInstanceState) {
    ...

    // Setting STYLE_NO_FRAME allows popup dialog fragment to resize after keyboard is shown
    setStyle(DialogFragment.STYLE_NO_FRAME, R.style.theme_popupdialog_style);
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    final Dialog dialog = super.onCreateDialog(savedInstanceState);
    dialog.setCanceledOnTouchOutside(false);

    dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

    return dialog;
}

한 스타일의 테마,내가 적용되는 다음 코드

/** must put parent="@android:style/Theme.Dialog for it to work */

    ...
해설 (0)

해야 하는 레이아웃 안에 스크롤 view:



  -->your layout here 

따라더크 코멘트:

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
      View view = inflater.inflate(R.layout.fragment_text_editor, container);

//add this line 
getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

      //[add more custom code...]
      return view;
    }
해설 (2)

이에 의해 발생할 수 있습니다:

true

그것을 제거하려고에서 당신의 테마입니다.

해설 (3)

따로 언급 변경 다른 답변에서도 확인하 테마**의 dialogfragment
에서 내 실험,"**안드로이드:windowIsFloating
"특성에 영향을 미치는 것으로 보는 방법 창의 반응을 입력합니다.

그것은 당신 이 옵션을 false 로 설정합니다,창 승't 슬라이드 할 때에 키보드가 표시됩니다.

해설 (0)

이 솔루션습니다.

내부 스타일


        @style/AppModalStyle
        false
        adjustResize



        @drawable/rounded_corner_dialog

여기에서안드로이드:windowIsFloatingfalse 가 됩&안드로이드:windowSoftInputMode해야adjustResize.

포장 내부의 레이아웃 NestedScrollView




해설 (0)

이미 언급했듯이,안드로이드:windowSoftInputMode="adjustResize"대화.getWindow().setSoftInputMode(WIndowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);는 올바른 방법이 있습니다.

지만....... 의 경우 보이지 않는 크기 조정 가능한 모두에서,다음의 버튼 바닥에 있는 것입니다 여전히 숨겨져 있습니다. 제 경우에는이 해킹에 충분했:

나는안드로이드:layout_weight최고의 전망을 때에 키보드가 열리고 대화의 크기를 조정—top 보기 숨기:

해설 (3)

에 대한 DialogFragment,그것은 보인다는 적용 SoftInputMode 경우에만 작동에 살고 있고 내부에서 DialogFragment 클래스행되는 클래스:

@Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);    

}

또한,에 대한 종료 방법을 추가했음을 확장 레이아웃을 대화 수평:

@Override
    public void onStart() {
        super.onStart();
        getDialog().getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    }
해설 (0)