Hoạt động này đã có một thanh hành động được cung cấp bởi trang trí cửa sổ


497

Cố gắng chuyển qua công cụ của tôi để sử dụng Toolbarthay vì thanh hành động nhưng tôi vẫn nhận được thông báo lỗi

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tyczj.weddingalbum/com.xxx.xxx.MainActivity}: java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
            at android.app.ActivityThread.access$600(ActivityThread.java:141)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5039)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.
            at android.support.v7.app.ActionBarActivityDelegateBase.setSupportActionBar(ActionBarActivityDelegateBase.java:165)
            at android.support.v7.app.ActionBarActivity.setSupportActionBar(ActionBarActivity.java:92)
            at com.xxx.xxx.MainActivity.onCreate(MainActivity.java:113)
            at android.app.Activity.performCreate(Activity.java:5104)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
            at android.app.ActivityThread.access$600(ActivityThread.java:141)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5039)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
            at dalvik.system.NativeStart.main(Native Method)

vì vậy sau đó tôi đã thêm vào phong cách của mình để hoạt động của tôi không có thanh hành động

<style name="AppCompatTheme" parent="@style/Theme.AppCompat.Light">
        <item name="android:windowActionBar">false</item>
</style>

và chủ đề được áp dụng cho các hoạt động trong bảng kê khai của tôi

<activity
        android:name=".MainActivity"
        android:windowSoftInputMode="adjustResize|stateHidden"
        android:theme="@style/AppCompatTheme" android:screenOrientation="portrait"/>

MainActivity mở rộng GooglePlayServiceActivity vì vậy tôi cũng đặt chủ đề ở đó

<activity
       android:name=".GooglePlayServicesActivity"
       android:label="@string/title_activity_google_play_services"
       android:theme="@style/AppCompatTheme">

nhưng tôi vẫn nhận được lỗi. Tôi cũng không yêu cầu tính năng cửa sổ ở bất cứ đâu. Bất cứ ý tưởng tại sao tôi vẫn nhận được điều này?

Câu trả lời:


836

Tôi nghĩ bạn đang phát triển cho Android Lollipop, nhưng dù sao cũng bao gồm dòng này:

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

để tuyên bố chủ đề của bạn bên trong của bạn app/src/main/res/values/styles.xml.

Ngoài ra, nếu bạn đang sử dụng AppCompatActivitythư viện hỗ trợ của phiên bản 22.1 trở lên, hãy thêm dòng này:

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

Tuyên bố chủ đề của bạn có thể trông như thế này sau tất cả các bổ sung:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

18
windowActionBarkhông giống như android:windowActionBar?
tyczj

65
Đó là, nhưng công cụ AppCompat xem thuộc tính không gian tên ứng dụng không phải là Android. Điều này cho phép xác định thuộc tính ngay cả trong các nền tảng ban đầu không có thuộc tính đó. Đó là cách nó cho phép nhập lại những thứ như colorPrimary.
yary

5
Khi tôi thêm dòng đó vào kiểu của mình, ứng dụng bị sập :(
rkmax

9
Đồng thời thêm <item name = "windowNoTitle"> true </ item> Nếu bạn đang sử dụng AppCompatActivity sau 22.1 thư viện hỗ trợ stackoverflow.com/a/29853299/1402525
Nick

4
Đừng quên thêm: android: theme = "@ style / AppTheme" vào thẻ ứng dụng trong tệp kê khai.
sống tình yêu

202

Một cách dễ dàng khác là làm cho chủ đề của bạn trở thành một đứa trẻ Theme.AppCompat.Light.NoActionBarnhư vậy:

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

Tôi cũng đã thử phương pháp này nhưng tôi vẫn gặp lỗi. Tuy nhiên, đó có thể là trước khi tôi đặt chủ đề cho tôi GooglePlayServiceActivity, tôi không nhớ
tyczj

1
Phải, đây là những gì tôi đã sử dụng. Chỉ cần đảm bảo rằng hoạt động đang sử dụng chủ đề này trong bảng kê khai
MrEngineer13

6
Tôi thấy giải pháp này thanh lịch hơn giải pháp của @Nadir Belhaj, mặc dù cả hai đều đúng.
voghDev

Tôi nghĩ rằng đây là câu trả lời tốt hơn, sử dụng thuộc tính XML nội tuyến (windowActionBar = false) không hoạt động - Tôi đã gặp lỗi tương tự như @tyczj
Booger

Trong trường hợp đó, bạn không thể sử dụng Theme.AppCompat.Light.DarkActionBar mà thực sự là một phụ huynh hữu ích.
f470071

125

Thêm dòng duy nhất android:theme="@style/AppTheme.NoActionBar"để activityAndroidManifestvà bạn đã thực hiện.


AndroidManifest.xml :

<activity android:name=".activity.YourActivity"
          android:theme="@style/AppTheme.NoActionBar"><!-- ADD THIS LINE -->

kiểu tệp

<style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
</style>

52

Để sử dụng Thanh công cụ làm Thanh hành động, trước tiên, hãy vô hiệu hóa Thanh hành động được cung cấp trang trí.

Cách dễ nhất là mở rộng chủ đề của bạn từ

Chủ đề.AppCompat.NoActionBar

(hoặc biến thể ánh sáng của nó).

Thứ hai, tạo một cá thể Thanh công cụ, thường thông qua XML bố cục của bạn:

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

Sau đó, trong Hoạt động hoặc Đoạn của bạn, hãy đặt Thanh công cụ hoạt động như Thanh hành động của bạn:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.blah);

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

