【问题标题】:Android move main content to reveal drawer right sideAndroid移动主要内容以显示抽屉右侧
【发布时间】:2016-01-30 08:29:47
【问题描述】:

我想创建一个导航抽屉效果,而不是抽屉从右侧滑出。我创建了代码,当我的幻灯片菜单位于左侧时,我的代码运行良好。这是我的 java 代码。

DrawerLayout drawerLayout;
View drawerView;
View drawerContent;
View mainContent;
ActionBarDrawerToggle toggle;
@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);

    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawerView = findViewById(R.id.drawer_view);
    drawerContent = findViewById(R.id.drawer_content);
    mainContent = findViewById(R.id.main_content);
    toggle = new ActionBarDrawerToggle(
            TestLayout.this,
            drawerLayout,
            R.drawable.ic_drawer,
            R.string.u_drawer_call_center,
            R.string.u_drawer_call_center
    ) {

        @Override
        public void onDrawerSlide(View drawer, float slideOffset)
        {
            super.onDrawerSlide(drawer, slideOffset);

            drawerContent.setX(drawerView.getWidth() * (1 - slideOffset));
            mainContent.setX(drawerView.getWidth() * slideOffset);

        }
        public void onDrawerClosed(View view) {
        }

        public void onDrawerOpened(View drawerView) {

        }
    };
    drawerLayout.setDrawerListener(toggle);
    drawerLayout.closeDrawer(drawerView);
    drawerContent.setX(drawerView.getWidth());
}

} 正如我所说,当我的幻灯片菜单位于左侧时,我可以移动主要内容。但现在我想要右侧的幻灯片菜单。我重写了我的 xml 代码,但我无法移动主要内容 这是我的 xml 代码

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000">

<FrameLayout android:id="@+id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#cccccc" />

<LinearLayout android:id="@+id/drawer_view"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="right">

    <LinearLayout android:id="@+id/drawer_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ImageView android:id="@+id/image"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:src="@drawable/ic_launcher" />

    </LinearLayout>

</LinearLayout>

我也改了源代码

drawerContent.setX(drawerLayout.getWidth() - (drawerView.getWidth() * (1 - slideOffset)));
mainContent.setX(drawerLayout.getWidth() - (drawerView.getWidth() *   slideOffset));

但是这段代码不起作用。当我在右侧有滑动菜单时,我不知道如何使用我的代码。 如果有人知道解决方案,请帮助我 谢谢大家

【问题讨论】:

    标签: android android-animation navigation-drawer android-navigationview


    【解决方案1】:

    除了像您已经完成的那样更改drawer_view 上的layout_gravity 之外,必要的更改很小。在my original code 中,否定每次出现的drawerView.getWidth()。那就是:

    toggle = new ActionBarDrawerToggle(...) {
        ...
    
        @Override
        public void onDrawerSlide(View drawer, float slideOffset) {
            super.onDrawerSlide(drawer, slideOffset);
    
            drawerContent.setX(-drawerView.getWidth() * (1 - slideOffset));
            mainContent.setX(-drawerView.getWidth() * slideOffset);
    
            ...
        }
    };
    ...
    
    drawerContent.setX(-drawerView.getWidth());
    

    然后您需要重写MainActivityonOptionsItemSelected() 方法,如下所示:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == android.R.id.home) {
            if(drawerLayout.isDrawerOpen(Gravity.END)) {
                drawerLayout.closeDrawer(Gravity.END);
            }
            else {
                drawerLayout.openDrawer(Gravity.END);
            }
            return true;
        }
        ...
    
        return super.onOptionsItemSelected(item);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多