2017-04-16 4 views
1

Ich versuche AppCompat DayNight Thema auf meinem Android Wear-Anwendung zu verwenden, aber es funktioniert nicht, meine Tätigkeit benötigen Umgebungsmodus so erweitere ich WearableActivity wie folgt aus:Android Wear DayNight Theme AppCompat

public class BaseActivity extends WearableActivity { 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setAmbientEnabled(); 
     .... 
    } 

} 

Für mein Thema I hat so etwas wie:

<style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar"> 
     <item name="android:windowNoTitle">true</item> 
     <item name="android:windowBackground">@color/colorBackground</item> 
     <item name="colorPrimary">@color/colorPrimary</item> 
     <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
     <item name="colorAccent">@color/colorAccent</item> 
     <item name="android:textColorPrimary">@color/textColorPrimary</item> 
    </style> 

Aber nichts funktioniert, Thema überhaupt nicht ändern ... ich benutze gleiches Thema in meiner mobilen Anwendung und es funktioniert, ist der einzige Unterschied, dass meine Tätigkeit AppCompatActivity verlängern.

Gibt es eine Möglichkeit, damit es für Android Wear-Anwendungen funktioniert?

+0

verwenden könnte teilen Sie auch, was mit Ihrer App geschieht, wenn Sie sie auf dem Wearable-Gerät ausführen? Irgendein Fehler, der in deiner Konsole erscheint? Oder Sie können versuchen, 'AppCompatDelegate.setDefaultNightMode()' zu verwenden, wie in diesem [Tutorial] erwähnt (https://medium.com/@chrisbanes/appcompat-v23-2-daynight-d10f90c83e94) und sehen, ob es funktioniert für dich. Weitere Informationen erhalten Sie möglicherweise auch in diesem Blog (https://android-developers.googleblog.com/2016/02/android-support-library-232.html). – Teyam

+0

Nichts anhängen, wenn ich das Gerät laufen, ist es nur das Thema "Tag", auch wenn ich die Nacht mit setDefaultNightMode zwingen, schaue ich auf den Quellcode von AppCompatActivity und dort einige Code in das richtige Thema, wenn nötig, ich Ich werde versuchen, diesen Code in eine WearableActivity zu kopieren, um zu sehen, ob es funktioniert – jaumard

Antwort

0

schaffe ich es für meinen Anwendungsfall funktioniert (Forcierung Tag oder Nacht), indem Sie diesen auf meinem WearableActivity (Kopieren/Einfügen von AppCompatActivity):

public class BaseActivity extends WearableActivity implements AppCompatCallback { 
    private AppCompatDelegate delegate; 
    private int themeId = 0; 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 

     final AppCompatDelegate delegate = getDelegate(); 
     delegate.installViewFactory(); 
     delegate.onCreate(savedInstanceState); 
     if (delegate.applyDayNight() && themeId != 0) { 
      // If DayNight has been applied, we need to re-apply the theme for 
      // the changes to take effect. On API 23+, we should bypass 
      // setTheme(), which will no-op if the theme ID is identical to the 
      // current theme ID. 
      if (Build.VERSION.SDK_INT >= 23) { 
       onApplyThemeResource(getTheme(), themeId, false); 
      } else { 
       setTheme(themeId); 
      } 
     } 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public void setTheme(@StyleRes final int resid) { 
     super.setTheme(resid); 
     // Keep hold of the theme id so that we can re-set it later if needed 
     themeId = resid; 
    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     getDelegate().onSaveInstanceState(outState); 
    } 

    /** 
    * @return The {@link AppCompatDelegate} being used by this Activity. 
    */ 
    @NonNull 
    public AppCompatDelegate getDelegate() { 
     if (delegate == null) { 
      delegate = AppCompatDelegate.create(this, this); 
     } 
     return delegate; 
    } 

    @Override 
    public void onSupportActionModeStarted(ActionMode mode) { 

    } 

    @Override 
    public void onSupportActionModeFinished(ActionMode mode) { 

    } 

    @Nullable 
    @Override 
    public ActionMode onWindowStartingSupportActionMode(ActionMode.Callback callback) { 
     return null; 
    } 
} 

Jetzt kann ich AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES/NO);