带有图标的Android抽屉始终可见

马库斯·帕尔默(Markus Palme)

哪个布局组件最适合用来构建带有始终可见图标的抽屉菜单?我不想使用a,SlidingPaneLayout因为主要内容不应受此影响。

在此处输入图片说明

Parag Chauhan

1.添加CrossFadeSlidingPaneLayout

  public class CrossFadeSlidingPaneLayout extends SlidingPaneLayout {
  private View partialView = null;
  private View fullView = null;

  // helper flag pre honeycomb used in visibility and click response handling
  // helps avoid unnecessary layouts
  private boolean wasOpened = false;

  public CrossFadeSlidingPaneLayout(Context context) {
    super(context);
  }

  public CrossFadeSlidingPaneLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  public CrossFadeSlidingPaneLayout(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
  }

  @Override
  protected void onFinishInflate() {
    super.onFinishInflate();

    if (getChildCount() < 1) {
      return;
    }

    View panel = getChildAt(0);
    if (!(panel instanceof ViewGroup)) {
      return;
    }

    ViewGroup viewGroup = (ViewGroup) panel;
    if (viewGroup.getChildCount() != 2) {
      return;
    }
    fullView = viewGroup.getChildAt(0);
    partialView = viewGroup.getChildAt(1);

    super.setPanelSlideListener(crossFadeListener);
  }

  @Override
  public void setPanelSlideListener(final PanelSlideListener listener) {
    if (listener == null) {
      super.setPanelSlideListener(crossFadeListener);
      return;
    }

    super.setPanelSlideListener(new PanelSlideListener() {
      @Override
      public void onPanelSlide(View panel, float slideOffset) {
        crossFadeListener.onPanelSlide(panel, slideOffset);
        listener.onPanelSlide(panel, slideOffset);
      }

      @Override
      public void onPanelOpened(View panel) {
        listener.onPanelOpened(panel);
      }

      @Override
      public void onPanelClosed(View panel) {
        listener.onPanelClosed(panel);
      }
    });
  }

  @Override
  protected void onLayout(boolean changed, int l, int t, int r, int b) {
    super.onLayout(changed, l, t, r, b);

    if (partialView != null) {
      if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
        // "changed" means that views were added or removed
        // we need to move the partial view out of the way in any case (if it's supposed to of course)
        updatePartialViewVisibilityPreHoneycomb(isOpen());
      } else {
        partialView.setVisibility(isOpen() ? View.GONE : VISIBLE);
      }
    }
  }

  private SimplePanelSlideListener crossFadeListener = new SimplePanelSlideListener() {
    @Override
    public void onPanelSlide(View panel, float slideOffset) {
      super.onPanelSlide(panel, slideOffset);
      if (partialView == null || fullView == null) {
        return;
      }

      if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
        if (slideOffset == 1 && !wasOpened) {
          // the layout was just opened, move the partial view off screen
          updatePartialViewVisibilityPreHoneycomb(true);
          wasOpened = true;
        } else if (slideOffset < 1 && wasOpened) {
          // the layout just started to close, move the partial view back, so it can be shown animating
          updatePartialViewVisibilityPreHoneycomb(false);
          wasOpened = false;
        }
      } else {
        partialView.setVisibility(isOpen() ? View.GONE : VISIBLE);
      }

      ViewHelper.setAlpha(partialView, 1 - slideOffset);
      ViewHelper.setAlpha(fullView, slideOffset);
    }
  };

  private void updatePartialViewVisibilityPreHoneycomb(boolean slidingPaneOpened) {
    // below API 11 the top view must be moved so it does not consume clicks intended for the bottom view
    // this applies curiously even when setting its visibility to GONE
    // this might be due to platform limitations or it may have been introduced by NineOldAndroids library
    if (slidingPaneOpened) {
      partialView.layout(-partialView.getWidth(), 0, 0, partialView.getHeight());
    } else {
      partialView.layout(0, 0, partialView.getWidth(), partialView.getHeight());
    }
  }
}