Mã này làm việc cho tôi.


1
Cảm ơn! Tôi quên thêm <android.support.v7.widget.Toolbarvào XML.
CoolMind

1
Tôi không thể hiểu tại sao màu thanh công cụ của tôi chỉ để trống. Dường như không thể tìm ra cách thay đổi nó thành màu xanh lá cây. Tôi cảm thấy ngớ ngẩn vì tất cả những gì tôi phải làm là đặt android: background = "" trong <android.support.v7.widget.Toolbar /> trong tệp bố cục và điều đó đã làm điều đó! . Cảm ơn
Andrew Irwin

22

Nếu bạn muốn kết hợp một số hoạt động với thanh hành động và những hoạt động khác thì không, bạn nên sử dụng chủ đề cơ sở đã bật thanh hành động và sau đó tạo một chủ đề phụ mà bạn sẽ sử dụng nó cho các hoạt động không yêu cầu thanh hành động

Ví dụ: bạn có thể sử dụng một kiểu phụ như thế này

             <style name="AppTheme.NoActionBar">
               <item name="windowActionBar">false</item>
               <item name="windowNoTitle">true</item>
            </style>

Trong khi chủ đề cơ sở mở rộng nói

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

và sau đó sử dụng chủ đề không phải thanh hành động trong Tệp AndroidManifest trong thẻ hoạt động nói

   <activity
        android:name="com.example.NonActionBarActivity"
        android:theme="@style/AppTheme.NoActionBar"

bạn phải áp dụng điều này cho từng hoạt động riêng lẻ không cần thanh hành động vì vậy nếu dự án của bạn yêu cầu ít hoạt động trên thanh hành động hơn không, thì tốt hơn là áp dụng điều này ở cấp chủ đề cơ sở


12

Tôi cũng phải đối mặt với vấn đề tương tự. Nhưng tôi đã sử dụng:

getSupportActionBar().hide();

trước

setContentView(R.layout.activity_main);

Bây giờ nó đang làm việc.

Và chúng ta có thể thử tùy chọn khác trong Style.xml ,

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

8

Thêm phần này vào giá trị / style.xml của bạn

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

<style name="AppBaseTheme" parent="YourCustomTheme">

</style>

<style name="AppTheme" parent="AppBaseTheme">

</style>

Và thêm đoạn mã sau vào giá trị của bạn-v11 / style.xml và value-v14 / Styles.xml

<style name="AppBaseTheme" parent="YourCustomTheme">

</style>

Đó là nó. Nó sẽ làm việc.


6

Bạn cần thay đổi

  <activity
        android:name=".YOUR ACTIVITY"
        android:theme="@style/AppTheme.NoActionBar" />
