2012-08-05 118 views
16

我有一个分裂的ActionBar,我试图添加功能几乎等同于Google Play的“正在播放” ..Android的动作条 - 推自定义视图屏幕的底部

我能得到的菜单项目出现在屏幕的底部,使用onCreateOptionsMenu,但我似乎无法使用actionBar.setCustomView在屏幕底部显示自定义视图。自定义视图位于顶部ActionBar的下方。

有谁知道如何强制自定义视图到底部,或添加自定义视图到onCreateOptionsMenu?

这里是我的代码片段:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    ActionBar actionBar = getActionBar(); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    actionBar.setDisplayShowTitleEnabled(true); 
    actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 

    //Custom view to add 
    actionBar.setCustomView(R.layout.albumitem); 
      //This view shows up just under the top actionbar at the moment, 
       despite menu items being at the bottom 

的菜单选项的代码(这些是表示在,我想我的自定义视图是底部向下)

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    new MenuInflater(this).inflate(R.menu.option_menu, menu); 

    return (super.onCreateOptionsMenu(menu)); 
} 

我相信在谷歌播放音乐应用程序底部的现在播放菜单是一个自定义视图内的拆分动作栏:

Google Play Music

+0

你可以参考我的答案在这里[固定bottomBar和顶栏] [1] [1]:http://stackoverflow.com/a/14597289/1627904 – k0sh 2013-01-30 05:30:44

回答

17

所以我设法找到一个肮脏的解决这个..那么,脏我的业余观点..

在oncreateOptionsMenu,我已经膨胀了一个名为option_menu像这样的菜单:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
     new MenuInflater(this).inflate(R.menu.option_menu, menu); 

而在XML为option_menu项目,我已经实现了actionViewClass,在这种情况下我使用相对布局(我猜我可能只需要使用浏览..?):

<item 
    android:id="@+id/layout_item" 
    android:actionViewClass="android.widget.RelativeLayout" 
    android:showAsAction="always|withText" 
    android:title="Text 1"/> 

</menu> 

于是我膨胀的XML布局,并将其添加到我的菜单中定义的layout_item:

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     new MenuInflater(this).inflate(R.menu.option_menu, menu); 
     relativeLayout = (RelativeLayout) menu.findItem(R.id.layout_item) 
       .getActionView(); 

     View inflatedView = getLayoutInflater().inflate(R.layout.now_playing, 
       null); 

     relativeLayout.addView(inflatedView); 

     return (super.onCreateOptionsMenu(menu)); 
    } 

请随意编辑/您认为合适的增强这个答案。

+0

它似乎可行,但我无法在顶部操作栏上显示图标,并且无法在底部栏上显示我的自定义视图。你也做到了吗? – 2013-01-11 13:12:58

+2

不,我最近意识到在底部使用片段可能会更好。 – 2013-01-11 13:40:33

+1

这个有点晚,但音乐应用根本不使用操作栏。顶部和底部都是自定义视图。 – adneal 2013-03-19 15:30:49

1

我已经完成了基于你的解决方案,包括顶部的自定义布局+底部的+自定义布局+标题/副标题+主页图标。下面是代码:

public class SplitABActivity extends Activity{ 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    ActionBar ab = getActionBar(); 
    ab.setTitle("Action Bar Title"); 
    ab.setSubtitle("Action Bar Subtitle"); 
    ab.setDisplayShowHomeEnabled(true); 

    LayoutInflater inflater = (LayoutInflater) getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
    RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.ab_custom_layout, null); 
    ab.setCustomView(layout); 
    ab.setSplitBackgroundDrawable(new ColorDrawable(Color.BLUE)); 
    ab.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu_including_layout, menu); 
    RelativeLayout layout = (RelativeLayout) menu.findItem(R.id.layout_item).getActionView(); 
    View v = getLayoutInflater().inflate(R.layout.ab_bottom_layout, null); 
    layout.addView(v); 

    return super.onCreateOptionsMenu(menu); 
} 
} 

ab_custom_layout.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="right" 
    > 
    <TextView android:id="@+id/element1" 
     android:layout_width="wrap_content" android:layout_height="wrap_content" 
     android:textColor="#fff" 
     android:background="#ff0000" 
     android:text="Element 1"/> 

    <TextView 
     android:id="@+id/element2" 
     android:layout_width="wrap_content" android:layout_height="wrap_content" 
     android:textColor="#000" 
     android:background="#f0f0f0" 
     android:layout_toRightOf="@+id/element1" 
     android:text="Element 2"/> 

</RelativeLayout> 

menu_including_layout.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 

<item android:id="@+id/action1" 
    android:title="Action 1" 
     android:icon="@android:drawable/ic_dialog_alert" 
     android:showAsAction="ifRoom" /> 

<item android:id="@+id/action2" 
    android:title="Action 2" 
     android:icon="@android:drawable/ic_dialog_info" 
     android:showAsAction="ifRoom" /> 

<item 
android:id="@+id/layout_item" 
android:actionViewClass="android.widget.RelativeLayout" 
android:showAsAction="always|withText" 
android:title="Layout Item"/> 
</menu> 

ab_bottom_layout.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
> 

<TextView 
    android:id="@+id/bottom_layout_txt_status" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Click this button"/> 

<ImageButton android:id="@+id/bottom_layout_btn_chat" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@android:drawable/ic_menu_camera" 
    android:layout_toRightOf="@+id/bottom_layout_txt_status" 
    android:contentDescription="@string/app_name"/> 
</RelativeLayout> 

代码的工作非常适合我。当我的平板电脑在肖像上时,我可以看到拆分的ActionBar。在景观上,它足够宽以将所有物品存储在顶部。

希望它可以帮助

相关问题