Tworzę aplikację z nowym Material Design używanym w Android Lollipop (5.0).
Korzystam z następujących poradników:
- http://android-developers.blogspot.it/2014/10/appcompat-v21-material-design-for-pre.html
- http://antonioleiva.com/material-design-everywhere/
Po utworzeniu paska narzędzi pojawia się następujący błąd: „Nie można utworzyć instancji następujących klas: - android.support.v7.widget.Toolbar”
Aplikacja działa dobrze na telefonie lub w emulatorze, ale projektant układu Android Studio nie wyświetla poprawnie układu.
Oto kilka zdjęć:
Błąd w podglądzie układu my_awesome_toolbar.xml
Błąd w podglądzie układu activity_my.xml
Kod xml plików:
my_awesome_toolbar.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_awesome_toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary" />
activity_my.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/root"
tools:context="com.myapp.test.MyActivity"
android:orientation="horizontal">
<include
android:id="@+id/toolbar"
layout="@layout/my_awesome_toolbar"
/>
<!-- Rest of layout -->
</RelativeLayout>
MyActivity.java:
package com.myapp.test;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
public class MyActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.my, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
kod xml stylów (values / styles.xml):
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/blue</item>
<item name="colorPrimaryDark">@color/dark_blue</item>
<item name="actionOverflowButtonStyle">@style/AppTheme.OverflowButtonStyle</item>
</style>
<!-- Style Title -->
<style name="Title">
<item name="android:textColor">@color/white</item>
<item name="android:textStyle">bold</item>
<item name="android:textSize">16sp</item>
</style>
<style name="AppTheme.OverflowButtonStyle" parent="Widget.AppCompat.ActionButton.Overflow">
<item name="android:src">@drawable/overflow_icon</item>
</style>
</resources>
W tej chwili używam Android Studio Beta 0.8.9
Toolbar
renderowania.Odpowiedzi:
W przypadku Android Studio (lub IntelliJ IDEA),
Jeśli wszystko wygląda dobrze w Twoim projekcie i nadal otrzymujesz błąd we wszystkich swoich układach, spróbuj „Unieważnij pamięć podręczną i uruchom ponownie”.
Poczekaj, aż Android Studio zakończy tworzenie wszystkich pamięci podręcznych i indeksów.
źródło
Zmieniłem plik res / values / styles.xml z tego:
do tego:
i to rozwiązało problem.
źródło
NoActionBar
wBase
. Jaki jest zamiennikTheme.AppCompat.NoActionBar
?Zrobiłem to, co powiedział @gbero i zmieniłem numer wersji Androida, z którego korzysta Studio, z 22 na 17 i to działa.
Używam kompatybilności wstecznej do kompilacji dla Androida w wersji 22, ale do celu 17 (idk, jeśli to poprawnie powiedziane, nadal próbuję rozgryźć tę aplikację), aby wyzwolić kompatybilność wsteczną, którą afaik jest tym, co
android.support.v7.*
jest. Prawdopodobnie jest to błąd związany z ich kodem renderującym. Nie jestem pewien, czy wyczyszczenie pamięci podręcznej zgodnie z powyższą sugestią było konieczne, ponieważ renderowanie nie działało zaraz po unieważnieniu pamięci podręcznej, zaczęło działać po zmianie wersji do renderowania. Jeśli powrócę do wersji 22, renderowanie się zepsuje, jeśli przełączę się z powrotem na 17, to znowu działa.źródło
minSdkVersion
wersja to 17, sugerowałbym uruchomienie aplikacji na emulatorze z poziomem API 17 lub rzeczywistym urządzeniu z poziomem API 17 i potwierdzić, czy interfejs użytkownika wygląda zgodnie z oczekiwaniami, a nie tak, jak jest renderowany w Android StudioOd: https://stackoverflow.com/a/29989542/4123403
To załatwiło sprawę dla mnie.
źródło
Innym błędem, który może mieć ten sam efekt, może być niewłaściwy motyw w podglądzie. Z jakiegoś powodu wybrałem tutaj inny motyw. Po wybraniu mojego AppTheme znowu działało dobrze:
źródło
Przepraszam, jeśli sobie odpowiadam, ale w końcu rozwiązaniem mojego problemu była aktualizacja Android Studio do nowej wersji 0.8.14 przez Canary Channel: http://tools.android.com/recent/
Po aktualizacji problem zniknął:
To pytanie zostawiam tutaj dla tych, którzy będą mieli ten problem w przyszłości.
źródło
to działa dla mnie
źródło
Zrobiłem to, co powiedział @ang_lee, a także dodałem tę linię do stylu motywu aplikacji:
używam wersji 26.0.1:
narzędzia budowlane:
źródło
<item name="windowNoTitle">true</item
Miałem ten sam błąd na moim ekranie Android Studio, gdy chciałem obejrzeć mój projekt. Rozwiązuję problem w ten sposób:
1- Zmieniam wersję z 22 na 21. Ale jeśli powrócę do wersji 22, renderowanie się zepsuje, jeśli przełączę się z powrotem na 21, znowu działa. Dziękuję @Overloaded_Operator
Zaktualizowałem Android Studio, ale nie działa. Dziękuję @ Salvuccio96
źródło
żadna z powyższych nie działała dla mnie, zaktualizowałem wersję appCompat - v7 w moim pliku gradle aplikacji z 23 do 25.3.1. pomogło to zrobić dla mnie
źródło
Znajdź style.xml w folderze app / res / values.
W atrybucie nadrzędnym stylu może brakować wartości „Podstawowy”. Powinien zaczynać się jako
źródło
Miałem ten sam błąd. W końcu dostałem powiadomienie, że wtyczka jest nieaktualna:
Po aktualizacji problem zniknął.
źródło
Powyższe rozwiązania mi nie pomogły. Wypróbowałem 2 pierwsze kroki z tego linku . U mnie działało dobrze. Ale nie zapomnij
zamiast
w swoim MainActivity.java
źródło
Używam Android Studio 2.3.3: - Otwórz styles.xml - Android Studio wyświetli powiadomienie w prawym górnym rogu z dwiema opcjami: „Otwórz edytor” i „Ukryj powiadomienie”. - Kliknij „Otwórz edytor” - W rozwijanym menu nadrzędnym motywów kliknij opcję Pokaż wszystkie motywy - Wybierz dowolny motyw zaczynający się od AppCompat ... (użyłem AppComat.DayNight)
NB: Jeśli pasek tytułu zniknie, musisz rozszerzyć AppCompatActivity zamiast Activity.
Wszystkiego najlepszego!
źródło
Miałem ten sam problem w przypadku jednego z działań w mojej aplikacji, jedną z przyczyn tego problemu jest to, że motyw w edytorze motywów może być inny niż motyw zdefiniowany w pliku „styles.xml”. Zmień motyw w edytorze motywów do swojego „Appthemu” lub niestandardowego motywu zdefiniowanego (jeśli zdefiniowałeś). To rozwiązało mój problem.
źródło
Mój problem został również rozwiązany poprzez zmianę w styles.xml
źródło