带导航下拉列表的自定义ActionBar

时间:2013-08-26 07:30:45

标签: android android-actionbar android-custom-view

我需要在我的应用程序中添加一个ActionBar,但必须进行自定义。 从左到右:自定义后退按钮,自定义下拉列表,自定义按钮,中间的图像以及右侧的两个自定义按钮。

这里我最好的方法是什么?是否可以使用ActionBar或者我最好将其创建为布局?

minSdk是14

2 个答案:

答案 0 :(得分:3)

我认为最好使用ActionBar。自定义下拉列表可以通过

设置
private class MyAdapter extends BaseAdapter {

  /**
   * View displayed inside the Action Bar
   */
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    View resultView = convertView;
    if (resultView == null) {
      resultView = mLayoutInflater.inflate(R.layout.spinner_main, null);
    }

    return resultView;
  }

  /**
  * View Displayed inside list of possible options
  */
  @Override
  public View getDropDownView(int position, View convertView, ViewGroup parent) {
    View resultView = convertView;

    if (resultView == null) {
      resultView = mLayoutInflater.inflate(R.layout.spinner_drop_down, null);
    }

    return resultView;
  }

}

然后

getActionBar().setListNavigationCallbacks(new MyAdapter(), listener);

其他内容,例如自定义后退图标,您可以为ActionBar制作样式。

答案 1 :(得分:2)

之前我问过这个问题,这是你的答案:

您可以使用SplitActionBar。您的应用程序支持在Android 4.0(API级别14)或更高级别上运行

修复方法是始终在顶部栏中放置一个项目,以阻止底部内容适应那里,从而将所有内容强制进入底栏。从另一个用户看这个示例项目:

<?xml version="1.0" encoding="utf-8"?
<manifest package="com.commonsware.android.actionbarbc"
          xmlns:android="http://schemas.android.com/apk/res/android">

  <application android:hardwareAccelerated="true"
               android:icon="@drawable/cw"
               android:label="@string/app_name">
    <activity android:label="@string/app_name"
              android:name=".InflationDemo"
              android:uiOptions="splitActionBarWhenNarrow">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
  </application>
  <uses-sdk android:minSdkVersion="4"
            android:targetSdkVersion="11" />
  <supports-screens android:anyDensity="true"
                    android:largeScreens="true"
                    android:normalScreens="true"
                    android:smallScreens="true"
                    android:xlargeScreens="true" />
</manifest>

他将此代码用于他的活动:

private void setupActionBar() {
ActionBar actionBar = getActionBar();

ViewGroup v = (ViewGroup)LayoutInflater.from(this)
    .inflate(R.layout.conversation_list_actionbar, null);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM,
        ActionBar.DISPLAY_SHOW_CUSTOM);
actionBar.setCustomView(v,
        new ActionBar.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT,
                ActionBar.LayoutParams.WRAP_CONTENT,
                Gravity.CENTER_VERTICAL | Gravity.RIGHT));

mUnreadConvCount = (TextView)v.findViewById(R.id.unread_conv_count);
}

http://developer.android.com/guide/topics/ui/actionbar.html#SplitBar