如何在没有setContentView方法的情况下在activity中设置工具栏

时间:2015-12-15 05:00:42

标签: android toolbar android-appcompat

我将我的应用程序移动到材料设计中,但是我在其中一个活动中设置工具栏时出现问题,因为它没有layout.xml。

这是活动。

GeneralActivity.java

package com.sample.app;

import android.app.ActionBar;
import android.app.Activity;
import android.os.Bundle;
import android.view.MenuItem;

// This class is for reusable purpose
// This class set some default configurations for all applications
// All activities in this Application except MainActivity extend this class
// so that the application can keep the same layout display
public class GeneralActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    // enable icon for up navigation
    ActionBar actionBar = getActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // set home button as back button
    switch (item.getItemId()){
        case android.R.id.home:
            this.finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
}

这是我的 style.xml ,适用于素材设计应用。

<?xml version="1.0" encoding="utf-8"?>
<resources>

<style name="AppTheme" parent="Base.AppTheme">

</style>

<style name="Base.AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/md_green_500</item>
    <item name="colorPrimaryDark">@color/md_green_600</item>
    <item name="colorAccent">@color/md_pink_500</item>
    <item name="colorControlHighlight">@color/md_green_500_25</item>
    <item name="android:windowBackground">@color/md_white_1000</item>
</style>

<style name="ToolbarTheme" parent="AppTheme">
    <item name="android:textColorPrimary">@android:color/white</item>
    <item name="android:textColorSecondary">@color/md_grey_300</item>

</style>

<style name="NavigationViewTheme" parent="AppTheme">
    <item name="textAppearanceListItem">@style/TextAppearance.AppCompat.Body2</item>
</style>

</resources>

请提前帮助我。

3 个答案:

答案 0 :(得分:0)

如果要将该活动用作基本活动

,则需要覆盖setContetnView
@Override
public void setContentView(int layoutResID) {
    super.setContentView(layoutResID);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

答案 1 :(得分:0)

首先,对于没有布局的活动,您需要oncreateview mathod来显示调用此活动时的内容。 还有一件事,是否在manifest.xml中提到了您的活动?如果是,则默认情况下将获取应用程序标记的操作栏。 如果没有,那么你可以特别声明。 试试看......

答案 2 :(得分:0)

首先,您必须使用AppCompatActivity代替Activity

public class GeneralActivity extends AppCompatActivity{


}

然后您必须为您的活动设置不同的布局。您可以使用如下的somenthing:

public class GeneralActivity extends AppCompatActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
       // TODO Auto-generated method stub
       super.onCreate(savedInstanceState);

       setMyLayout();
   }   

   protected abstract void setMyLayout();

 }

在您的活动中,您可以实施该方法:

   @Override
   protected abstract void setMyLayout(){
        setContentView(myLayout);

        //... if you need to get your Toolbar
        Toolbar toolbar = (Toolbar) findViewById(R.id.myToolbar);
        setSupportActionBar(toolbar);
        ...
   } 

如果您的布局没有工具栏,则必须更改主题:

<style name="AppTheme.Toolbar">
    <item name="colorPrimary">@color/mycolor</item>
    <item name="colorPrimaryDark">@color/...</item>
    <item name="colorAccent">@color/...</item>
</style>