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