如何在android中制作自定义分割(底部)菜单

时间:2013-10-02 18:59:52

标签: android android-actionbar actionbarsherlock android-menu

我正在尝试制作一个分割菜单(带有sherlock或没有),但我仍然没有成功。

public class MainActivity extends SherlockFragmentActivity  {
ActionBarSherlock mSherlock = ActionBarSherlock.wrap(this);
...............
    mSherlock.setUiOptions(ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW);
    mSherlock.setContentView(R.layout.activity_main);
...............
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    //Used to put dark icons on light action bar
    boolean isLight = false;

    menu.add("You")
        .setTitle("You")
        .setIcon(isLight ? R.drawable.icon_you : R.drawable.icon_you)
        .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);

    menu.add("Pet Open")
        .setIcon(isLight ? R.drawable.icon_pet_open : R.drawable.icon_pet_open)
        .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);

    menu.add("Around")
        .setIcon(isLight ? R.drawable.icon_around : R.drawable.icon_around)
        .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);

    return true;
}

因此我获得了3个没有标题和默认背景的小图标,我不知道如何更改。这就是我想要的:

Split Menu Bottom

如何在不影响顶层菜单的情况下添加自定义底部菜单?

这是我发现的:

implement split menu from manifest(我不认为这会让我有机会改变我想要的任何东西)

using layout params - 看起来它无法正常工作。


实现此菜单的最佳方式是什么?


UPDATE here is one more way i found:好消息是我可以看到如何改变它,但不好的是它在顶部和底部使用相同的背景。底部,我不确定我是否可以改变它。 enter image description here

1 个答案:

答案 0 :(得分:1)

2个选项:

1)您可以在清单中设置标记(或者按照上面的编程方式设置)以分割ActionBar,但这仅适用于您在电话大小的设备上的纵向,即使这样仍有ActionBar出现在顶部,但将前几个ActionItem移到底部。对于大多数情况来说这没什么问题,但听起来你总是说你总是希望这个底部显示,你将使用的系统菜单没有能力达到你想要的程度。

2)为屏幕底部制作自己的布局,以创建您正在谈论的样式菜单。这可能有效:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:orientation="vertical" >

    <!-- this is where the Activity contents go -->
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="40dp"
    android:layout_alignParentBottom="true"
    android:background="#8f8"
    android:orientation="horizontal" >

    <!-- this is the green bottom bar -->
</LinearLayout>

<LinearLayout
    android:layout_width="48dp"
    android:layout_height="70dp"
    android:layout_alignParentBottom="true"
    android:layout_alignParentleft="true"
    android:layout_margin="5dp"
    android:orientation="vertical" >

    <!-- This is the status button -->

    <ImageView
        android:layout_width="48dp"
        android:layout_height="40dp"
        android:background="#00f" />

    <TextView
        android:layout_width="48dp"
        android:layout_height="wrap_content"
        android:padding="4dp"
        android:text="Status"
        android:textAlignment="center"
        android:textSize="12sp" />
</LinearLayout>

<LinearLayout
    android:layout_width="60dp"
    android:layout_height="70dp"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_margin="5dp"
    android:orientation="vertical" >

     <!-- This is the Pet Open button -->


    <ImageView
        android:layout_width="60dp"
        android:layout_height="40dp"
        android:background="#00f" />

    <TextView
        android:layout_width="60dp"
        android:layout_height="wrap_content"
        android:padding="4dp"
        android:text="Pet Open"
        android:textAlignment="center"
        android:textSize="12sp" />
</LinearLayout>

<LinearLayout
    android:layout_width="60dp"
    android:layout_height="70dp"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:layout_margin="5dp"
    android:orientation="vertical" >


     <!-- This is the Refresh button -->

    <ImageView
        android:layout_width="60dp"
        android:layout_height="40dp"
        android:background="#00f" />

    <TextView
        android:layout_width="60dp"
        android:layout_height="wrap_content"
        android:padding="4dp"
        android:text="Refresh"
        android:textAlignment="center"
        android:textSize="12sp" />
</LinearLayout>

</RelativeLayout>

这适用于3个按钮,通过一系列调整使其风格更接近您想要的样式。如果您希望在底部显示3个以上,并且您想使用提供的MenuItem,则可以在onPrepareOptionsMenu()中在运行时确定所有这些,并动态更改上面版本的布局。这将是更多的工作,但可能更多你正在寻找。