有没有可能的方法来实现没有碎片的导航抽屉?

时间:2013-08-27 03:08:42

标签: android navigation drawer

我已经坚持了2天这个问题,试图自己解决。我想我的应用程序有导航抽屉,片段很难让我理解。我不想改变我的任何代码。我看过this示例,但它并没有帮助我理解太多。

我只是不知道,如何实现无抽屉导航。

感谢任何帮助。

感谢。

2 个答案:

答案 0 :(得分:1)

使用此代码可以执行任何滑动动画 菜单布局是左侧的幻灯片形式 实际布局是您的布局首先对用户可见。 总布局包含两者。 我有同样的问题,所以我做了这个代码,它的工作非常好

一切顺利:)

MainActivity.java的代码

package com.example.slidemenuanimation;

import android.app.Activity;
import android.os.Bundle;
import android.view.Display;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.TranslateAnimation;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;

public class MainActivity extends Activity implements AnimationListener {

    int ActualLayoutWidth, MenuLayoutWidth, TotalLayoutWidth;
    RelativeLayout actualLayout, totalLayout;
    LinearLayout menuLayout;
    RelativeLayout.LayoutParams menuLayoutParams, actualLayoutParams;
    FrameLayout.LayoutParams totallayoutParams;

    ImageView menulayoutImage, actualLayoutImage;

    TranslateAnimation MenuClickRightAnim, MenuClickLeftAnim;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Display display = getWindowManager().getDefaultDisplay();
        ActualLayoutWidth = display.getWidth();
        MenuLayoutWidth = display.getWidth();
        TotalLayoutWidth = ActualLayoutWidth + MenuLayoutWidth;

        menuLayout = (LinearLayout) findViewById(R.id.menu_layout);
        actualLayout = (RelativeLayout) findViewById(R.id.actuallayout);
        totalLayout = (RelativeLayout) findViewById(R.id.totallayout);

        // parmeters for total layout
        totallayoutParams = new FrameLayout.LayoutParams(TotalLayoutWidth,
                FrameLayout.LayoutParams.FILL_PARENT, 3);
        totallayoutParams.setMargins(-MenuLayoutWidth, 0, 0, 0);
        totalLayout.setLayoutParams(totallayoutParams);

        // parmeters for menu layout
        menuLayoutParams = new RelativeLayout.LayoutParams(MenuLayoutWidth,
                RelativeLayout.LayoutParams.FILL_PARENT);
        menuLayout.setLayoutParams(menuLayoutParams);

        // parameters for actual layout
        actualLayoutParams = new RelativeLayout.LayoutParams(ActualLayoutWidth,
                RelativeLayout.LayoutParams.FILL_PARENT);
        actualLayoutParams.addRule(RelativeLayout.RIGHT_OF, R.id.menu_layout);
        actualLayout.setLayoutParams(actualLayoutParams);

        // intializing animations
        // menu moves right
        MenuClickRightAnim = new TranslateAnimation(0, MenuLayoutWidth, 0, 0);
        MenuClickRightAnim.setFillAfter(true);
        MenuClickRightAnim.setAnimationListener(this);
        MenuClickRightAnim.setDuration(750);

        // menu moves left
        MenuClickLeftAnim = new TranslateAnimation(0, -MenuLayoutWidth, 0, 0);
        MenuClickLeftAnim.setAnimationListener(this);
        MenuClickLeftAnim.setFillAfter(true);
        MenuClickLeftAnim.setDuration(750);

        // init widgets
        menulayoutImage = (ImageView) findViewById(R.id.imagein_menulayout);

        menulayoutImage.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                totalLayout.setAnimation(MenuClickLeftAnim);
                totalLayout.startAnimation(MenuClickLeftAnim);
            }
        });

        actualLayoutImage = (ImageView) findViewById(R.id.imagein_actuallayout);

        actualLayoutImage.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                totalLayout.setAnimation(MenuClickRightAnim);
                totalLayout.startAnimation(MenuClickRightAnim);

            }
        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public void onAnimationEnd(Animation animation) {

        if (animation == MenuClickRightAnim) {

            // setting params for total layout because naimtion transfers raw
            // pizels not actual layout
            totalLayout.clearAnimation();
            totallayoutParams = new FrameLayout.LayoutParams(TotalLayoutWidth,
                    FrameLayout.LayoutParams.FILL_PARENT, 3);
            totallayoutParams.setMargins(0, 0, 0, 0);
            totalLayout.setLayoutParams(totallayoutParams);

        }
        if (animation == MenuClickLeftAnim) {

            totalLayout.clearAnimation();
            totallayoutParams = new FrameLayout.LayoutParams(TotalLayoutWidth,
                    FrameLayout.LayoutParams.FILL_PARENT, 3);
            totallayoutParams.setMargins(-MenuLayoutWidth, 0, 0, 0);
            totalLayout.setLayoutParams(totallayoutParams);

        }

    }

    @Override
    public void onAnimationRepeat(Animation arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onAnimationStart(Animation arg0) {
        // TODO Auto-generated method stub

    }

}

xml activitymain.xml的代码

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/totallayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#F6F6F6"
    tools:context=".MainActivity" >

    <LinearLayout
        android:id="@+id/menu_layout"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" >

        <ImageView
            android:id="@+id/imagein_menulayout"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:src="@drawable/ic_launcher" />
    </LinearLayout>

    <RelativeLayout
        android:id="@+id/actuallayout"
        android:layout_width="fill_parent"
        android:layout_height="match_parent" >

        <ImageView
            android:id="@+id/imagein_actuallayout"
            android:layout_width="150dp"
            android:layout_height="150dp"
            android:src="@drawable/ic_launcher" />
    </RelativeLayout>

</RelativeLayout>

答案 1 :(得分:0)

我也有这个问题。如果您的问题有多个片段,您可以修复它,但它并不理想。您需要做的是进行多项活动,每次活动都需要重新创建导航抽屉。但无论你还是要将视图设置为片段。

但是..如果你想使用NO片段,唯一的方法就是为每个xml布局添加一个抽屉布局(导航抽屉只是屏幕一侧的抽屉布局)。这是人们在谷歌推出自己的导航抽屉之前所做的事情......

我知道这可能不是您正在寻找的答案,但我希望它有所帮助