Панель инструментов setSupportActionBar не может быть применена к ошибке (android.widget.Toolbar)

Я искал ответ и перепробовал много возможных решений, но, похоже, ничего не работает..

Я пытаюсь настроить панель действий материала после этого урока.

Вот мой код:

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>

И наконец моя деятельность.

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 !!!!

Ошибка:

setSupporActionBar (android.support.v7.widget.Toolbar) в ActionBarActivity нельзя применить к (android.widget.Toolbar)

Как я могу это исправить?

10 ответов

Решение

В вашем 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 !!!!

При использовании панели инструментов вы должны расширить AppCompatActivity, а затем импортировать android.support.v7.widget.Toolbar

Для добавления панели инструментов, поддерживающей Material Design, вероятно, лучше всего следовать официальным инструкциям.

  1. Добавьте библиотеку поддержки app7 для v7.
  2. Расширьте свою деятельность AppCompatActivity,

    public class MyActivity extends AppCompatActivity {
      // ...
    }
    
  3. декларировать NoActionBar в манифесте.

    <application
        android:theme="@style/Theme.AppCompat.Light.NoActionBar"
        />
    
  4. Добавьте панель инструментов в XML-макет своей деятельности.

    <android.support.v7.widget.Toolbar
       android:id="@+id/my_toolbar"
       android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
       ...
       />
    
  5. Вызов setSupportActionBar в деятельности onCreate,

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

Примечание. Вам нужно будет импортировать следующее в упражнении.

import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;

Для версии Android выше 3:

import androidx.appcompat.widget.Toolbar;

Для версии Android ниже 3:

import android.widget.Toolbar;

С добавлением androidx в Studio 3.0+ совместимость панели инструментов теперь в новой библиотеке, доступной вот так

import androidx.appcompat.widget.Toolbar

Убедитесь, что ваше объявление Manifest включает тег android:theme="@style/AppTheme.NoActionBar", например:

<activity
    android:name=".PointsScreen"
    android:theme="@style/AppTheme.NoActionBar">
</activity>

Добавление импорта 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"
    />

В методе onCreate Java-кода

//call to

Панель инструментов Tootbar = findViewById(R.id.toolbar); setSupportActionBar(панель инструментов);

Источник: https://developer.android.com/training/appbar/up-action

Имя ToolBar можно легко изменить с помощью

android:label="My Activity"

в вашем файле манифеста. Я просто просматривал манифест и нашел

android:label 

Помогает меняться в зависимости от конкретной деятельности, надеюсь, вы попробуете

Класс должен быть расширен от AppCompatActivity, чтобы решить проблему с setSuppertActionBar, которая не распознается

Просто измени

import android.widget.Toolbar;

Чтобы

import android.support.v7.widget.Toolbar;

У меня та же проблема. мой Logcat говорит

java.lang.IllegalStateException: это действие уже имеет панель действий, предоставленную декором окна

У меня уже есть панель действий, поэтому, когда я использую setSupportActionBar(toolbar); мое приложение получает ошибку для этого конфликта. Чтобы исправить эту проблему, добавьте NoActionBar в вашем файле ресурсов стиля темы приложения.

Изменить это

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

К этому

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

Я использовал ранее этот код:

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

и расширенный AppCompatActivity также, но я получаю ту же ошибку. Поэтому вместо использования класса Toolbar я импортировал приведенный ниже класс, и он работал для меня:

android.support.v7.widget.Toolbar

import android.support.v7.widget.Toolbar; импортировать его в свой класс Java

В You MainActivity.java импорт android .support.v7.widget.Toolbar вставка java программы

Другие вопросы по тегам