Android 查看带有片段和指示器的寻呼机

Android 查看带有片段和指示器的寻呼机,android,Android,我正在开发一个应用程序,我在其中实现了ViewPager,我希望用户滑动并进入下一个屏幕。我正在实现片段。一切都很好,但我还想要一件事。我想指出哪个屏幕现在处于活动状态。就像标签一样。我在网上搜索了一下,但没有发现任何有用的东西。如果有什么想法,我会很感激的。谢谢 这是我的视图寻呼机适配器、片段活动和xml布局 import java.util.ArrayList; import java.util.List; import com.viewpagerindicator.TitlePageIn

我正在开发一个应用程序,我在其中实现了ViewPager,我希望用户滑动并进入下一个屏幕。我正在实现片段。一切都很好,但我还想要一件事。我想指出哪个屏幕现在处于活动状态。就像标签一样。我在网上搜索了一下,但没有发现任何有用的东西。如果有什么想法,我会很感激的。谢谢 这是我的视图寻呼机适配器、片段活动和xml布局

import java.util.ArrayList;
import java.util.List;

import com.viewpagerindicator.TitlePageIndicator;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.widget.Toast;

public class MainActivity extends FragmentActivity implements OnPageChangeListener {

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

        List<Fragment> list = new ArrayList<Fragment>();
        list.add(MyFragment.newInstance("fragment 1"));
        list.add(MyFragment.newInstance("fragment 2"));
        list.add(MyFragment.newInstance("fragment 3"));
        MyPagerAdapter a = new MyPagerAdapter(getSupportFragmentManager(), list);
        ViewPager pager = (ViewPager) findViewById(R.id.viewpager);
        pager.setAdapter(a);

    }

    @Override
    public void onPageScrollStateChanged(int arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {
        // TODO Auto-generated method stub
    }

    @Override
    public void onPageSelected(int arg0) {
        // TODO Auto-generated method stub

    }


}
import java.util.ArrayList;
导入java.util.List;
导入com.viewpagerindicator.TitlePageIndicator;
导入android.os.Bundle;
导入android.support.v4.app.Fragment;
导入android.support.v4.app.FragmentActivity;
导入android.support.v4.view.ViewPager;
导入android.support.v4.view.ViewPager.OnPageChangeListener;
导入android.widget.Toast;
公共类MainActivity扩展FragmentActivity在PageChangeListener上实现{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
列表=新的ArrayList();
添加(MyFragment.newInstance(“fragment 1”);
添加(MyFragment.newInstance(“fragment 2”);
添加(MyFragment.newInstance(“fragment 3”);
MyPagerAdapter a=新的MyPagerAdapter(getSupportFragmentManager(),列表);
ViewPager pager=(ViewPager)findViewById(R.id.ViewPager);
寻呼机设置适配器(a);
}
@凌驾
公共无效onPageScrollStateChanged(int arg0){
//TODO自动生成的方法存根
}
@凌驾
已滚动页面上的公共void(int arg0、float arg1、int arg2){
//TODO自动生成的方法存根
}
@凌驾
已选择页面上的公共无效(int arg0){
//TODO自动生成的方法存根
}
}
adapter.java

package com.example.fragments;

import java.util.List;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.view.View;

public class MyPagerAdapter extends FragmentPagerAdapter {
    List<Fragment> fragments;
    public MyPagerAdapter(FragmentManager fm,List<Fragment> f) {
        super(fm);
        this.fragments = f;
    }

    @Override
    public Fragment getItem(int arg0) {

        return fragments.get(arg0);
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return fragments.size();
    }
}
package com.example.fragments;
导入java.util.List;
导入android.support.v4.app.Fragment;
导入android.support.v4.app.FragmentManager;
导入android.support.v4.app.FragmentPagerAdapter;
导入android.support.v4.view.PagerAdapter;
导入android.view.view;
公共类MyPagerAdapter扩展了FragmentPagerAdapter{
列出片段;
公共MyPagerAdapter(FragmentManager格式,列表f){
超级(fm);
这是f;
}
@凌驾
公共片段getItem(int arg0){
返回fragments.get(arg0);
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回fragments.size();
}
}
main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >


    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_below="@+id/titles"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</RelativeLayout>

请参见我创建了一个类来创建页面指示器

public class DotsScrollBar
{
    LinearLayout main_image_holder;
    public static void createDotScrollBar(Context context, LinearLayout main_holder,int selectedPage,int count)
    {
        for(int i=0;i<count;i++)
        {
            ImageView dot = null;
            dot= new ImageView(context);
            LinearLayout.LayoutParams vp = 
                new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, 
                                LayoutParams.WRAP_CONTENT);
            dot.setLayoutParams(vp);    
            if(i==selectedPage)
            {
                try {
                    dot.setImageResource(R.drawable.paging_h);
                } catch (Exception e) 
                {
                    Log.d("inside DotsScrollBar.java","could not locate identifier");
                }
            }else
            {
                dot.setImageResource(R.drawable.paging_n);
            }
            main_holder.addView(dot);
        }
        main_holder.invalidate();
    }
}
并在
onPageScrollStateChanged

像这样:

    @Override
        public void onPageScrollStateChanged(int state) {
            // TODO Auto-generated method stub
switch (state) {

        case 0:
    updateIndicator(mCurrentPage);
break;
        }

希望这能奏效。

您基本上有三个选择:

1.使用android本机
PagerTitleStrip
很容易实现,只需将其作为子项添加到xml中的ViewPager中,并将重力定义为顶部或底部,如下所示:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <android.support.v4.view.PagerTitleStrip
            android:id="@+id/pager_title_strip"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom" />

    </android.support.v4.view.ViewPager>
</RelativeLayout>

3.为自己的实现编写代码
就像在书中建议的那样。即使在这种情况下,尽管我建议您与Jake Whartons示例一起编写代码,但它真的是太神奇了

我创建了一个库来满足ViewPager中对页面指示器的需求。我的库包含一个名为DotIndicator的视图。要使用我的库,请将
compile'com.matthew tamlin:sliding intro screen:3.2.0'
添加到gradle构建文件中

通过添加以下内容,可以将视图添加到布局中:

    <com.matthewtamlin.sliding_intro_screen_library.indicators.DotIndicator
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:numberOfDots=YOUR_INT_HERE
            app:selectedDotIndex=YOUR_INT_HERE/>
与属性类似,存在修改属性的方法。要更新指示器以显示所选的不同页面,只需从
ViewPager.OnPageChangeListener.onPageSelected(int,true)
内部调用方法
indicator.setSelectedItem(int,true)

下面是一个正在使用的示例:

如果您感兴趣,该库实际上是设计用来制作介绍屏幕的,如上图所示


Github源代码可在此处找到:

谢谢你,但我不知道。你能给我一个完整的例子,这样我就可以了解实际发生了什么如何使用pagerTitleStrip?就在我的答案中,您可以复制并粘贴到您的xml,只需将标题条添加为
ViewPager
PagerTitleStrip的子项,它不会显示任何内容……当您运行activityPlease时,布局是空的,并且是相同的。如果您有问题,请发布新问题。别忘了对你遇到的任何问题都要清晰、描述性和简洁,我想你必须构建一个定制的实现,但我不确定。请问一个新问题(记住先用谷歌搜索,并展示你迄今为止所做的事情),阿瓦兰卡建议使用Jake的查看页面Indiator库。你可以从这里下载一些很棒的样本库,我的测试仍然通过。如果你开始一个新的问题并发布你的代码,然后在这里发布一个链接,我会看看你哪里出了问题。否则,可能会有一只我没抓到的虫子。另外,请确保您使用的是1.2.0版。该库看起来不错,我最终推出了自己的非常轻的实现,因为我面临着发货的压力
    <com.matthewtamlin.sliding_intro_screen_library.indicators.DotIndicator
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:numberOfDots=YOUR_INT_HERE
            app:selectedDotIndex=YOUR_INT_HERE/>
DotIndicator indicator = new DotIndicator(context);