setSupportActionBar工具栏无法应用于(android.widget.Toolbar)错误

时间:2015-03-13 06:14:24

标签: android android-actionbar material-design toolbar

我一直在寻找答案,我尝试了很多可能的解决方案,但似乎没有任何效果......

我正在尝试在this tutorial之后设置材料操作栏。

这是我的代码:

tool_bar.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/ColorPrimary"
    android:elevation="4dp">

</android.support.v7.widget.Toolbar>

activity.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFFFFF">
    <!-- The main content view -->
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <include
            android:id="@+id/app_bar"
            layout="@layout/tool_bar" />
    </RelativeLayout>
    <!-- Navigation Drawer -->
    <ListView
        android:id="@+id/left_drawer"
        android:layout_width="220dp"
        android:layout_height="match_parent"
        android:layout_gravity="left"
        android:background="#1C1C1C"
        android:divider="@android:color/darker_gray"
        android:dividerHeight="1dp" />

</android.support.v4.widget.DrawerLayout>

最后我的activity.java:

import android.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toolbar;


public class rutaActivity extends ActionBarActivity {

private Toolbar toolbar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ruta);

        getSupportActionBar().hide();//Ocultar ActivityBar anterior

        toolbar = (Toolbar) findViewById(R.id.app_bar);
        setSupportActionBar(toolbar); //HERE'S THE PROBLEM !!!!

错误:

  ActionBarActivity中的setSupporActionBar(android.support.v7.widget.Toolbar)无法应用于(android.widget.Toolbar)

我该如何解决这个问题?

14 个答案:

答案 0 :(得分:124)

Activity.java导入android.support.v7.widget.Toolbar而不是android.widget.Toolbar

import android.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.support.v7.widget.Toolbar;


public class rutaActivity extends AppCompactActivity {

private Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_ruta);

    getSupportActionBar().hide();//Ocultar ActivityBar anterior

    toolbar = (Toolbar) findViewById(R.id.app_bar);
    setSupportActionBar(toolbar); //NO PROBLEM !!!!

答案 1 :(得分:22)

在使用工具栏时,您应该扩展AppCompatActivity和

import android.support.v7.widget.Toolbar 

答案 2 :(得分:15)

要添加支持Material Design的工具栏,official documentation directions可能是最好的。

  1. 添加v7 appcompat support library
  2. 让您的活动延长SAMPLE RUN Enter test score 80 Enter test score 70 Enter test score 90 Enter test score 88 Enter test score 0 The average is 82.000%

    AppCompatActivity
  3. 在清单中声明public class MyActivity extends AppCompatActivity { // ... }

    NoActionBar
  4. 在活动的xml布局中添加工具栏。

    <application
        android:theme="@style/Theme.AppCompat.Light.NoActionBar"
        />
    
  5. 在活动<android.support.v7.widget.Toolbar android:id="@+id/my_toolbar" android:theme="@style/ThemeOverlay.AppCompat.ActionBar" ... /> 中调用setSupportActionBar

    onCreate
  6. 注意:您必须在活动中导入以下内容。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
        Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
        setSupportActionBar(myToolbar);
    }
    

答案 3 :(得分:2)

证明您的Manifest声明包含 android:theme =&#34; @ style / AppTheme.NoActionBar&#34; 标记,如下所示:

//Main class

class Main{

 public static void main(String []args){

 try{

  Car c = carFactory.getCar("Axio");
  c.print();

  }catch(Exception e){
  System.out.println(e);
  }
 }
}

//Car Interface

public interface Car{
 public void print();   
}

//Car Interface implementation class

class Axio implements Car{

 public void print(){
  System.out.println("Axio car is called...");
 }

}

//Car Factory class

class carFactory{

 public static Car getCar(String carName)throws Exception{

  return (Car)Class.forName(carName).newInstance(); 

 }

}

答案 4 :(得分:2)

对于高于3的android版本:

