DialogFragment не змяненне памераў пры паказе клавіятуры

Я спрабую выкарыстоўваць SherlockDialogFragment , каб задаць некаторыя ўваходныя дадзеныя ад карыстальніка. Усе выдатна працуе на маім тэлефоне (Galaxy Nexus, 4,2), але ў меншым тэлефоне (эмулятар 2.3.3), калі клавіятура з'яўляецца, яна ахоплівае дзве кнопкі на DialogFragment, як гэта:

dialog covered by keyboard

Мая раскладка ўнутры ScrollView, і я змена softInputMode да SOFT_INPUT_ADJUST_RESIZE на мой onViewCreated . Я таксама паспрабаваў SOFT_INPUT_ADJUST_PAN , і ён не працуе

<�Моцны> 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


    
        
        

    
    
        

        

        

    
    
        <!-- Day buttons are put here programatically -->
    

Такім чынам, вы маглі б дапамагчы мне, і наставіць мяне пра тое, як паказаць гэтыя кнопкі? Альбо PAN меркаванне ці пакінуць яго памер ...

14

8 адказы

Я проста выкарыстоўваць наступны радок у маёй 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;
    }
}
30
дададзена
Гэта павінна быць прымальным адказам
дададзена аўтар Naveen Kumar M, крыніца

Усталюйце windowSoftInputMode <�код /> ўласцівасць adjustNothing у AndroidManifest.xml дзейнасці, якія выкарыстоўваюць дыялогавае фрагмент.


...

і onCreateDialog , каб схаваць мяккі ўваход:

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

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

22
дададзена
Я адрэдагаваў мой адказ будзе больш канкрэтна аб выпуску маніфесту кода.
дададзена аўтар Daniel De León, крыніца
Чаму без dialog.getWindow() setSoftInputMode. (WindowManager.LayoutPara & ZWNJ; ms.SOFT_INPUT_STATE_ & ZWNJ; Недоступен); дыялог не паўторна памеру? Гэта выглядае як памылка.
дададзена аўтар neworld, крыніца
Так як гэта было DialogFragment, у яго не было якіх-небудзь асацыяваную актыўнасць у маніфесце, таму першы пункт не мае сэнсу, а другі адзін фіксаваны яго. Дзякуючы.
дададзена аўтар MagicMicky, крыніца

Пераканайцеся, што размяшчэнне ўнутры выгляд пракруткі:



  -->your layout here 

і вынікайце Dirk каментар :

 @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;
    }
5
дададзена
Абсалютна адзінае, што працуе для мяне пры спробе атрымаць SOFT_INPUT_ADJUST_PAN паводзіны.
дададзена аўтар Eric B., крыніца
Так, гэта павінна быць прынята адказваць дзякуючы @Sara
дададзена аўтар Chinthaka Devinda, крыніца

Акрамя змены, названыя ў іншых адказах таксама праверыць <�тэму/STRONG> з dialogfragment
З маіх эксперыментаў "<�моцны> Android: windowIsFloating
" атрыбут, здаецца, мае ўплыў, як акно рэагуе на мяккі ўваход.

Гэта вы ўсталюеце гэта хлусня, акно не будзе слізгаць уверх, калі клавіятура становіцца бачнай.

2
дададзена

Гэта таксама можа быць выклікана наступнымі прычынамі:

true

Паспрабуйце выдаліць яго з вашай тэмы.

2
дададзена
Я думаю, што гэта памылка.
дададзена аўтар Langusten Gustel, крыніца
Вы ведаеце, чаму?
дададзена аўтар Alexei Korshun, крыніца
дзякуй, што гэта праца
дададзена аўтар Dashrath Rathod, крыніца

Нягледзячы на ​​тое, што гэта трохі позна для адказу, бо гэтае пытанне знаходзіцца ў DialogFragment, наступны код вырашае маю праблему.

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

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

@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 */


2
дададзена

Для DialogFragment, здаецца, што прымяненне SoftInputMode працуе толькі калі выставіцца ўнутры класа DialogFragment, а не клас выклікае абанента:

@Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

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

}

Акрамя таго, для OnStart метад, я дадаў наступнае пашырэнне дыялогу размяшчэння па гарызанталі:

@Override
    public void onStart() {
        super.onStart();
        getDialog().getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    }
1
дададзена

Як ужо згадвалася, Android: windowSoftInputMode = "adjustResize" і dialog.getWindow() setSoftInputMode (WIndowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); гэта правільны спосаб зрабіць гэта ..

АЛЕ. Калі ваша меркаванне не змянянага памеру на ўсіх, то вашы кнопкі ў ніжняй частцы ўсё роўна будзе схаваная. У маім выпадку, <�моцны> гэты хак было нямала:

KEYBOARD HIDDEN

I set android:layout_weight for top views, so that when keyboard opens and dialog is resized — top views would be hidden: KEYBOARD SHOWN

0
дададзена