App von Holo zu Material Design Migirieren

C

CoffeeCode

Ambitioniertes Mitglied
2
Frohe Weihnacht an allen die hier mitlesen.
In der freien Zeit über Weihnacht wollte ich mein App von Holo auf Material umstylen. Vielleicht kann mir jemand da paar Tipps geben.

Da ich möchte das mein App auch unter Android 4.4 lauffähig sein soll werde ich AppComapt 21 nutzen müssen, wenn ich richtig verstanden habe.

Beim Einbinden bin ich nach diesen Anweisungen vorgegangen:
AppCompat v21 — Material Design for Pre-Lollipop Devices! | Android Developers Blog

meine alte syles.xml
PHP:
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="TransparentTheme" parent="@android:style/Theme.Holo">
        <item name="android:windowBackground">@color/dark_overlay</item>
        <item name="android:windowTranslucentNavigation">true</item>
        <item name="android:windowTranslucentStatus">true</item>
        <item name="android:actionBarStyle">@style/TransparentTheme.ActionBarStyle</item>
        <item name="android:actionModeStyle">@style/TransparentTheme.ActionBarStyle.ActionMode</item>
        <item name="android:windowActionBarOverlay">true</item>
        <item name="android:windowContentOverlay">@color/dark_overlay</item>
    </style>

    <style name="TransparentTheme.ActionBarStyle" parent="@android:Widget.ActionBar">
        <item name="android:background">@color/dark_overlay</item>
        <item name="android:displayOptions">homeAsUp|showHome|showTitle</item>
        <item name="android:titleTextStyle">@style/TransparentTheme.ActionBarStyle.TitleTextStyle</item>
    </style>

    <style name="TransparentTheme.ActionBarStyle.ActionMode" parent="@android:style/Theme.Holo.Light">
        <item name="android:actionModeBackground">@color/dark_overlay</item>
    </style>

    <style name="TransparentTheme.ActionBarStyle.TitleTextStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
        <item name="android:textColor">@android:color/white</item>
    </style>

</resources>

habe ich geändert zu

PHP:
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="TransparentTheme" parent="Theme.AppCompat.Light">
        <!-- Set AppCompat’s actionBarStyle -->
        <item name="actionBarStyle">@style/TransparentTheme.ActionBarStyle</item>

        <!-- Set AppCompat’s color theming attrs -->
        <item name="colorPrimary">@color/bg_gray</item>
         <item name="colorPrimaryDark">@color/bright_overlay</item>

    <!-- The rest of your attributes -->
    </style>


    <style name="TransparentTheme.ActionBarStyle" parent="Theme.AppCompat.Light">
        <item name="android:background">@color/dark_overlay</item>
        <item name="android:displayOptions">homeAsUp|showHome|showTitle</item>
        <item name="android:titleTextStyle">@style/TransparentTheme.ActionBarStyle.TitleTextStyle</item>
    </style>

    <style name="TransparentTheme.ActionBarStyle.ActionMode" parent="@android:style/Theme.Holo.Light">
        <item name="android:actionModeBackground">@color/dark_overlay</item>
    </style>

    <style name="TransparentTheme.ActionBarStyle.TitleTextStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
        <item name="android:textColor">@android:color/white</item>
    </style>

</resources>


beim ausführen bekomme ich in meiner MainActivity eine RuntimeException der durch den Zugriff auf die ActionBar entsteht.

Code:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.app.ActionBar.getHeight()' on a null object reference
            at com.ap.wificam.DrawerActivity.onCreate(DrawerActivity.java:81)
 
Zuletzt bearbeitet:
ein fehler taucht an dieser Stelle auf, getActionbar habe ich auf getSupportActionBar geändert da ich nun ja mit dem AppCompat arbeite.

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

Fehlermeldung ist folgende:

Code:
 Process: com.ap.wificam, PID: 26898
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ap.wificam/com.ap.wificam.DrawerActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)' on a null object reference
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)' on a null object reference
            at com.ap.wificam.DrawerActivity.onCreate(DrawerActivity.java:114)
            at android.app.Activity.performCreate(Activity.java:5933)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
************at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
************at android.app.ActivityThread.access$800(ActivityThread.java:144)
************at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
************at android.os.Handler.dispatchMessage(Handler.java:102)
************at android.os.Looper.loop(Looper.java:135)
************at android.app.ActivityThread.main(ActivityThread.java:5221)
************at java.lang.reflect.Method.invoke(Native Method)
************at java.lang.reflect.Method.invoke(Method.java:372)
************at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
************at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
 
ok die Probleme habe ich nun gelößt bekommen.

Jedoch wird meine Actionbar/Toolbar einfach nicht angezeigt.

Activity XML
PHP:
<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">


    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.v7.widget.Toolbar
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:minHeight="?attr/actionBarSize"
            android:background="?attr/colorPrimaryDark"/>

    </FrameLayout>

    <ListView
        android:id="@+id/left_drawer"
        android:layout_width="@dimen/navigation_drawer_width"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:divider="@null"
        android:dividerHeight="0dp"
        android:background="@color/bg_drawer"
        />


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

onCreate der Activity
PHP:
 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_drawer);

        systemBarTintInstance = SystemBarTintSingelton.getInstance(this);
        systemBarTintInstance.activateSystemBarTint();

        prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

        // Initializing
        dataList = new ArrayList<DrawerItem>();
        mTitle = mDrawerTitle = getTitle();
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerList = (ListView) findViewById(R.id.left_drawer);

        //Toolbar / Actionbar
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        if (toolbar != null){
            Log.d("Toolbar", "not null");
            setSupportActionBar(toolbar);
        } else {
            Log.d("Toolbar", "is null");
        }
        [...]

}
 

Ähnliche Themen

Manny87
  • Manny87
Antworten
11
Aufrufe
161
swa00
swa00
5
Antworten
22
Aufrufe
1.417
590239
5
R
  • Robby1950
2
Antworten
23
Aufrufe
1.007
Robby1950
R
Zurück
Oben Unten