在使用带有选项卡布局的自定义视图时加载 activity 时突出显示视图寻呼机中的第一项?
Highlight the first item in view pager when the activity loads while using custom view with tab layout?
我正在使用诸如 youtube 应用程序之类的选项卡,并希望在 activity 加载时突出显示第一页,因此我使用了以下代码
viewpager.setCurrentItem(0);//which does not highlight first tab onstarting the tab activity
并且我使用可绘制对象作为 tablayout 中图标的背景。我通过获取 tablayout 的每个子项来设置片段创建时的可绘制背景。我在
中设置了文本颜色
<item name="tabTextAppearance">@style/TabTextAppearance</item>
</style>
<style name="TabTextAppearance" parent="TextAppearance.Design.Tab">
<item name="android:textColor">@color/tab_text_selector</item>
<item name="android:textAllCaps">false</item>
</style>
其中一个选择器文件
< ?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@drawable/favorite_selected" />
<item android:state_focused="true" android:drawable="@drawable/favorite_selected" />
<item android:state_pressed="true" android:drawable="@drawable/favorite_selected" />
<item android:drawable="@drawable/favorites" />
</selector>
还有另外两个可绘制对象,我正在为选项卡使用自定义布局
当应用程序加载到 view pager
时,我如何显示突出显示的第一个项目
您是想 select viewpager 中的第一个项目,还是第一个选项卡?
对于后者,尝试
tabLayout.getTabAt(0).select();
而不是
viewpager.setCurrentItem(0);
有点棘手。
你应该这样设置背景:
<android.support.design.widget.TabLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/tabLayout"
app:tabBackground="@drawable/tab_background"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
即将 android:background
更改为 app:tabBackground
现在,一旦您按下选项卡 - 它就会获得正确的背景 drawable
。
要将选择器应用于 TabLayout 中的图标:
tabLayout.setupWithViewPager(viewPager);
for (int i = 0; i < mTabLayout.getTabCount(); i++) {
tabLayout.getTabAt(i).setIcon(R.drawable.icon_i_selector);
}
更新:
一来二去,和@Preethi一起解决了:
tabLayout.getTabAt(0).getCustomView().setSelected(true);
重要说明。 @Preethi 正在使用 setCustomView()
方法为 Tab
s.
另一种可能的解决方法是避免自定义视图并以这种方式设置 TextColor&Icons:
tabLayout.setTabTextColors(getColor(R.color.normal_color), getColor(R.color.selected_color));
for (int i = 0; i < tabLayout.getTabCount(); i++) {
tabLayout.getTabAt(i).setIcon(R.drawable.icon_selector);
}
我正在使用诸如 youtube 应用程序之类的选项卡,并希望在 activity 加载时突出显示第一页,因此我使用了以下代码
viewpager.setCurrentItem(0);//which does not highlight first tab onstarting the tab activity
并且我使用可绘制对象作为 tablayout 中图标的背景。我通过获取 tablayout 的每个子项来设置片段创建时的可绘制背景。我在
中设置了文本颜色<item name="tabTextAppearance">@style/TabTextAppearance</item>
</style>
<style name="TabTextAppearance" parent="TextAppearance.Design.Tab">
<item name="android:textColor">@color/tab_text_selector</item>
<item name="android:textAllCaps">false</item>
</style>
其中一个选择器文件
< ?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@drawable/favorite_selected" />
<item android:state_focused="true" android:drawable="@drawable/favorite_selected" />
<item android:state_pressed="true" android:drawable="@drawable/favorite_selected" />
<item android:drawable="@drawable/favorites" />
</selector>
还有另外两个可绘制对象,我正在为选项卡使用自定义布局 当应用程序加载到 view pager
时,我如何显示突出显示的第一个项目您是想 select viewpager 中的第一个项目,还是第一个选项卡?
对于后者,尝试
tabLayout.getTabAt(0).select();
而不是
viewpager.setCurrentItem(0);
有点棘手。
你应该这样设置背景:
<android.support.design.widget.TabLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/tabLayout"
app:tabBackground="@drawable/tab_background"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
即将 android:background
更改为 app:tabBackground
现在,一旦您按下选项卡 - 它就会获得正确的背景 drawable
。
要将选择器应用于 TabLayout 中的图标:
tabLayout.setupWithViewPager(viewPager);
for (int i = 0; i < mTabLayout.getTabCount(); i++) {
tabLayout.getTabAt(i).setIcon(R.drawable.icon_i_selector);
}
更新:
一来二去,和@Preethi一起解决了:
tabLayout.getTabAt(0).getCustomView().setSelected(true);
重要说明。 @Preethi 正在使用 setCustomView()
方法为 Tab
s.
另一种可能的解决方法是避免自定义视图并以这种方式设置 TextColor&Icons:
tabLayout.setTabTextColors(getColor(R.color.normal_color), getColor(R.color.selected_color));
for (int i = 0; i < tabLayout.getTabCount(); i++) {
tabLayout.getTabAt(i).setIcon(R.drawable.icon_selector);
}