我想有自定义导航在自定义视图模样的标准动作条翼片的动作条。 我知道这听起来像重新发明轮子,但它意味着我们可以在同一行选项卡上的菜单按钮,如下图所示。 这是一个设计要求,切实让更多的UI来说是有意义的应用比Android标准的行为。
我利用ActionBarSherlock像这样的IcsLinearLayout尝试:
<IcsLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:orientation="horizontal"
android:layout_height="50dip">
<Button
android:id="@+id/tab_1"
android:layout_height="match_parent"
android:gravity="center"
android:layout_width="wrap_content"
android:textStyle="bold"
android:text="TAB_1"
android:background="@drawable/abs__item_background_holo_light"
/>
<Button
android:id="@+id/tab_2"
android:layout_height="match_parent"
android:gravity="center"
android:layout_width="wrap_content"
android:textStyle="bold"
android:text="TAB_2"
android:background="@drawable/abs__item_background_holo_light"
/>
</IcsLinearLayout>
但是,复制ActionButtons,我不知道如何复制标签。
我想我需要:
- 一个特殊的标签容器的ViewGroup(大概是从ActionBarSherlock库)
- 观点看起来像从ABS库后台资源的标签。
- 一些代码,以指示在用户点击图之后它保持选定(类似于单选按钮)。
任何指针样品或类似的解决方案(即使在ActionBarSherlock库),将不胜感激。
//使嵌入制表符
//pre-ICS
if (actionBarSherlock instanceof ActionBarImpl) {
enableEmbeddedTabs(actionBarSherlock);
//ICS and forward
} else if (actionBarSherlock instanceof ActionBarWrapper) {
try {
Field actionBarField = actionBarSherlock.getClass().getDeclaredField("mActionBar");
actionBarField.setAccessible(true);
enableEmbeddedTabs(actionBarField.get(actionBarSherlock));
} catch (Exception e) {
Log.e(TAG, "Error enabling embedded tabs", e);
}
}
//helper method
private void enableEmbeddedTabs(Object actionBar) {
try {
Method setHasEmbeddedTabsMethod = actionBar.getClass().getDeclaredMethod("setHasEmbeddedTabs", boolean.class);
setHasEmbeddedTabsMethod.setAccessible(true);
setHasEmbeddedTabsMethod.invoke(actionBar, true);
} catch (Exception e) {
Log.e(TAG, "Error marking actionbar embedded", e);
}
}
此代码的工作非常完美。 在我的应用程序试了一下。 进一步参考- https://groups.google.com/forum/#!topic/actionbarsherlock/hmmB1JqDeCk
通过使用层次观众我想我们已经制定了如何做到这一点。 原来,这是不难的。 你需要从ABS库ScrollingTabContainerView,你可以添加标签到这一点。
public class MainActivity extends SherlockActivity implements ActionBar.TabListener {
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ScrollingTabContainerView root = new ScrollingTabContainerView(this);
ActionBar.Tab tab1 = getSupportActionBar().newTab();
tab1.setText("TAB 1");
tab1.setTabListener(this);
ActionBar.Tab tab2 = getSupportActionBar().newTab();
tab2.setText("TAB 2");
tab2.setTabListener(this);
root.addTab(tab1, 0, true);
root.addTab(tab2, 1, false);
getSupportActionBar().setCustomView(root);
getSupportActionBar().setDisplayShowCustomEnabled(true);
getSupportActionBar().setTitle("App Title");
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
menu.add("MENU ITEM 1");
menu.add("MENU ITEM 2");
return true;
}
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
//To change body of implemented methods use File | Settings | File Templates.
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
//To change body of implemented methods use File | Settings | File Templates.
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
//To change body of implemented methods use File | Settings | File Templates.
}
我希望这可以帮助别人。