不使用 ViewPager 的 TabLayout
Posted
技术标签:
【中文标题】不使用 ViewPager 的 TabLayout【英文标题】:TabLayout without using ViewPager 【发布时间】:2016-02-12 07:26:36 【问题描述】:我想实现TabLayout
,因为它很简单,但我发现的所有教程都涉及ViewPager
。我只想要像OnClickListener
这样的东西,如果我点击Add
图标,它会显示一个显示“标签1”的toast,如果我点击一个日历图标,它将显示一个显示“标签2”的toast
我想使用TabLayout
,因为它处理设备旋转。
Main_activity.java
public class MainActivity extends AppCompatActivity
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
// Add five tabs. Three have icons and two have text titles
tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.add_live));
tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.calendar_live));
tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.group_live));
tabLayout.addTab(tabLayout.newTab().setText("Send"));
tabLayout.addTab(tabLayout.newTab().setText("Send & Post"));
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
xmlns:app="http://schemas.android.com/tools">
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_
android:layout_
app:tabMode="fixed"
app:tabGravity="fill" />
</RelativeLayout>
【问题讨论】:
你可以参考这里:androidexample.com/Tab_Layout_%7C_TabBar_-_Android_Example/… 我个人仍然会使用 viewpager 来制作过渡动画,但禁用用户滑动的功能:***.com/a/9650884/1219389 【参考方案1】:我找到了addOnTabSelectedListener
:
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener()
@Override
public void onTabSelected(TabLayout.Tab tab)
if(tabLayout.getSelectedTabPosition() == 0)
Toast.makeText(MainActivity.this, "Tab " + tabLayout.getSelectedTabPosition(), Toast.LENGTH_LONG).show();
else if(tabLayout.getSelectedTabPosition() == 1)
Toast.makeText(MainActivity.this, "Tab " + tabLayout.getSelectedTabPosition(), Toast.LENGTH_LONG).show();
else if(tabLayout.getSelectedTabPosition() == 2)
Toast.makeText(MainActivity.this, "Tab " + tabLayout.getSelectedTabPosition(), Toast.LENGTH_LONG).show();
else if(tabLayout.getSelectedTabPosition() == 3)
Toast.makeText(MainActivity.this, "Tab " + tabLayout.getSelectedTabPosition(), Toast.LENGTH_LONG).show();
else if(tabLayout.getSelectedTabPosition() == 4)
Toast.makeText(MainActivity.this, "Tab " + tabLayout.getSelectedTabPosition(), Toast.LENGTH_LONG).show();
@Override
public void onTabUnselected(TabLayout.Tab tab)
@Override
public void onTabReselected(TabLayout.Tab tab)
);
【讨论】:
是否可以在没有分页器的情况下以上述方式为标签传递自定义布局? 是的,你可以。 .尝试使用。tabLayout.addView(View)
不知道为什么很难找到答案,但非常感谢您发帖。附带说明一下,我还设置了标签标签 (setTag()),以便我可以参考被点击的标签。
使用 addOnTabSelectedListener 代替 setOnTabSelectedListener
@EleojasmilJMilagrosa, @Min2 :您只能通过提到的addView
方法添加instance of TabItem
。【参考方案2】:
使用Tab.getPosition
而不是TabLayout.getSelectedTabPosition
方法的已接受答案的替代解决方案。
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener()
@Override
public void onTabSelected(TabLayout.Tab tab)
Toast.makeText(
MainActivity.this, "Tab " + tab.getPosition(), Toast.LENGTH_LONG
).show();
@Override
public void onTabUnselected(TabLayout.Tab tab)
@Override
public void onTabReselected(TabLayout.Tab tab)
);
【讨论】:
以上是关于不使用 ViewPager 的 TabLayout的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 TabLayout 在 ViewPager 中的 Google 地图片段中获取当前位置