10

मैं उपयोगकर्ता से कुछ इनपुट पूछने के लिए SherlockDialogFragment का उपयोग करने का प्रयास कर रहा हूं। सब कुछ मेरे फोन (Galaxy Nexus, 4.2) पर ठीक काम करता है, लेकिन एक छोटे फोन (एमुलेटर 2.3.3) पर, जब कुंजीपटल दिखाई देता है, यह DialogFragment के दो बटन, इस तरह शामिल किया गया है:कुंजीपटल दिखाए जाने पर डायलॉगफ्रेगमेंट आकार बदल नहीं रहा

dialog covered by keyboard

मेरा लेआउट स्क्रॉलव्यू के अंदर है, और मैं अपने onViewCreated पर softInputMode को SOFT_INPUT_ADJUST_RESIZE में बदल रहा हूं। मैं भी 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

<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> 

तो, क्या आप मेरी मदद कर सकते हैं और मुझे उन बटनों को दिखाने के तरीके पर मार्गदर्शन कर सकते हैं? दोनों ही दृश्यों पैन या इसका आकार बदल जाने के लिए ...

उत्तर

21

कि संवाद टुकड़ा का उपयोग गतिविधियों के AndroidManifest.xml में adjustNothing को windowSoftInputMode संपत्ति सेट करें।

... 
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

+6

चूंकि यह एक संवादप्रवाह था, इसलिए इसमें मैनिफेस्ट में कोई संबद्ध गतिविधि नहीं थी, इसलिए पहला बिंदु बेकार है, लेकिन दूसरे ने इसे ठीक किया है। धन्यवाद। – MagicMicky

+0

मैंने अपना उत्तर मैनिफेस्ट कोड के संस्करण के बारे में अधिक विशिष्ट होने के लिए संपादित किया। –

+1

बिना 'dialog.getWindow()। SetSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);' संवाद का आकार फिर से नहीं बदला गया है? यह बग की तरह दिखता है। – neworld

26

मैं बस अपना DialogFragment में निम्न पंक्ति का उपयोग करें:

<activity 
    ... 
    android:windowSoftInputMode="adjustNothing"> 
... 

और onCreateDialog मुलायम इनपुट को छिपाने के लिए

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; 
    } 
} 
+0

यह स्वीकार्य उत्तर –

5

सुनिश्चित करें कि लेआउट एक स्क्रॉल दृश्य के अंदर है रहें:

<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    -->your layout here 
</ScrollView> 

और Dirk comment का पालन करें:

@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; 
    } 
+0

होना चाहिए बिल्कुल एकमात्र चीज जो 'SOFT_INPUT_ADJUST_PAN' व्यवहार प्राप्त करने का प्रयास करते समय मेरे लिए काम करती है। –

+0

हाँ यह स्वीकार्य उत्तर धन्यवाद @ सारा होना चाहिए –

2

अलावा अन्य उत्तर में वर्णित परिवर्तन भी dialogfragment की विषय जाँच
मेरे प्रयोगों से, "एंड्रॉइड: विंडो ISFloating "विशेषता यह प्रभावित करती है कि विंडो नरम इनपुट पर प्रतिक्रिया कैसे करती है।

यह आप इसे गलत पर सेट करते हैं, कीबोर्ड दिखाई देने पर विंडो स्लाइड नहीं होगी।

2

हालांकि यह उत्तर के लिए थोड़ा देर हो चुकी है, क्योंकि सवाल डायलॉग फ्रैगमेंट में है, इसलिए निम्न कोड मेरी समस्या हल करता है।अपने विषय से निकालने के लिए

<item name="android:windowTranslucentStatus">true</item> 

प्रयास करें:

@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 */ 
<style name="theme_popupdialog_style" parent="@android:style/Theme.Dialog"> 
    <item .... >...</item> 
</style> 
0

यह भी कारण हो सकता है लागू होता है।

संबंधित मुद्दे