5

カスタムビューが標準のアクションバータブのように見えるカスタムナビゲーション付きのアクションバーが欲しいのですが。車輪の再発明のように聞こえますが、下に示すように、タブと同じ行にメニューボタンを配置できることを意味します。これは設計要件であり、このアプリの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>

しかし、それはActionButtonを複製し、タブを複製する方法がわかりません。

私は私が必要になると思います:

  • 特別なタブコンテナビューグループ(おそらくActionBarSherlockライブラリから)
  • ABSライブラリのバックグラウンドリソースを持つタブのように見えるビュー。
  • ビューがクリックされた後も選択されたままであることを示すコード(RadioButtonと同様)。

サンプルまたは同様のソリューションへのポインタ(ActionBarSherlockライブラリ内であっても)をいただければ幸いです。

4

2 に答える 2

14

//埋め込みタブを有効にする

//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

于 2012-10-16T02:40:48.750 に答える
6

階層ビューアを使用することで、これを行う方法がわかったと思います。まったく難しいことではなかったことがわかりました。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.
}

これが誰かに役立つことを願っています。

于 2012-10-03T07:40:00.163 に答える