import androidx.appcompat.widget.Toolbar;` 

对于3以下的Android版本:

import android.widget.Toolbar;

答案 5 :(得分:1)

将导入android.support.v7.widget.Toolbar添加到导入列表即可解决此问题。

然后添加工具栏小部件布局文件:

<android.support.v7.widget.Toolbar
    android:id="@+id/list_toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"
    android:minHeight="?attr/actionBarSize"
    android:theme="?attr/actionBarTheme"
    />

在Java代码的onCreate方法中

//call to

工具栏工具栏= findViewById(R.id.toolbar); setSupportActionBar(toolbar);

来源:https://developer.android.com/training/appbar/up-action

答案 6 :(得分:1)

必须扩展AppCompatActivity的类以解决无法识别setSuppertActionBar的问题

答案 7 :(得分:0)

import android.support.v7.widget.Toolbar;

将其导入您的Java类

答案 8 :(得分:0)

我以前使用的是这段代码:

Toolbar toolbar =  findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

并扩展了AppCompatActivity,但是我遇到了相同的错误。 因此,代替使用工具栏类,我导入了以下类,它对我有用:

android.support.v7.widget.Toolbar

答案 9 :(得分:0)

我遇到了同样的问题。我的Logcat

  

java.lang.IllegalStateException:此活动已经有一个动作   窗户装饰提供的酒吧

我已经有一个操作栏,因此当我使用setSupportActionBar(toolbar);时,我的应用会因此冲突而出错。要解决此问题,请在您的应用主题样式资源文件中添加NoActionBar

更改此

<style name="ParentMaterialTheme" parent="Theme.AppCompat.Light">

对此

<style name="ParentMaterialTheme" parent="Theme.AppCompat.Light.NoActionBar">

答案 10 :(得分:0)

在Studio 3.0+中添加了androidx之后,工具栏兼容性现在位于新的库中,可以通过这种方式访问​​

import androidx.appcompat.widget.Toolbar

答案 11 :(得分:0)

只是改变

 @model TESTCOREMVC.VIEWMODELS.Attendance.AttendanceViewModel

 <form asp-action="Tito">

                <div class="form-body">
                    <div class="card-body">
                        <div class="row pt-3">
                            <div class="col-md-6">
                                <div class="form-group">
                                    <label asp-for="DateFrom" class="control-label" style="font-weight:bold">Time - In</label>                                        
                                    <input asp-for="@Model.DateFrom" readonly type="text" id="timein" class="form-control" placeholder="You don't have a time - in yet.">
                                    @*<small class="form-control-feedback"> This is inline help </small>*@
                                    <br /><br />
                                    <button name="submit" value="timein" type="submit" class="btn btn-info" id="btntimein"> <i class="mdi mdi-login-variant"></i> Time - In</button>                                        
                                </div>
                            </div>

                            <div class="col-md-6">
                                <div class="form-group">
                                    <label asp-for="DateTo" class="control-label" style="font-weight:bold">Time - Out</label>
                                    <input asp-for="@Model.DateTo" readonly type="text" id="timeout" class="form-control" placeholder="You don't have a time - out yet.">
                                    @*<small class="form-control-feedback"> This is inline help </small>*@
                                    <br /><br />
                                    <button name="submit" value="timeout" type="submit" class="btn btn-danger" id="btntimeout"> <i class="mdi mdi-logout-variant"></i> Time - Out</button>
                                </div>
                            </div>
                        </div>

                    </div>

                </div>
            </form>

收件人

import android.widget.Toolbar;

答案 12 :(得分:0)

可以使用

轻松更改ToolBar的名称
android:label="My Activity"

在清单文件中。 我刚刚经过清单并找到了

android:label 

根据具体活动帮助更改,希望您尝试一下

答案 13 :(得分:-1)

在你的MainActivity.java中导入android .support.v7.widget.Toolbar插入java程序