android - 以编程方式创建工具栏并将其添加到 AppCompatActivity

标签 android xml android-toolbar

我正在尝试为以编程方式扩展 AppCompatActivity 的类设置工具栏,但该 Activity 在运行时没有工具栏。我能够找到的关于使用工具栏的每个教程都以 XML 创建和添加工具栏,但我正在寻找一种更好的方法将工具栏添加到我的所有 Activity 中,所以我试图以编程方式进行。但是,我运行的时候工具栏不是不可见就是没有添加,找不到问题所在。这是我的代码:

public class MainActivity extends AppCompatActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Toolbar toolbar = new Toolbar(this);
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT, R.attr.actionBarSize);
        toolbar.setLayoutParams(layoutParams);
        toolbar.setPopupTheme(R.style.AppTheme);
        toolbar.setBackgroundColor(getResources().getColor(R.color.colorPrimary));
        toolbar.setTitle("This is the title");
        toolbar.setVisibility(View.VISIBLE);
        setSupportActionBar(toolbar);
    }
}

这是我的 XML 文件 activity_main.xml:

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

</LinearLayout>

我无法弄清楚我的工具栏有什么问题。提前感谢您的帮助。

最佳答案

使用 YOUR_LAYOUT.addView(toolbar, 0)Toolbar 添加到您的 Activity 布局:

public class MainActivity extends AppCompatActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Toolbar toolbar = new Toolbar(this);
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT, 168);
        toolbar.setLayoutParams(layoutParams);
        toolbar.setPopupTheme(R.style.AppTheme);
        toolbar.setBackgroundColor(getResources().getColor(R.color.colorPrimary));
        toolbar.setTitle("This is the title");
        toolbar.setVisibility(View.VISIBLE);

        // Assuming in activity_main, you are using LinearLayout as root  
        LinearLayout ll = (LinearLayout) findViewById(R.id.your_linear_layout);
        ll.addView(toolbar, 0);

        setSupportActionBar(toolbar);
    }
}

使用MainActivity主题AppTheme.NoActionBar来避免RuntimeException:

This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.

<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

输出:

enter image description here

希望对你有帮助~

关于android - 以编程方式创建工具栏并将其添加到 AppCompatActivity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43575640/

相关文章:

android - 使用 GROUP BY 从 SQLiteDatabase 获取行,然后使用 SimpleCursorAdapter 呈现它们

java - 如何正确配置属性文件?

Android设计库AppBar滚动行为enterAlways

java - 安卓模拟时钟 : setting drawables programmatically

android - 删除操作栏顶部的深色

android - 如何将 VectorDrawable 与 Android 工具栏一起使用?

java - 使用指向单个方法的按钮区分单击了android按钮数组中的哪个android按钮

android - 无法关闭与 Google Play 游戏的回合制多人游戏

android - 如何为 WebView 编辑或创建自定义错误页面?

java.lang.IllegalAccessError : org/apache/xml/serializer/ExtendedContentHandler