如何扩展ActionBar

时间:2015-06-05 19:55:05

标签: android android-layout android-actionbar android-toolbar

当我尝试在ActionBar下立即添加一个视图时,如果我添加一个ImageView,它似乎只能工作,如下所示。

同样不适用于LinearLayout或RelativeLayout,而是删除所有ActionBar的初始内容,并将其替换为线性/相对布局内容。

为什么我无法成功添加LinearLayout或RelativeLayout,或者我可能出错的地方。我刚开始使用Android。

我的目标是这样的: enter image description here

- 代码

通过添加ImageView

来扩展我们的ActionBar
    ActionBar actionBar = getActionBar();
    actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);

    ImageView imageView = new ImageView(actionBar.getThemedContext());
    imageView.setScaleType(ImageView.ScaleType.CENTER);
    imageView.setImageResource(R.drawable.center16);
    ActionBar.LayoutParams layoutParams = new ActionBar.LayoutParams(
            ActionBar.LayoutParams.WRAP_CONTENT,
            ActionBar.LayoutParams.WRAP_CONTENT, Gravity.BOTTOM
            | Gravity.CENTER_VERTICAL);
    layoutParams.rightMargin = 40;
    imageView.setLayoutParams(layoutParams);
    actionBar.setCustomView(imageView);

使用线性或相对布局

    LayoutInflater inflator = (LayoutInflater) this .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View linearorrelative = inflator.inflate(R.layout.actionbarextend, null);

    ActionBar.LayoutParams layoutParams = new ActionBar.LayoutParams(
            ActionBar.LayoutParams.WRAP_CONTENT,
            ActionBar.LayoutParams.WRAP_CONTENT, Gravity.BOTTOM
            | Gravity.CENTER_VERTICAL);
    layoutParams.rightMargin = 40;
    linearorrelative.setLayoutParams(layoutParams);
    actionBar.setCustomView(linearorrelative);

1 个答案:

答案 0 :(得分:1)

如果您想要ActionBar下方的搜索栏,则应考虑使用新的Toolbar。这是:

  

在应用程序布局中使用的操作栏的概括

以下是根据您的图片使用新AppCompat library的示例实现:

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/colorPrimary"
        android:orientation="vertical">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:minHeight="?attr/actionBarSize" />

        <android.support.v7.widget.SearchView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingLeft="8dp"
            android:paddingRight="8dp" />

    </LinearLayout>

    <!-- Your content here -->

</LinearLayout>
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    }

}
<style name="Your.Base.Theme" parent="Theme.AppCompat.NoActionBar">
    ...
</style>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"...>

    <application
        ...
        android:theme="@style/Your.Base.Theme">

    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    </application>

</manifest>

<强>结果

results

否则,正如@ChrisStillwell建议的那样,请考虑使用ActionView并将SearchView作为ActionBar放在MenuItem中。