以编程方式为AppCompatActivity创建和添加工具栏

时间:2017-04-23 19:34:53

标签: android xml android-toolbar

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

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>

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

1 个答案:

答案 0 :(得分:2)

使用Toolbar

Activity添加到YOUR_LAYOUT.addView(toolbar, 0)版面
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

  

Activity已由窗口装饰提供action bar。   不要请求Window.FEATURE_SUPPORT_ACTION_BAR并设置   主题中windowActionBarfalse代替使用Toolbar

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

<强>输出:

enter image description here

希望这会有所帮助〜