如何为整个应用程序制作固定的页脚?

时间:2015-10-02 18:35:02

标签: android android-layout android-fragments

我正在创建一个带有viewpager的SlidingTab布局的音乐应用。我在主要活动布局的底部包含了一个页脚(就像Google播放音乐一样)。现在每个viewpager片段都包含列表或网格。在点击每个网格/列表项目(比如音乐专辑/流派/艺术家等)时,它会启动一个新活动,显示网格项目的详细信息(歌曲数量等)。但我希望将这项新活动放在页脚上方,并且我不想在每项活动中加入页脚。

我应该用片段替换活动,如果是,怎么做?

请参阅此图片以了解我打算做什么 http://i.stack.imgur.com/fgL0u.png

我的问题是绿色部分屏幕应该是片段吗?如果是,我该如何发布它?

2 个答案:

答案 0 :(得分:0)

根据您的要求,您可以在活动布局中添加静态页脚。 Viewpager中的切换器视图可能是不同的碎片。

因此片段会不断变化,页脚会持续存在。有许多教程可用于将片段与活动一起使用。

One could be found here. Also have a look at this one

更新[根据问题中更新的图片]:可能有很多方法可以实现您提到的用户界面。目前我可以想到这些方式:

  1. 您可以拥有将由所有活动扩展的Base Activity类。在该基类中,您可以添加用于在底部动态添加页脚的代码。在这种方法中,您将不得不在所有活动布局的底部提供边距。
  2. 另一种方法可能是设计footer.xml并使用<include/>标记
  3. 将所有布局文件包括在内
  4. 或者您可以创建一个会膨胀footer.xml的Singleton类。此单例实例可用于显示持久页脚

答案 1 :(得分:0)

页脚应该是碎片。通过fragment标签将它放在xml布局活动中。在onCreateView()中更新您的视图,检查媒体是否正在播放等等。
这样你就可以有一个班级来照顾,没有两面性 也将视图初始化为静态变量可能会有所帮助

希望这会有所帮助:

public class PlayFragment extends Fragment implements MyStaticStreamAudio.OnCompleteListener {

static boolean isPlaying = false;
static ToggleButton play;
static Button next, back;
static TextView titleView;


public PlayFragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View rootView = inflater.inflate(R.layout.fragment_play, container, false);

    play = (ToggleButton) rootView.findViewById(R.id.tbPlay);
    next = (Button) rootView.findViewById(R.id.bNext);
    back = (Button) rootView.findViewById(R.id.bBack);
    titleView = (TextView) rootView.findViewById(R.id.tvTitle);

    if (isPlaying) {
        play.setEnabled(true);
        play.setChecked(true);
    }

    play.setOnClickListener(new PlayChangeListener());
    next.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (canNext()) {
                goNext();
                updateView();
            }
        }
    });
    back.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (canBack()) {
                goBack();
                updateView();
            }
        }
    });

    return rootView;
}

private void goBack() {
MyStaticStreamAudio.goBack();
    resetAndPlay();
}

private void goNext() {
MyStaticStreamAudio.goNext();
    resetAndPlay();

}

public void pauseMode() {
    isPlaying = false;
    play.setChecked(false);
    play.setEnabled(true);
}

private void resetAndPlay() {
    MyStaticStreamAudio.reset();
    MyStaticStreamAudio.initializePlayer(getActivity());
    MyStaticStreamAudio.play();
}

boolean canNext() {
    int current = MyStaticStreamAudio.getCurrentTrack();
    return current < MyStaticStreamAudio.getTracks();
}

boolean canBack() {
    int current = MyStaticStreamAudio.getCurrentTrack();
    return current > 1;
}


public void updateView() {

    if (canNext())
        next.setEnabled(true);
    else
        next.setEnabled(false);
    if (canBack())
        back.setEnabled(true);
    else
        back.setEnabled(false);

    if (play != null) {
        play.setEnabled(false);
        play.setChecked(true);
    }
}

public void startStream() {
    isPlaying = true;
    updateView();
}


@Override
public void onComplete() {
    play.setChecked(false);
    progress.setIndeterminate(false);
}

public void playMode() {
    play.setEnabled(true);
    play.setChecked(true);
}

}