java.lang.IllegalArgumentException: AppCompat ไม่สนับสนุนคุณลักษณะของธีมปัจจุบัน


109

ฉันพยายามย้ายโปรเจ็กต์จาก Eclipse ไปยัง Android Studio ในที่สุดฉันก็สามารถเรียกใช้งานได้ แต่เมื่อถึงจุดหนึ่งฉันได้รับข้อยกเว้นนี้และฉันไม่พบอะไรใน Google เกี่ยวกับสิ่งนี้:

04-22 00:08:15.484    9891-9891/hu.illion.kwindoo E/AndroidRuntime FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{hu.illion.kwindoo/hu.illion.kwindoo.activity.MainActivity}: java.lang.IllegalArgumentException: AppCompat does not support the current theme features
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2092)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117)
    ...    
Caused by: java.lang.IllegalArgumentException: AppCompat does not support the current theme features
    at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:360)
    at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:246)
    at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106)
    at hu.illion.kwindoo.activity.MainActivity.onCreate(MainActivity.java:73)
    at android.app.Activity.performCreate(Activity.java:5047)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2056)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117)
    ...

73. สายของ MainActivity คือ:

setContentView(R.layout.activity_main);

โปรดแนะนำฉันถ้าคุณทำได้


ไม่เคยเห็นสิ่งนี้ แต่บางทีคุณกำลังใช้คุณลักษณะใน R.layout.activity_main ที่ต้องใช้ Android API เวอร์ชันอื่น? - แม้ว่า Android Studio จะชอบบอกคุณเกี่ยวกับสิ่งเหล่านั้น ... Goodluck
Gready

โพสต์ theme.xml หรือ style.xml ของคุณและ activity_main.xml
Charaf Eddine Mechalikh

คุณใส่ไฟล์. gradle ที่นี่ด้วยได้ไหม คุณอาจต้องพึ่งแอพคอมแพทรุ่นเก่า?
RaphMclee

คำตอบ:


233

ทางเลือกอื่นสำหรับคำตอบของ @ sbaar

ให้windowActionBarไปfalseและเพิ่มเป็นอย่างดีและตั้งค่าให้windowNoTitletrue

กล่าวคือ

   <item name="windowActionBar">false</item>
   <item name="windowNoTitle">true</item>

4
ฉันต้องทำสิ่งนี้กับแอพของฉันหลังจากอัปเดตเป็น appcompt ล่าสุด (22.1) วันนี้ นั่นคือทั้งหมดที่ฉันเปลี่ยนไปและตอนนี้แอปของฉันก็ใช้งานได้อีกครั้ง
SteelBytes

4
มันแปลก แต่ใช้งานได้หลังจากสลับ ActionBarActivity -> AppCompatActivity
pawegio

5
คำตอบนี้ไม่ได้ผลสำหรับฉัน คำตอบ @sbaar เท่านั้นที่ใช้งานได้ ธีมของคุณควรสืบทอดมาจาก: Theme.AppCompat.NoActionBar นอกเหนือจาก: <item name = "windowActionBar"> false </item> และ <item name = "windowNoTitle"> true </item>
blueware

1
ใช้ได้กับธีมที่ไม่มีNoActionBarสไตล์อื่น ในตัวอย่างของฉันมันใช้ได้กับTheme.AppCompat.Light.Dialog
dobridog

1
ใช้งานได้เมื่อรับช่วงจาก Theme.AppComapt.NoActionBar สมบูรณ์แบบ!
Tariq

41

ลบ

<item name="windowActionBar">false</item>

จากธีมของคุณจากนั้นตรวจสอบให้แน่ใจว่าคุณได้รับช่วงจากธีม. NoActionBar จากนั้นตั้งค่าแถบเครื่องมือของคุณตามปกติ


1
และเหตุใดฉันจึงต้องแก้ไขสิ่งต่างๆ โครงการนี้ดำเนินไปได้ด้วยดีกับคราสเป็นเวลาหลายเดือน
Adam Varhegyi

