6

鍵盤下方有更多字段。當我更新支持庫時發生這種情況。我知道它是Kotlin,但它看起來幾乎與java相同。我如何解決這個問題?鍵盤隱藏BottomSheetDialogFragment

這是什麼樣子:

enter image description here

我的代碼:

class ProjectsEditBottomSheetFragment(val privateID: String, 
            val publicID: String) : BottomSheetDialogFragment() { 



private val mBottomSheetBehaviorCallback = object : BottomSheetBehavior.BottomSheetCallback() { 
    override fun onStateChanged(bottomSheet: View, newState: Int) { 
     if (newState == BottomSheetBehavior.STATE_HIDDEN) { 
      dismiss() 
     } 

    } 


    override fun onSlide(bottomSheet: View, slideOffset: Float) { 
     if (slideOffset < -0.15f) { 
      dismiss() 
     } 
    } 
} 


override fun setupDialog(dialog: Dialog, style: Int) { 
    super.setupDialog(dialog, style) 
    val view = View.inflate(context, R.layout.projects_edit_sheet, null) 
    dialog.setContentView(view) 

    dialog.window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) 


    val params = (view.parent as View).layoutParams as CoordinatorLayout.LayoutParams 
    val behavior = params.behavior 

    if (behavior != null && behavior is BottomSheetBehavior<*>) { 
     behavior.setBottomSheetCallback(mBottomSheetBehaviorCallback) 
    } 


    // Get and set values 
    val realm = Realm.getDefaultInstance() 
    val realmObject = realm.where(ProjectsRealmObject::class.java) 
      .equalTo("privateID", privateID) 
      .findFirst() 




    realm.beginTransaction() 
    view.title_input.text = SpannableStringBuilder(realmObject.title) 
    view.description_input.text = SpannableStringBuilder(realmObject.description) 
    view.public_checkbox.isChecked = realmObject.isPublic 
    realm.commitTransaction() 


    // Keyboard 
    view.title_input.onFocusChangeListener = View.OnFocusChangeListener { _, hasFocus -> 
     if (hasFocus) { 
      (context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager).showSoftInput(view.title_input, InputMethodManager.SHOW_FORCED) 
     } else { 
      (context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager).hideSoftInputFromWindow(view.title_input.windowToken, 0) 
     } 
    } 

    view.description_input.onFocusChangeListener = View.OnFocusChangeListener { _, hasFocus -> 
     if (hasFocus) { 
      (context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager).showSoftInput(view.description_input, InputMethodManager.SHOW_FORCED) 
     } else { 
      (context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager).hideSoftInputFromWindow(view.description_input.windowToken, 0) 
     } 
    } 


    // Click listners 
    view.public_layout.setOnClickListener { view.public_checkbox.toggle() } 

    view.cancel.setOnClickListener { 
     view?.hideKeyboard() 
     dismiss() 
    } 

    view.save.setOnClickListener { 
     view?.hideKeyboard() 
     // Save to realm 
     realm.beginTransaction() 
     realmObject.title = if (view.title_input.text.toString() == "") getString(R.string.unnamed) else view.title_input.text.toString() 
     realmObject.description = view.description_input.text.toString() 
     realmObject.isPublic = view.public_checkbox.isChecked 
     realmObject.synced = false 
     realmObject.updatedRealm = TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()).toString() + "" 
     realm.commitTransaction() 

     ProjectsSync(context) 

     toast("Sparat") 

     dismiss() 
    } 

    } 
} 

XML:

<ScrollView 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:background="@color/white" 
app:layout_collapseMode="none" 
app:behavior_hideable="false" 
app:behavior_peekHeight="100dp" 
app:layout_behavior="android.support.design.widget.BottomSheetBehavior" 
style="@style/Widget.Design.BottomSheet.Modal"> 

<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:id="@+id/content"> 

     <android.support.design.widget.TextInputLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:paddingRight="16dp" 
      android:paddingLeft="16dp" 
      android:layout_marginTop="16dp" 
      android:layout_marginBottom="8dp"> 

      <android.support.design.widget.TextInputEditText 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:hint="@string/edit_info_placeholder_title" 
       android:id="@+id/title_input"/> 

     </android.support.design.widget.TextInputLayout> 

     <android.support.design.widget.TextInputLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:paddingRight="16dp" 
      android:paddingLeft="16dp"> 

      <android.support.design.widget.TextInputEditText 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:hint="@string/edit_info_placeholder_description" 
       android:id="@+id/description_input"/> 

     </android.support.design.widget.TextInputLayout> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" 
      android:clickable="true" 
      android:background="@drawable/click" 
      android:paddingTop="8dp" 
      android:paddingBottom="8dp" 
      android:id="@+id/public_layout"> 

      <android.support.v7.widget.AppCompatCheckBox 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="12dp" 
       android:id="@+id/public_checkbox" 
       android:layout_marginRight="8dp"/> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/edit_info_placeholder_is_public" 
       android:layout_gravity="center_vertical" 
       style="@style/textMedium"/> 

     </LinearLayout> 


     <!-- Buttons --> 
     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" 
      android:gravity="right" 
      android:paddingBottom="8dp"> 

      <Button 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/edit_info_button_cancel" 
       android:id="@+id/cancel" 
       style="@style/Widget.AppCompat.Button.Borderless.Colored"/> 

      <Button 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/edit_info_button_save" 
       android:id="@+id/save" 
       style="@style/Widget.AppCompat.Button.Borderless.Colored"/> 

     </LinearLayout> 

    </LinearLayout> 


</FrameLayout> 

+0

kotlin code is fin即請發佈您的styles.xml代碼。 –

+2

你使用的是什麼版本的android設計庫?它在25.3.1中工作得很好,但在25.4.0 – orium

+1

的任何更新都不起作用? – orium

回答

0

附加THI s到您的樣式

<style name="DialogStyle"> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="colorPrimaryDark">@android:color/transparent</item> 
</style> 

然後在你的底片對話框的onCreate()添加

setStyle(DialogFragment.STYLE_NO_FRAME, R.style.DialogStyle); 

也不要忘記添加到對話框的setupDialog()方法

dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); 
+0

沒有爲我工作 –

+0

@IrfanRaza嘗試set setPeekHeight手動 – orium

+0

它現在工作。我已經分別發佈了代碼爲我工作的代碼。感謝您的建議,也會嘗試。 –

0

這是爲我工作

public class CustomBottomSheetDialogFragment extends BottomSheetDialogFragment 
{ 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle 
    savedInstanceState) { 
View v = inflater.inflate(R.layout.content_dialog_bottom_sheet, container, false); 


getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); 
    return v; 
}