【问题标题】:Snackbar half width on tablet平板电脑上的 Snackbar 半宽
【发布时间】:2015-12-30 01:16:09
【问题描述】:

我在平板电脑 (API 22) 和手机 (API 23 和 22) 上设置 Snackbar 时遇到问题(从边缘到边缘)它工作正常(从边缘到边缘),即使在水平时也是如此。 结果如下 Snackbar:

FloatingActionButton(支持库)也不会移动(在手机上时会移动)。

我的布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/snackParent"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|right"
        android:layout_marginBottom="@dimen/margin_fab"
        android:layout_marginRight="@dimen/margin_fab"
        app:pressedTranslationZ="12dp" />
</android.support.design.widget.CoordinatorLayout>

并在 MainActivity 中使用

private void showMessage(String msg) {
    if(snackParent != null) {
        snackbar = Snackbar.make(snackParent, msg, Snackbar.LENGTH_SHORT);
        snackbar.setAction("OK", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                snackbar.dismiss();
            }
        });
        snackbar.show();
    }
}

我只有其他资源文件,其尺寸(工厂边距)适用于平板电脑(w820dp),手机和平板电脑之间的样式文件夹相同。我也尝试过使 Android Studio 缓存无效。 我使用com.android.support:design:23.0.1targetSdkVersion=23 和compileSdkVersion=23, buildToolsVersion=23.0.1。

【问题讨论】:

  • 我认为这是平板电脑上小吃店的默认行为。检查this out
  • 是的,我刚刚在空项目上测试了较旧的支持库版本、targetSdkVersion 等,所有这些似乎都表明它是故意的。你可以发布你的回放作为答案吗?
  • 这可能有点晚了,但以下对我有用:mSnackbar.getView().getLayoutParams().width = AppBarLayout.LayoutParams.MATCH_PARENT;

标签: android android-support-library android-snackbar floating-action-button


【解决方案1】:

我认为这是平板电脑上小吃店的默认行为。检查this

【讨论】:

    【解决方案2】:

    你可以用你的小吃店做任何你想做的事。我们在平板电脑上遇到了同样的问题,我们像这样解决了(例如,下面的代码将快餐栏定位在顶部并为其提供父级的全宽)

    View view = snackbar.getView();
    
    // Position snackbar at top
    FrameLayout.LayoutParams params = (FrameLayout.LayoutParams)view.getLayoutParams();
    params.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;
    params.width = FrameLayout.LayoutParams.MATCH_PARENT;
    view.setLayoutParams(params);
    

    【讨论】:

    • 如果我使用上面的视图而不是 coordinatorLayout,我得到 CoordinatorLayout$LayoutParams cannot be cast to android.widget.FrameLayout$LayoutParams 错误
    【解决方案3】:

    ViewGroup.LayoutParams layoutParams = snapbarView.getLayoutParams();

            if (layoutParams instanceof FrameLayout.LayoutParams) {
                FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) layoutParams;
                params.gravity = Gravity.TOP;
                params.width = FrameLayout.LayoutParams.MATCH_PARENT;
                snackbarView.setLayoutParams(params);
            } else if (layoutParams instanceof CoordinatorLayout.LayoutParams) {
                CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) layoutParams;
                params.gravity = Gravity.TOP;
                params.width = FrameLayout.LayoutParams.MATCH_PARENT;
                snackbarView.setLayoutParams(params);
            } else {
                FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) layoutParams;
                params.gravity = Gravity.TOP;
                params.width = FrameLayout.LayoutParams.MATCH_PARENT;
                snackbarView.setLayoutParams(params);
            }
    

    【讨论】:

      猜你喜欢
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-25
      • 1970-01-01
      • 1970-01-01
      • 2012-08-31
      • 1970-01-01
      相关资源
      最近更新 更多