3
เนื่องจากเมื่อไม่กี่ชั่วโมงที่ผ่านมา Google ได้เปิดตัวไลบรารีการสนับสนุนเวอร์ชัน 22.1 ทำให้เกิดปัญหานี้ในโครงการของคุณ (และในของฉันด้วย) มันเป็นแค่เรื่องบังเอิญไม่ใช่เพราะการย้ายไปที่ Android Studio
jmart

3
สำหรับฉันการสืบทอดธีมจาก. NoActionBar เป็นกุญแจสำคัญไม่จำเป็นต้องลบองค์ประกอบ
Sergey Aldoukhov

30

ตรวจสอบให้แน่ใจว่าธีมของคุณเป็นชุดย่อยจากTheme.AppCompat.NoActionBarนั้นในstyles.xml:

<style name="MyMaterialTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="windowNoTitle">true</item>
        ...
</style>

Btw เป็นปัญหาใหม่สำหรับ Support Library 22.1


@ QadirHussain ไม่ไม่ได้
Anggrayudi H

AppCompat.NoActionBar ทำให้ textView สีขาวทั้งหมดของฉันใช้ Theme.AppCompat.Light.NoActionBar แทน
Hitesh Sahu

ไม่ทำงานยังคงstackoverflow.com/questions/45643107/…
Ruchir Baronia

16

ตรวจสอบว่าคุณโทรsetContentView()ตามsuper.onCreate()ไม่ใช่ก่อนหน้านี้ สิ่งนี้ช่วยในกรณีของฉัน


มี windowNoTitle และ windowActionBar แต่ยังไม่ทำงาน สิ่งนี้แก้ไขให้ฉัน ขอบคุณ!
avb


3

ในกรณีของฉันฉันไม่ได้เปลี่ยนเป็น. NoActionBar Theme ฉันเพิ่งลบคำนำหน้า Android ออกจากรายการนี้

<item name="windowActionBar">false</item>

และข้อผิดพลาดจะหายไป


อย่าพูดถึงมัน ยินดีที่จะเห็นความคิดเห็นของคุณ
Setmax

3

ทำให้เเน่นอน

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

อยู่ในอันดับต้น ๆ ของทุกสิ่งที่เหมาะกับฉัน .... โชคดี




1

ฉันมีปัญหาเดียวกันอยู่บ้างลบออกandroid:จาก syles.xml ของฉันตามด้านล่าง

 <!-- caused crash -->
 <item name="android:windowActionBar">false</item>
 <item name="android:windowNoTitle">true</item>

 <!-- didn't cause crash -->
 <item name="windowActionBar">false</item>
 <item name="windowNoTitle">true</item>

0

ฉันมีปัญหาเดียวกันเมื่อฉันอัปเกรดเวอร์ชันไลบรารีจาก 22.0.0 เป็น 22.1.1 และแก้ไขโดยทิ้งกลับไปที่เวอร์ชันก่อนหน้า: com.android.support:appcompat-v7:22.0.0 และกลับไปใช้ ActionBarActivity ไม่ใช่ AppCompatActivity ในคลาสกิจกรรมของฉันตามที่เวอร์ชันใหม่กว่าของไลบรารีความเข้ากันได้ ฉันจะลองอีกครั้งในภายหลัง


0

เพียงใช้สิ่งนี้ใน style.xml ของคุณโดยไม่จำเป็นต้องแก้ไขอื่น ๆ

 <style name="AppTheme" parent="Theme.AppCompat">

<!-- theme customizations -->

<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>

อย่าเพิ่มอะไรในไฟล์กิจกรรมโปรดทิ้งไว้

public class Main extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

 }

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, 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);
}

 }


0

ในกรณีของฉันฉันมองหาคำตอบ @rewrihitesh และผมสังเกตเห็นว่าผมกลับเพื่อองค์ประกอบ เปลี่ยนจาก

setContentView(R.layout.activity_test);
super.onCreate(savedInstanceState);

ถึง

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);

แก้ไขปัญหาของฉัน

หวังว่าจะช่วย !!


0

หากคุณได้เพิ่ม<item name="windowActionBar">false</item>คุณจะต้องเพิ่ม

<item name="windowNoTitle">true</item>

เพื่อแก้ปัญหา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.