【问题标题】:Show entire bottom sheet with EditText above Keyboard使用键盘上方的 EditText 显示整个底部工作表
【发布时间】:2018-06-08 16:41:27
【问题描述】:

我正在实现一个 UI,其中底部工作表将显示在键盘上方,其中包含 EditText 供用户输入值。问题是视图被键盘部分重叠,覆盖了底部工作表的底部。

这是底页,没有键盘。

这是显示键盘的底页。

确保显示整个底页的最佳方法是什么?

谢谢。

【问题讨论】:

  • "android:windowSoftInputMode="stateHidden" " 在你声明你的活动的清单文件中的活动中。它会阻止键盘弹出,直到你在编辑文本中触摸。
  • 我需要显示键盘,以便人们可以输入他们的值。
  • 他们可以通过点击编辑文本来给出值。点击后会弹出键盘。所以不用担心。尝试一次。
  • 我做到了,如果键盘在之前或之后打开,也会发生同样的事情。它仍会覆盖视图的底部。

标签: android android-layout android-softkeyboard bottom-sheet


【解决方案1】:

只是从这个问题Keyboard hides BottomSheetDialogFragment 重新发布@jblejder,因为它对我有用,以便其他人更容易找到:

我发现改变这种情况最方便的方法是创建样式:

<style name="DialogStyle" parent="Theme.Design.Light.BottomSheetDialog">
    <item name="android:windowIsFloating">false</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
    <item name="android:windowSoftInputMode">adjustResize</item>
</style>

并在您的 BottomSheetDialogFragment 的 onCreate 方法中设置:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setStyle(DialogFragment.STYLE_NORMAL, R.style.DialogStyle)
}

这是它在我的设备上的外观:

==== 更新 ====

正如评论中多次提到的,您可能还需要将 BottomSheetDialog 的状态设置为 STATE_EXPANDED,就像下面 Nordknight 的回答一样

dialog = new BottomSheetDialog(getContext(), R.style.BottomSheetDialog);  
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    BottomSheetDialog d = (BottomSheetDialog) dialog;
                    FrameLayout bottomSheet = d.findViewById(R.id.design_bottom_sheet);
                    BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);
                    bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
                }
            },0);
        }
    });

【讨论】:

  • 对我不起作用。在EditText 上方出现键盘之前,因此EditText 抬起并允许输入,但不能按下面的Button。在我应用您的解决方案后,没有任何改变。
  • 当底部工作表片段布局的根为 ScrollView 时工作
  • 就像一个魅力。对于动态底页,只需在声明时设置它的样式。 BottomSheetDialog bd = new BottomSheetDialog(this, R.style.DialogStyle);
  • 它可以工作,但您需要将状态扩展为 BottomSheetDialog => 这个解决方案 + stackoverflow.com/a/50798800/5698198
  • 只需在 onCreateDialog() 中添加以下行以及在 OnCreateView() 中的上述样式。 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val bottomSheetDialog = super.onCreateDialog(savedInstanceState) if(bottomSheetDialog is BottomSheetDialog){ bottomSheetDialog.behavior.skipCollapsed = true bottomSheetDialog.behavior.state = BottomSheetBehavior.STATE_EXPANDED } return bottomSheetDialog }
【解决方案2】:

这可能是一个多余的答案。虽然只是指出问题。 如果您使用BottomSheetDialogFragment,唯一的方法是将属性android:windowIsFloating 启用为true。这将使整个窗口位于试图占用其后面空间的任何东西之上。

<style name="BottomSheetDialogThemeNoFloating" parent="Theme.Design.Light.BottomSheetDialog">
        <item name="android:windowIsFloating">false</item>
        <item name="android:windowSoftInputMode">adjustResize|stateVisible</item>
</style>

然后在对话框的onCreate() 中设置此样式。

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // set the window no floating style
        setStyle(DialogFragment.STYLE_NORMAL, R.style.AppRoundedBottomSheetDialogThemeNoFloating)
}

这对于那些经常使用底页并且可能想要处理EditText 和软键盘相互重叠的人来说很方便。

