在代码中完全创建和配置Android工具栏

时间:2017-03-19 16:52:03

标签: c# android xamarin toolbar

我需要在activity中动态创建工具栏。由于设计原因,我无法在AXML中创建它,必须以编程方式完全创建它。遗憾的是,大多数高级设计属性都没有编码等价物。

如何配置纯粹在代码中的工具栏,以匹配以下AXML?请注意我使用Support.V7.Widget.Toolbar,以便我的应用向后兼容Android 5.0。

 <android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
   android:layout_height="wrap_content"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    />

方法1:创建然后配置

我目前的代码:

var toolbar = new Toolbar(this);
toolbar.Title = "View Options";

// the following properties exist but are only GETTERS! .. how do I change them?
toolbar.Width = "parent_width";
toolbar.Height = "wrap_content";

// the following properties don't exist.. what do I do?
toolbar.MinHeight = "?aatr/actionBarSize";
toolbar.Background = "?attr/colorPrimary";
toolbar.Theme = "@style/ThemeOverlay.AppCompat.Dark.ActionBar";
toolbar.PopupTheme = "@style/ThemeOverlay.AppCompat.Light";

方法2:使用属性

或者我可以在构建时将“属性”传递给工具栏,但是无法“创建”IAttributeSet或更改集合中的属性!

我需要在下图中创建PINK工具栏:

toolbar

修改抱歉,我的问题与this的不同之处仅在于创建视图。我需要在视图中创建一个具有更多属性的工具栏。

1 个答案:

答案 0 :(得分:1)

要做的第一件事是在 styles.xml

内为工具栏创建样式
<style name="toolbarTheme" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
        <item name="android:background">#ff4081</item>
        <item name="android:paddingLeft">16dp</item>
</style>

然后你必须在 attrs.xml

中添加对它的引用
<resources>
    <attr name="toolbarTheme" format="reference"/>
</resources>

然后你的app主要主题你要将attr链接到 styles.xml

里面的样式
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>

        <item name="@attr/toolbarTheme">@style/toolbarTheme</item>
</style>

让我们创建工具栏

// specify theme [ specify theme in attrs.xml ]
Toolbar toolbar = new Toolbar(this,null,R.attr.toolbarTheme);
// first params => width
// second params => Height
Toolbar.LayoutParams params = new Toolbar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                150);
toolbar.setLayoutParams(params);

// reference to root view ( RelativeLayout )
RelativeLayout view = (RelativeLayout) findViewById(R.id.activity_main);
// add the toolbar
view.addView(toolbar, 0); // 0 means the top you should change it.

您可以使用 setPopupTheme()

方法设置popupTheme

您可以使用方法 setBackgroundColor()

设置背景颜色