</application>`

những dòng này trong bảng kê khai. Nó sẽ hoạt động hoàn hảo cho tôi.


5

Chuyển đến 'style.xml' của dự án của bạn và biến windowActionBar thành false

<style name="AppCompatTheme" parent="@style/Theme.AppCompat.Light">
        <item name="android:windowActionBar">false</item>
</style>

13
Bạn đang giúp đỡ người khác như thế nào khi câu trả lời của bạn không chính xác trong câu trả lời cho câu hỏi của tôi
tyczj

Thay vì sử dụng "Theme.AppCompat.Light", hãy sử dụng "Theme.AppCompat.Light.NoActionBar"
Christina

4

Thêm hai dòng này trong chủ đề ứng dụng của bạn nằm trong style.xml: -

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>

    //Add this two line will fix your problem
    <item name="windowNoTitle">true</item>   <--1(this applies after 22.0.1 support library i think 
    <item name="windowActionBar">true</item> <--2


4

Tôi đã thêm thanh công cụ trong xml của tôi. Sau đó, trong hoạt động của tôi, tôi đã thêm tuyên bố này:

setSupportActionBar(toolbar);

Loại bỏ điều này làm việc cho tôi. Tôi hi vọng nó giúp ích cho ai đó.


Nếu tôi không muốn xóa nó thì sao? Đó là những thứ sử dụng thanh công cụ.
Saletanth Karumanaghat

Tôi không chắc về điều đó, nhưng tôi nghĩ loại bỏ "setSupportActionBar (thanh công cụ);" thanh công cụ sẽ ở lại đó.
Harry .Naeem

4

Nếu bạn gặp lỗi trên dòng này:

setSupportActionBar(...);

Bạn cần kiểm tra xem hoạt động của bạn có đề cập đến một chủ đề có chứa thanh công cụ hay không. AppTheme của ứng dụng của bạn có thể đã chứa một thanh công cụ, chẳng hạn như

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

và bạn đang cố gắng thêm cái thứ hai. Nếu bạn muốn sử dụng AppTheme của ứng dụng, bạn cần xóa chủ đề khỏi hoạt động của mình, trong tệp manifest.xml.

Ví dụ:

<activity
    android:name=".ui.activities.SettingsActivity"
    android:theme="@style/AppTheme1" /> --> remove this theme

4

Sử dụng thẻ này trong thẻ ứng dụng của bạn trong tệp kê khai hoặc bên trong thẻ Hoạt động của bạn.

android: theme = "@ style / AppTheme.NoActionBar"


3

Nếu bạn đang sử dụng AppcompactActivity, hãy sử dụng ba dòng này trong chủ đề của bạn.

<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowActionBarOverlay">false</item>

2

Nói một cách đơn giản, bạn có thể làm như sau: -

if (android.os.Build.VERSION.SDK_INT >= 21) {
        Window window = getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        window.setStatusBarColor(getResources().getColor(R.color.colorPrimaryDark));

    }

2

Đây là cách tôi giải quyết vấn đề. Thêm mã dưới đây vào của bạnAndroidMainfest.xml

<activity android:name=".YourClass"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar">
 </activity>

1
hoàn hảo! Cám ơn vì đã chia sẻ.
Sandeep Yohans

1

Hoặc chỉ cần thay đổi @ Style / AppTheme

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">

Điều này làm việc cho tôi!


0
 <style name="AppCompatTheme" parent="@style/Theme.AppCompat.Light">
            <item name="android:windowActionBar">false</item>
    </style>

    Change this to NoActionBar 

        <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
            <!-- Customize your theme here. -->

        </style>

    This one worked for me

-1

Có hai giải pháp đơn giản và nhanh chóng.

đi tới res -> giá trị -> kiểu

BẠN cũng có thể xem video này để dễ dàng hơn NHẤP VÀO ĐÂY

Giải pháp 1:

Bạn có thể loại bỏ thanh hành động bằng cách thay thế

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

đến

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

Giải pháp 2:

Đơn giản chỉ cần thêm những dòng này

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

Vì vậy, bây giờ tập tin phong cách của bạn trông như thế này

`

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>

</style>

`


-2

Tôi đã giải quyết nó bằng cách loại bỏ dòng này:

android:theme="@style/Theme.MyCompatTheme"

từ các thuộc tính hoạt động trong Manifest file


-2

Chỉ cần đặt parent="Theme.AppCompat.NoActionBar" vào tệp style.xml của bạn

Giống - <style parent="Theme.AppCompat.NoActionBar" name="AppTheme.NoActionBar">

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.