1

我熟悉Android开发,但我有一段时间没有编码。我不熟悉使用 Fragments,所以我只是想获得一些快速的布局建议。

我正在创建一个应用程序,我想在不同的视图之间滑动,但在活动的底部也有一个恒定的覆盖。将有三种不同的视图,但我不想要标签(TabHost 等)。我只想有一个恒定的覆盖层,它将在顶部显示当前视图的名称,并在底部显示一个恒定的覆盖层,其中包含用户名和一个按钮。这三个视图将只是解析 JSON 数据。

我不需要详细说明如何执行此操作,但任何建议都会很棒!我只是离开安卓游戏太久了。

这是我正在尝试创建的快速示例图片: 例子

谢谢你的帮助!

4

4 回答 4

1

I don't need to have a detailed description of how to do this, but any recommendations would be great! I just have been out of the Android game for too long.

Place the two overlay views in a RelativeLayout, one aligned to the top of the RelativeLayout and one aligned to the bottom of the RelativeLayout. For swiping the json based views use a ViewPager. I don't know if you want the two overlay views to be on top of the ViewPager's content or the entire ViewPager content between the two overlays, depending on what you want you'll either place the ViewPager between the two previous view in the RelativeLayout or simply set if to fill the RelativeLayout(and be placed below them).

于 2013-01-21T07:20:13.057 回答
1

为简单起见,添加一些 Internet 上可用的代码。

public class AwesomePagerActivity extends Activity {

private ViewPager awesomePager;
private static int NUM_AWESOME_VIEWS = 20;
private Context cxt;
private AwesomePagerAdapter awesomeAdapter;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_awesome_pager);
    cxt = this;

    awesomeAdapter = new AwesomePagerAdapter();
    awesomePager = (ViewPager) findViewById(R.id.awesomepager);
    awesomePager.setAdapter(awesomeAdapter);
}

private class AwesomePagerAdapter extends PagerAdapter {

    @Override
    public int getCount() {
        return NUM_AWESOME_VIEWS;
    }


    @Override
    public Object instantiateItem(ViewGroup collection, int position) {
        TextView text = new TextView(cxt);
        text.setTextSize(50);
                    text.setText("Text"+position);
        collection.addView(text, 0);

        return text;
    }


    @Override
    public void destroyItem(ViewGroup collection, int position, Object view) {
        collection.removeView((TextView) view);
    }


    @Override
    public boolean isViewFromObject(View view, Object object) {
        return (view == object);
    }

    @Override
    public void finishUpdate(ViewGroup arg0) {
    }

    @Override
    public void restoreState(Parcelable arg0, ClassLoader arg1) {
    }

    @Override
    public Parcelable saveState() {
        return null;
    }

    @Override
    public void startUpdate(ViewGroup arg0) {
    }
            @Override
    public int getItemPosition(Object object) {
        // TODO Auto-generated method stub
        return POSITION_NONE;
    }
           }
         }

您可以添加图像而不是创建新的 TextView。只需在要更改视图的 xml 中添加 ViewPager。无需创建片段,只需根据需要创建新视图(可以是任何图像、文本视图等)。

添加 xml 也是为了更好地理解。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<android.support.v4.view.ViewPager
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:id="@+id/awesomepager"/>
</LinearLayout>
于 2013-01-21T07:31:29.140 回答
0

我知道这有点晚了,但它可能对其他寻找答案的人有用。

另一种选择是使用一个FrameLayout托管您的 ViewPager 以及按钮/文本/您想要的任何其他内容。

这里有一个例子给你一个想法:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <!-- ViewPager for main screen -->
    <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <Button
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:layout_gravity="bottom|center_horizontal"
        />

    <Button
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:layout_gravity="top|center_horizontal"
        />

</FrameLayout>

注意:顺序很重要!首先定义的视图将位于所有其他视图的下方。

于 2015-03-17T00:04:13.990 回答
0

您需要像这样创建 PagerAdapter:

public class SamplePagerAdapter extends PagerAdapter{

List<View> pages = null;

public SamplePagerAdapter(List<View> pages){
    this.pages = pages;
}

@Override
public Object instantiateItem(View collection, int position){
    View v = pages.get(position);
    ((ViewPager) collection).addView(v, 0);
    return v;
}

@Override
public void destroyItem(View collection, int position, Object view){
    ((ViewPager) collection).removeView((View) view);
}

@Override
public int getCount(){
    return pages.size();
}

@Override
public boolean isViewFromObject(View view, Object object){
    return view.equals(object);
}

@Override
public void finishUpdate(View arg0){
}

@Override
public void restoreState(Parcelable arg0, ClassLoader arg1){
}

@Override
public Parcelable saveState(){
    return null;
}

@Override
public void startUpdate(View arg0){
}

}

然后创建fragmnet并将这样的代码放置到onCreateView

LayoutInflater inflater = LayoutInflater.from(this);
    List<View> pages = new ArrayList<View>();

    View page = inflater.inflate(R.layout.page, null);
    TextView textView = (TextView) page.findViewById(R.id.text_view);
    textView.setText("page1");
    pages.add(page);

    page = inflater.inflate(R.layout.page, null);
    textView = (TextView) page.findViewById(R.id.text_view);
    textView.setText("page2");
    pages.add(page);

    page = inflater.inflate(R.layout.page, null);
    textView = (TextView) page.findViewById(R.id.text_view);
    textView.setText("page 3");
    pages.add(page);

    SamplePagerAdapter pagerAdapter = new SamplePagerAdapter(pages);
    ViewPager viewPager = new ViewPager(this);
    viewPager.setAdapter(pagerAdapter);
    viewPager.setCurrentItem(1);     

    setContentView(viewPager);

并创建一些界面来监听片段上的 ViewChange,并将当前页面通过界面传递给主要活动。这就是所有人:)

于 2013-01-21T07:24:43.373 回答