注意:mikepenz 的 KeyboardUtil 类有一个问题,即在某些手机上,带有输入字段的内容视图会自动推送到键盘上方,尽管为提供的整个内容视图提供了底部填充。

【讨论】:

  • 这对我有用 BottomSheetDialogFragment
  • 如果我这样做,我就看不到我的拐角半径。
  • 在哪里放置这种样式的 xml ?请问哪条路
【解决方案3】:
dialog = new BottomSheetDialog(getContext(), R.style.BottomSheetDialog);  
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    BottomSheetDialog d = (BottomSheetDialog) dialog;
                    FrameLayout bottomSheet = d.findViewById(R.id.design_bottom_sheet);
                    BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);
                    bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
                }
            },0);
        }
    });

这段代码在 Fragment 的 onCreateView 方法中运行良好(感谢 ADM)

【讨论】:

【解决方案4】:

有些答案似乎比其他答案做得更好,但在使用新的材料设计组件而不是旧的支持库同时还使用 kotlin 时需要修改

希望这会对某人有所帮助。

BottomSheetDialog(this, R.style.DialogStyle).apply {
    setContentView(layoutInflater.inflate(R.layout.bottom_sheet, null))
    window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE)
    findViewById<EditText>(R.id.time_et)?.requestFocus()

    show()
}

布局/bottom_sheet.xml

<?xml version="1.0" encoding="utf-8"?>
<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="#ffffff"
        android:padding="16dp">

    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">


        <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">

            <View
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1" />

            <LinearLayout
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="5"
                    android:orientation="vertical">

                <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Time"
                        android:textColor="#000000"
                        android:textSize="24sp"
                        android:textStyle="bold" />

                <LinearLayout
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="8dp"
                        android:orientation="horizontal">

                    <EditText
                            android:id="@+id/time_et"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:inputType="numberSigned"
                            android:minWidth="50dp"
                            android:text="15" />

                    <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_marginLeft="8dp"
                            android:text="min" />

                </LinearLayout>


            </LinearLayout>

        </LinearLayout>


        <Button
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="16dp"
                android:background="#000"
                android:text="Save"
                android:textColor="#fff" />

    </LinearLayout>

</ScrollView>

styes.xml(拆分为 v-21 以使用 statusBarColor)

    <style name="DialogStyle" parent="Theme.MaterialComponents.Light.BottomSheetDialog">
        <item name="android:windowIsFloating">false</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
        <item name="android:windowSoftInputMode">adjustResize</item>
    </style>

【讨论】:

  • 这是唯一对我有用的 DialogStyle 我使用 BottomSheetDialogFragment
【解决方案5】:

BottomSheetDialog 可以对此有所帮助。它将打开软键盘打开,重点是编辑文本。但用户仍然可以关闭软键盘,对话框将重置为底部。再次聚焦将使对话框出现在软键盘的顶部。

 public void showDialog()  {
    final BottomSheetDialog dialog=new BottomSheetDialog(this);
    dialog.setContentView(R.layout.item_dialog);
    dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
    dialog.show();
}

您可以将 BottomSheetDialog 扩展至键盘。但是为此,您需要在 SoftKeyboard Open 之后调用它。展开代码是。

 BottomSheetDialog d = (BottomSheetDialog) dialog;
            FrameLayout bottomSheet = (FrameLayout) d.findViewById(android.support.design.R.id.design_bottom_sheet);
            BottomSheetBehavior.from(bottomSheet).setState(BottomSheetBehavior.STATE_EXPANDED);

我已经在DialogInterface.OnShowListener() 上对其进行了测试,但它不起作用。用它测试了 1 秒延迟它的工作。但延迟不是解决方案。您需要弄清楚应该展开对话框的哪个操作。

 final BottomSheetDialog dialog=new BottomSheetDialog(this);
    dialog.setContentView(R.layout.item_dialog);
    dialog.getWindow().setSoftInputMode(
            WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE|
                    WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            FrameLayout bottomSheet = (FrameLayout) dialog.findViewById(android.support.design.R.id.design_bottom_sheet);
            BottomSheetBehavior.from(bottomSheet).setState(BottomSheetBehavior.STATE_EXPANDED);
        }
    },2000);
    dialog.show();

