我想要一个像这样的标签的例子
我搜索了但是得到了这个。
我无法使用此来源。有人可以告诉我另一个带滑动选项的标签示例
我认为viewpageindicator与google play标签不同。
因为当我在谷歌播放页面滚动时,标签下方的行在滚动时移动,但在viewpageindicator中它不是。
谢谢
答案 0 :(得分:25)
This article( Android Material Design使用标签)
将指导您创建标签页。例如,创建固定标签
当您的标签数量有限时,应使用固定标签。这些 标签固定在适当位置。在android设计支持库中很多 新元素,例如
CoordinatorLayout
,AppBarLayout
,TabLayout
和很多 更多的介绍。我不会涵盖所有这些,因为它不是 这篇文章的议程。打开主要活动(
activity_main.xml
)的布局文件并添加 下面的布局代码。
app:tabMode
- 定义标签布局的模式。在我们的情况下 价值应该“固定”<强> activity_main.xml中强>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:layout_scrollFlags="scroll|enterAlways" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> <android.support.design.widget.TabLayout android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" app:tabMode="fixed" app:tabGravity="fill"/> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> </android.support.design.widget.CoordinatorLayout>
打开
MainActivity.java
并执行以下更改。
tabLayout.setupWithViewPager()
- 将ViewPager指定给TabLayout。
setupViewPager()
- 通过设置适当的方式定义标签数量 片段和标签名称。ViewPagerAdapter - 自定义适配器类提供所需的片段 用于视图寻呼机。 的 MainActivity.java 强>
package info.androidhive.materialtabs.activity; import android.os.Bundle; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import java.util.ArrayList; import java.util.List; import info.androidhive.materialtabs.R; import info.androidhive.materialtabs.fragments.OneFragment; import info.androidhive.materialtabs.fragments.ThreeFragment; import info.androidhive.materialtabs.fragments.TwoFragment; public class MainActivity extends AppCompatActivity { private Toolbar toolbar; private TabLayout tabLayout; private ViewPager viewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); viewPager = (ViewPager) findViewById(R.id.viewpager); setupViewPager(viewPager); tabLayout = (TabLayout) findViewById(R.id.tabs); tabLayout.setupWithViewPager(viewPager); } private void setupViewPager(ViewPager viewPager) { ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); adapter.addFragment(new OneFragment(), "ONE"); adapter.addFragment(new TwoFragment(), "TWO"); adapter.addFragment(new ThreeFragment(), "THREE"); viewPager.setAdapter(adapter); } class ViewPagerAdapter extends FragmentPagerAdapter { private final List<Fragment> mFragmentList = new ArrayList<>(); private final List<String> mFragmentTitleList = new ArrayList<>(); public ViewPagerAdapter(FragmentManager manager) { super(manager); } @Override public Fragment getItem(int position) { return mFragmentList.get(position); } @Override public int getCount() { return mFragmentList.size(); } public void addFragment(Fragment fragment, String title) { mFragmentList.add(fragment); mFragmentTitleList.add(title); } @Override public CharSequence getPageTitle(int position) { return mFragmentTitleList.get(position); } } }
现在运行应用程序。您应该能够看到使用滑动显示的选项卡 选项卡之间的功能。
答案 1 :(得分:3)
首先,您需要使用viewpager android.support.v4.view.ViewPager
然后在主活动中夸大此布局,确保您的活动实现
android.support.v7.app.ActionBar.TabListener
假设您想要有4个标签,然后创建
4个不同的片段。创建一个通用适配器,以便根据
促进这些片段您选择的标签。
以下是使用代码段http://www.feelzdroid.com/2014/10/android-action-bar-tabs-swipe-views.html
的简单示例注意:上面的示例适用于android support lib,后者提供了向后操作栏
兼容早期版本的Android手机
希望它有所帮助。
由于
答案 2 :(得分:1)
当我实现了类似的东西时,我已经以更好的方式完成了它,就类而言。我在一个名为working的包中创建了适配器。
以下是代码:
public class TabsPagerAdapter extends FragmentPagerAdapter {
public TabsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int index) {
switch (index) {
case 0:
return new WorkingFragment();
//You can add as many fragments as you wish here by adding the cases and calling the different fragments.
}
return null;
}
@Override
public int getCount() {
// get item count - equal to number of tabs. 4 is only the number of fragments I had used.
return 4;
}
}
然后,您需要在我给出的示例中创建一个名为WorkingFragment
的新类。为了清晰编码,我在主包中创建了这个类。
以下是片段的代码:
public class NewEventFragment extends Fragment {
View rootView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//reference the xml file containing the view with all the code here.
}
}
在MainActivity
中,您需要将功能从一个标签更改为另一个标签。在我的情况下,我把它包含在主包中。
以下是MainActivity类的代码:
public class MainActivity extends FragmentActivity implements ActionBar.TabListener {
private ViewPager ViewPager;
private TabsPagerAdapter SectionsPagerAdapter;
private ActionBar actionBar;
//Include the name for the tabs in this array. Make sure the number of elements in this string matches the number of views you will have in your app.
private String[] tabs = {};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initialisation
ViewPager = (ViewPager) findViewById(R.id.pager);
actionBar = getActionBar();
SectionsPagerAdapter = new TabsPagerAdapter(getSupportFragmentManager());
ViewPager.setAdapter(SectionsPagerAdapter);
actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// Adding Tabs
for (String tab_name : tabs) {
actionBar.addTab(actionBar.newTab().setText(tab_name).setTabListener(this));
}
ViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// on changing the page
// make respected tab selected
actionBar.setSelectedNavigationItem(position);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
@Override
public void onTabReselected(Tab tab, android.app.FragmentTransaction ft) {
}
@Override
public void onTabSelected(Tab tab, android.app.FragmentTransaction ft) {
ViewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft) {
}
}
希望这有助于您为应用程序实现必要的功能:)
答案 3 :(得分:0)
使用片段标签的简单方法
viewPager = (ViewPager) findViewById(R.id.viewpager);
setupViewPager(viewPager);
tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
在创建中,然后
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new
ViewPagerAdapter(getSupportFragmentManager());
adapter.addFrag(new RootDetailFragment(), "TAB 1");
adapter.addFrag(new ShiftDetailFragment(), "TAB 2");
viewPager.setAdapter(adapter);
}
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFrag(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
布局文件中的添加
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#000"
app:tabGravity="fill"
app:tabMode="fixed" />
</android.support.design.widget.AppBarLayout>