自定义带有导航下拉列表的操作栏

3
我需要在应用程序中添加一个ActionBar, 但它必须是定制的。从左到右依次是:自定义返回按钮、自定义下拉列表、自定义按钮、中间图片以及右边两个自定义按钮。
我的最佳方法是什么?是否可以使用ActionBar,还是最好将其创建为布局?
minSdk版本是14。

“自定义”是什么意思?Actionbar本身支持自定义视图和主题样式,但同时也有一些棘手的部分需要自定义,因此一个好的方法是找出你想要实现的功能是否已经在框架中支持。首先,请查看相关文章 - 自定义操作栏 和有用的工具 - 操作栏样式生成器 - Chansuk
2个回答

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创建样式来实现。


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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接