2.活动安排

    <com.xxx.CrossFadeSlidingPaneLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/sliding_pane_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:layout_width="@dimen/side_pane_width"
        android:layout_height="match_parent"
        android:background="@color/purple">

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:gravity="center_horizontal"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal"
                android:orientation="horizontal">

                <ImageView
                    android:layout_width="40dp"
                    android:layout_height="40dp"
                    android:layout_marginLeft="7dp"
                    android:background="@drawable/ic_launcher" />

                <TextView
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical"
                    android:text="Your Screen" />
            </LinearLayout>


            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal"
                android:orientation="horizontal">

                <ImageView
                    android:layout_width="40dp"
                    android:layout_height="40dp"
                    android:layout_marginLeft="7dp"
                    android:background="@drawable/ic_launcher" />

                <TextView
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical"
                    android:text="Your Screen" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal"
                android:orientation="horizontal">

                <ImageView
                    android:layout_width="40dp"
                    android:layout_height="40dp"
                    android:layout_marginLeft="7dp"
                    android:background="@drawable/ic_launcher" />

                <TextView
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical"
                    android:text="Your Screen" />
            </LinearLayout>
        </LinearLayout>

        <LinearLayout
            android:layout_width="55dp"
            android:layout_height="fill_parent"
            android:gravity="center_horizontal"
            android:orientation="vertical">

            <ImageView
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:background="@drawable/ic_launcher" />

            <ImageView
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:background="@drawable/ic_launcher" />

            <ImageView
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:background="@drawable/ic_launcher" />
        </LinearLayout>

    </FrameLayout>

    <TextView
        android:layout_width="@dimen/main_pane_width"
        android:layout_height="match_parent"
        android:layout_marginLeft="@dimen/partial_pane_width"
        android:layout_weight="1"
        android:background="@color/light_blue"
        android:text="@string/pane_2" />
</com.xxx.CrossFadeSlidingPaneLayout>

现在完成的菜单总是可见的:)

原始项目的所有权Github Url

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带有错误图标的导航抽屉

来自分类Dev

带有列表的始终可见的菜单组件

来自分类Dev

有什么办法可以将导航抽屉设置为始终可见

来自分类Dev

Android导航抽屉图标的颜色

来自分类Dev

滑动抽屉切换图标不可见

来自分类Dev

带有图标的Android标签页,未找到类

来自分类Dev

使用字体可怕图标的可见焦点

来自分类Dev

CSS:带有正确附件的省略号应始终可见

来自分类Dev

带有flex和始终可见的标头的圣杯布局

来自分类Dev

android gmail app,例如在图标中带有4个图标的列表视图

来自分类Dev

带有符号图标的单击事件

来自分类Dev

如何输出带有图标的标签?

来自分类Dev

带有图标的弹出菜单

来自分类Dev

如何输出带有图标的标签?

来自分类Dev

带有图标的弹出菜单

来自分类Dev

带有 FontAwesome 图标的中心文本

来自分类Dev

带有Unity的16.04-带有声音指示器图标的图标不见了。如何激活它?

来自分类Dev

抽屉可见性

来自分类Dev

带有动画的UIView不可见

来自分类Dev

Android Studio-为什么托盘中有不可见的图标?

来自分类Dev

导航抽屉图标在自定义操作栏上不可见?

来自分类Dev

像清单视图一样带有字母图标的Android Gmail应用

来自分类Dev

是否可以为iOS / Android生成带有不同图标的应用

来自分类Dev

Xamarin Android:获取带有图标的已安装应用列表

来自分类Dev

带有文本和图标的 Android 警报对话框

来自分类Dev

始终可见的textview,不可见在android中不起作用

来自分类Dev

Android溢出按钮叠加层/始终可见

来自分类Dev

首页片段部分可见,带有当前片段android studio的混合视图

来自分类Dev

pnotify-rails有效,但图标不可见

Related 相关文章

热门标签

归档