【讨论】:

  • 使用BottomSheetDialog,它仍然覆盖EditText下方的底部区域。
  • 是的。这就是行为。
  • 我正在尝试显示整个BottomSheetDialog,这样我就可以在EditText 下方显示一些内容,并且仍然可以看到它们。
  • 我用计时器尝试了你的expand 代码,但它对我没有任何作用。
  • 好吧,我已经用handler.postDelay() 对其进行了测试,它确实有效。无论如何尝试看看BottomSheetFragment也许它会如你所愿。
【解决方案6】:

为使用 Material Components 主题的用户提供了一个更新的答案,也是一个改进的答案,无需在每个对话框的 onCreate() 中添加任何内容。

在您的主要 AppTheme 样式中,您可以添加属性 bottomSheetDialogTheme 以将该样式应用于您的 所有 BottomSheetDialogFragments:

 <style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/accent</item>
    <item name="bottomSheetDialogTheme">@style/BottomSheetDialogStyle</item>
  </style>

因此,有了以上内容,无需在您的 BottomSheetDialogFragment 代码中添加任何内容。

然后,作为之前的答案,您的 Dialog 样式,注意还要将该样式与相同的 Material Components 库匹配(否则您会得到一些看起来很奇怪的按钮、edittexts 等):

 <style name="BottomSheetDialogStyle" parent="Theme.MaterialComponents.Light.BottomSheetDialog">
    <item name="android:windowIsFloating">false</item>
    <item name="android:windowSoftInputMode">adjustResize</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/accent</item>
  </style>

请注意,我在这里添加了我的应用主题颜色;由于您不能在 Android 样式中进行多重继承,因此您可能希望在此处定义这些颜色,以便任何按钮和重音符号与您应用的其余部分保持一致。

