使用操作栏选项卡时,如果选项卡内容对于显示来说太大,有时它们会显示为“堆叠”。当我使用选项卡内容的自定义视图时会出现问题,它会导致选定的选项卡不显示在下拉列表中,选择选项卡后,下拉列表会消失,并显示小的空选项卡。
以下是选择项目之前下拉列表的屏幕截图:(请注意,即使选中了标签,也不会显示标签的内容)
此外,选择项目后,标签不再堆叠,标签的内容为空:
这是我的代码,(请注意,我使用标签的自定义视图来演示问题)
public class ExampleActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final TextView selectedTabText = new TextView(this);
setContentView(selectedTabText);
ActionBar.TabListener listener = new ActionBar.TabListener() {
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
TextView customView = (TextView) tab.getCustomView();
selectedTabText.setText(customView.getText());
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
}
};
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
addTab(actionBar, listener, "Tab one with a very long name");
addTab(actionBar, listener, "Tab two with a very long name");
addTab(actionBar, listener, "Tab three with a very long name");
addTab(actionBar, listener, "Tab four with a very long name");
}
private void addTab(ActionBar actionBar, ActionBar.TabListener listener, String text) {
ActionBar.Tab tab = actionBar.newTab();
TextView textView = new TextView(this);
textView.setText(text);
tab.setCustomView(textView);
tab.setTabListener(listener);
actionBar.addTab(tab);
}
}
答案 0 :(得分:3)
这是一个已知错误,已经报告给错误跟踪器:
https://code.google.com/p/android/issues/detail?id=41392
为了解决这个问题,我通过讨厌的黑客禁用了操作栏折叠行为。应该从onStart活动方法调用以下方法:
/**
* SUPER hack to disable tab collapsing with smaller screens, which doesn't allow custom tab bar views to be used
* https://code.google.com/p/android/issues/detail?id=41392
*/
private void disableCollapsibleTabs() {
try {
ActionBar actionBar = getActionBar();
Field actionViewField = actionBar.getClass().getDeclaredField("mTabScrollView");
actionViewField.setAccessible(true);
Object mTabScrollView = actionViewField.get(actionBar);
Method setAllowCollapse = mTabScrollView.getClass().getDeclaredMethod("setAllowCollapse", boolean.class);
setAllowCollapse.setAccessible(true);
setAllowCollapse.invoke(mTabScrollView, false);
} catch (Exception e) {
Log.e("", "Error while disabling actionbar collapsible tabs", e);
}
}
答案 1 :(得分:1)
编辑:结束使用
<android.support.design.widget.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/tint" />`
而不是已弃用的ActionBar标签。 这不会在方向更改时折叠标签栏,但似乎google和facebook的应用程序也是如此(我猜)。
更新:似乎它不起作用,这只是一个副作用。 这似乎是一个时间问题 - &gt;当onConfigurationChanged中的代码需要一点时间时,问题似乎就消失了。 这个非常脏的黑客终于工作了,但它不是一个解决方案(不推荐,也许是其他人找到它的提示):
@Override
public void onConfigurationChanged(Configuration newConfig) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
super.onConfigurationChanged(newConfig);
}
对我而言,这在我的片段中被调用时起作用。希望它有所帮助。
@Override
public void onConfigurationChanged(Configuration newConfig) {
final ActionBar actionBar = getActivity()).getSupportActionBar();
actionBar.invalidateOptionsMenu();
}
答案 2 :(得分:0)
在调用onConfigurationChanged方法时,只需重置自定义选项卡。 这对我有用。 希望它有所帮助。
@Override
public void onConfigurationChanged(Configuration newConfig) {
try {
Thread.sleep(100);
actionBar.getTabAt(0).setCustomView(/*your custom view*/);
} catch (InterruptedException e) {
e.printStackTrace();
}
super.onConfigurationChanged(newConfig);
}