0

我在 android 的屏幕上有 3 个视图,假设像一组按钮、地图、列表和另一个信息视图。这些都是垂直存在的。

所以,如果我点击列表,地图应该得到更新,按钮颜色也应该改变。有时如果我单击按钮信息应该显示。

这种场景下,使用fragment好不好?或相对布局?建议

谢谢

4

2 回答 2

1

我会选择一个由RelativeLayout 组成的Activity,在RelativeLayout 中有3 个FrameLayouts。然后,我会将代码中的片段添加到 FrameLayouts。每个片段 1 个。通过这种方式,您可以轻松地以任何您想要的方式移动片段。滑动菜单,顶部滑动,侧滑,上下滑动,如此简单。如果你像这样设置它就很容易了。

选择最左侧时,您可以将另外 2 个向右推,当中心获得焦点时,将左侧的一个向左滑动,向右滑动一个,当最右侧的一个获得焦点时,将另一个向左滑动。

或者你可以从上到下。或者您可以始终让所有 3 个空间都相等。或者你总是可以把不集中的东西推到右、左、上、下,可能性是无穷无尽的。您可以将未聚焦的 2 到 1/4 尺寸缩小并将它们推到屏幕的一侧,一个在顶部,一个在底部。

看看我要去哪里?

否则做一个线性布局,有 3 个框架布局,并将每个框架布局设置为 weight = 1(可能必须切换一些其他选项以保持它们在任何时候都完美),然后添加你的片段。

    public void swapfragment(int fragId, Bundle args, boolean slide)
    {
        FragmentTransaction ft = getFragmentManager().beginTransaction();

        switch (fragId)
        {
        case FRAGID_DEVICE:
            currentFrag = new FragmentDevice();
            currentFrag.setArguments(args);
            ((FragmentDevice) currentFrag).initialize();
            break;
        case FRAGID_NETWORK:
            currentFrag = new FragmentNetwork();
            currentFrag.setArguments(args);
            ((FragmentNetwork) currentFrag).initialize();
            break;
        }

        ft.replace(R.id.flFragHost, currentFrag).commit();
        if (slide)
            slideFragment();
    }

    private void slideFragment()
    {
        final Point displaySize = new Point();
        getWindowManager().getDefaultDisplay().getSize(displaySize);

        if (isFragmentOut)
        {
            isFragmentOut = false;
            Animation slideOutAnimation = AnimationUtils.loadAnimation(this, R.anim.slide_right_out_80);
            AnimationListener listener = new Animation.AnimationListener()
            {

                public void onAnimationStart(Animation animation)
                {
                }

                public void onAnimationRepeat(Animation animation)
                {
                }

                public void onAnimationEnd(Animation animation)
                {
                    int pushback = (int) (displaySize.x * .8f);

                    rlFragHost.clearAnimation();
                    RelativeLayout.LayoutParams FragContainerParams;
                    FragContainerParams = (android.widget.RelativeLayout.LayoutParams) rlFragHost.getLayoutParams();
                    FragContainerParams.setMargins(pushback, 0, pushback * -1, 0);
                    rlFragHost.setLayoutParams(FragContainerParams);
                }
            };
            slideOutAnimation.setAnimationListener(listener);
            rlFragHost.startAnimation(slideOutAnimation);
        }
        else
        {
            isFragmentOut = true;
            Animation slideInAnimation = AnimationUtils.loadAnimation(this, R.anim.slide_left_in_80);
            AnimationListener listener = new Animation.AnimationListener()
            {

                public void onAnimationStart(Animation animation)
                {
                }

                public void onAnimationRepeat(Animation animation)
                {
                }

                public void onAnimationEnd(Animation animation)
                {

                    rlFragHost.clearAnimation();
                    RelativeLayout.LayoutParams FragContainerParams;
                    FragContainerParams = (android.widget.RelativeLayout.LayoutParams) rlFragHost.getLayoutParams();
                    FragContainerParams.setMargins(0, 0, 0, 0);
                    rlFragHost.setLayoutParams(FragContainerParams);
                }
            };
            slideInAnimation.setAnimationListener(listener);
            rlFragHost.startAnimation(slideInAnimation);
        }
    }

我知道这并不完全是您所需要的,但它应该可以帮助您入门。这就是我做滑动菜单的方式。

于 2013-07-09T18:30:22.713 回答
0

我认为很多都是个人喜好。我特别喜欢的是线性布局。您提到要垂直显示项目,只需设置 android:orientation="vertical",将项目按顺序放入 xml 文件中,然后就可以了。我从来没有亲自使用过片段,所以我不能说它们的用处,但是线性布局还没有让我失望。

于 2013-07-09T18:32:29.297 回答