【讨论】:

    【解决方案7】:

    这个工作

     BottomSheetDialog dialog = new BottomSheetDialog(this, R.style.DialogStyle);
        View sheetView = getLayoutInflater().inflate(R.layout.dialog_remark, null);
        Objects.requireNonNull(dialog.getWindow())
                .setSoftInputMode(SOFT_INPUT_STATE_VISIBLE);
        dialog.setContentView(sheetView);
        dialog.setOnShowListener(new DialogInterface.OnShowListener() {
            @Override
            public void onShow(DialogInterface dialog) {
                BottomSheetDialog d = (BottomSheetDialog) dialog;
                View bottomSheetInternal = d.findViewById(com.google.android.material.R.id.design_bottom_sheet);
                BottomSheetBehavior.from(bottomSheetInternal).setState(BottomSheetBehavior.STATE_EXPANDED);
            }
        });
        dialog.show();
    

    将此样式添加到您的styles.xml

     <style name="DialogStyle" parent="Theme.Design.Light.BottomSheetDialog">
        <item name="android:windowIsFloating">false</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
        <item name="android:windowSoftInputMode">adjustPan</item>
    </style>
    

    像这样添加你的布局

     <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
    android:id="@+id/scrollview"
    
        android:layout_height="match_parent">
    
        <androidx.cardview.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
    
            android:layout_margin="8dp">
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">
    
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:layout_margin="8dp"
                    android:fontFamily="@font/montserratmedium"
                    android:text="Add Remarks"
                    android:textColor="@android:color/black"
                    android:textSize="18sp" />
    
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginStart="8dp"
                    android:layout_marginTop="24dp"
                    android:fontFamily="@font/montserratmedium"
                    android:text="Branch"
                    android:textColor="#8B8B8B"
                    android:textSize="18sp" />
    
    
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginStart="8dp"
                    android:layout_marginTop="8dp"
                    android:fontFamily="@font/montserratmedium"
                    android:text="BLR-CO-SINDHUBHAVAN-384"
                    android:textColor="@android:color/black"
                    android:textSize="18sp" />
    
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginStart="8dp"
                    android:layout_marginTop="24dp"
                    android:fontFamily="@font/montserratmedium"
                    android:text="Enter Remarks"
                    android:textColor="#8B8B8B"
                    android:textSize="18sp" />
    
    
                <EditText
    
                    android:id="@+id/input_remark"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_margin="10dp"
                    android:layout_marginTop="8dp"
                    android:background="@drawable/remark_inputbg"
                    android:gravity="start"
    
                    android:inputType="textMultiLine"
                    android:lines="5" />
    
                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">
    
                    <LinearLayout
                        android:id="@+id/action"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:orientation="horizontal"
                        android:weightSum="2">
    
                        <Button
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_margin="8dp"
                            android:layout_weight="1"
                            android:background="@drawable/reset_bg"
                            android:padding="8dp"
                            android:text="CANCEL" />
    
                        <Button
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_margin="8dp"
                            android:layout_weight="1"
                            android:background="#4F4DBB"
                            android:padding="8dp"
                            android:text="CANCEL"
                            android:textColor="@android:color/white" />
                    </LinearLayout>
                </RelativeLayout>
    
    
            </LinearLayout>
    
        </androidx.cardview.widget.CardView>
    
    </ScrollView>
    

    【讨论】:

    • 只有 AndroidManifest 中的 android:windowSoftInputMode="stateHidden|adjustPan" 对我有用。谢谢。!
    【解决方案8】:
            bottomSheetDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
    

    它肯定会起作用。

    【讨论】:

    • 你从哪里得到bottomSheetDialog?
    • 来自 Material 中的 BottomSheetDialog 类。您可以在文档中找到它,但要使其高于移动键盘,您必须编写上述代码
    【解决方案9】:

    为此,我发现AlertDialog 效果最好。虽然它不会与屏幕底部或侧面齐平,但看起来仍然足够好。

    首先,使用您的视图创建AlertDialog

    val view = LayoutInflater.from(context).inflate(R.layout.alert, null)
    
    dialog = AlertDialog.Builder(context)
                 .setView(view)
                 .create()
    

    接下来,设置重力。

        dialog.window.attributes.gravity = Gravity.BOTTOM
    

    最后,展示一下。

    dialog.show()
    

    您还可以使用onDismissListener 绑定键盘以留在对话框中。

    显示AlertDialog后,我用力弹起键盘。

    调用这个方法,传入你的EditText

    fun showKeyboard(view: View?) {
            if (view == null) return;
    
            val imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
        }
    

    对于在onDismissListener 内解散。

    private fun hideKeyboard() {
            val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
            imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0)
        }
    

    【讨论】:

      【解决方案10】:

      我的回答可能对仍在寻找解决方案的人有用。如果键盘覆盖了 BottomSheetDialogFragment 中的 edittext,则在 setupDialog() 方法中创建一个 KeyboardUtil 类的实例并传递您的 rootview。

          @Override
          public void setupDialog(final Dialog dialog, int style) {
              super.setupDialog(dialog, style);
              View view = View.inflate(getActivity(), R.layout.reopen_dialog_layout, null);
              new KeyboardUtil(getActivity(), view);
      }
      

      创建一个新类

          public class KeyboardUtil {
              private View decorView;
              private View contentView;
              //a small helper to allow showing the editText focus
              ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
                  @Override
                  public void onGlobalLayout() {
                      Rect r = new Rect();
                      //r will be populated with the coordinates of your view that area still visible.
                      decorView.getWindowVisibleDisplayFrame(r);
      
                      //get screen height and calculate the difference with the useable area from the r
                      int height = decorView.getContext().getResources().getDisplayMetrics().heightPixels;
                      int diff = height - r.bottom;
      
                      //if it could be a keyboard add the padding to the view
                      if (diff != 0) {
                          // if the use-able screen height differs from the total screen height we assume that it shows a keyboard now
                          //check if the padding is 0 (if yes set the padding for the keyboard)
                          if (contentView.getPaddingBottom() != diff) {
                              //set the padding of the contentView for the keyboard
                              contentView.setPadding(0, 0, 0, diff);
                          }
                      } else {
                          //check if the padding is != 0 (if yes reset the padding)
                          if (contentView.getPaddingBottom() != 0) {
                              //reset the padding of the contentView
                              contentView.setPadding(0, 0, 0, 0);
                          }
                      }
                  }
              };
      
              public KeyboardUtil(Activity act, View contentView) {
                  this.decorView = act.getWindow().getDecorView();
                  this.contentView = contentView;
      
                  //only required on newer android versions. it was working on API level 19
                  if (Build.VERSION.SDK_INT >= 19) {
                      decorView.getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener);
                  }
              }
      
              /**
               * Helper to hide the keyboard
               *
               * @param act
               */
              public static void hideKeyboard(Activity act) {
                  if (act != null && act.getCurrentFocus() != null) {
                      InputMethodManager inputMethodManager = (InputMethodManager) act.getSystemService(Activity.INPUT_METHOD_SERVICE);
                      inputMethodManager.hideSoftInputFromWindow(act.getCurrentFocus().getWindowToken(), 0);
                  }
              }
      
              public void enable() {
                  if (Build.VERSION.SDK_INT >= 19) {
                      decorView.getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener);
                  }
              }
      
              public void disable() {
                  if (Build.VERSION.SDK_INT >= 19) {
                      decorView.getViewTreeObserver().removeOnGlobalLayoutListener(onGlobalLayoutListener);
                  }
              }
          }
      

      【讨论】:

        【解决方案11】:
              private fun enterMobileNumberPopUp() {                                         
            val dialog = BottomSheetDialog(this,R.style.DialogStyle)
            val view = layoutInflater.inflate(R.layout.layout_otp, null)
            dialog.setContentView(view)
            dialog.behavior.state = BottomSheetBehavior.STATE_EXPANDED
            dialog.show()}
        
        • 这是处理底页对话框的最简单方法和最佳方法 你可以打电话给
        <style name="DialogStyle" parent="Theme.Design.Light.BottomSheetDialog">
        <item name="android:windowIsFloating">false</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
        <item name="android:windowSoftInputMode">adjustResize</item>
        

        样式参考

        【讨论】:

          【解决方案12】:

          Kotlin、+viewBinding、+通过使用已接受答案的对话框样式

          val bottomSheet = BottomSheetDialog(this, R.style.BottomSheetDialogStyle)
          val binding = [YourSheetBinding].inflate(LayoutInflater.from(YourActivity.this))
          bottomSheet.setContentView(binding.root)
          bottomSheet.behavior.state = BottomSheetBehavior.STATE_EXPANDED
          bottomSheet.show()
          

          【讨论】:

            【解决方案13】:

            https://stackoverflow.com/a/61813321/2914140:

            override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
                val dialog = super.onCreateDialog(savedInstanceState) as BottomSheetDialog
                dialog.behavior.state = BottomSheetBehavior.STATE_EXPANDED
                return dialog
            }
            

            但如果布局不够高,您可以改用https://stackoverflow.com/a/66287187/2914140。它将几乎全屏打开 BottomSheetDialog:

            <style name="BottomSheetDialogTheme" parent="Theme.MaterialComponents.Light.BottomSheetDialog">
              <item name="android:windowIsFloating">false</item>
              <item name="android:windowSoftInputMode">adjustResize|stateVisible</item>
            </style>
            

            【讨论】:

              【解决方案14】:

              摆弄 BottomSheetDialogFragment 并不值得。所以我只是把它改成了一个简单的DialogFragment 并将其重力设置为底部:

              window.setGravity(Gravity.BOTTOM);
              

              工作就像一个魅力。

              【讨论】:

                【解决方案15】:

                试试这个解决方案:
                https://stackoverflow.com/a/45197761/18311024

                使用 NestedScrollView 作为根布局对我有用。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2016-08-14
                  • 1970-01-01
                  • 2021-04-20
                  • 2020-12-11
                  • 1970-01-01
                  • 2019-03-21
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多