如何在Android Wear应用程序的FragmentActivity中启用环境模式(Always On)?

时间:2016-06-10 11:03:33

标签: android wear-os android-fragmentactivity alwayson

我有一个包含FragmentActivity的android服装应用程序:

public class MyFirstFragment extends Fragment

有2个碎片:

public class MySecondFragment extends Fragment

WearableActivity

我想在此片段活动中启用环境模式(始终开启)。但是,根据documentation,环境模式仅在我展开FragmentActivity时可用。

有没有办法同时拥有WearableActivity和& FragmentActivity在一起?

还有另一种方法可以在<Page x:Class="MedicinesApp.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:MedicinesApp" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <Page.Resources> <CollectionViewSource x:Name="FruitsCollectionViewSource" IsSourceGrouped="True"/> <DataTemplate x:Key="template"> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding}"/> <TextBlock Text="{Binding ElementName=listView, Path=DataContext.Test}" Margin="20 0" /> </StackPanel> </DataTemplate> </Page.Resources> <ListView ItemsSource="{Binding Source={StaticResource FruitsCollectionViewSource}}" x:Name="FruitGridView" Padding="30,20,40,0" SelectionMode="None" IsSwipeEnabled="false" IsItemClickEnabled="True" ItemClick="FruitGridView_ItemClick"> <ListView.ItemTemplate> <DataTemplate> <Grid HorizontalAlignment="Center" Width="250" Height="250"> <Border Background="{ThemeResource ListViewItemPlaceholderBackgroundThemeBrush}"> <Image Source="{Binding Path=DiseaseImageSource}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/> </Border> <StackPanel VerticalAlignment="Bottom" Background="{ThemeResource ListViewItemOverlayBackgroundThemeBrush}"> <StackPanel Orientation="Horizontal"> <TextBlock Text="Disease Name" Foreground="{ThemeResource ListViewItemOverlayForegroundThemeBrush}" Style="{StaticResource TitleTextBlockStyle}" Height="30" Margin="15,0,15,0"/> <TextBlock Text="{Binding Path=DiseaseName}" Style="{StaticResource TitleTextBlockStyle}" Height="30" Margin="15,0,15,0"/> </StackPanel> <StackPanel Orientation="Horizontal"> <TextBlock Text="Category of Disease" Foreground="{ThemeResource ListViewItemOverlaySecondaryForegroundThemeBrush}" Style="{StaticResource BaseTextBlockStyle}" TextWrapping="NoWrap" Margin="15,0,87,10"/> <TextBlock Text="{Binding Path=CategoryOfDisease}" Foreground="{ThemeResource ListViewItemOverlaySecondaryForegroundThemeBrush}" Style="{StaticResource BaseTextBlockStyle}" TextWrapping="NoWrap" Margin="15,0,15,10"/> </StackPanel> </StackPanel> </Grid> </DataTemplate> </ListView.ItemTemplate> <ListView.GroupStyle> <GroupStyle> <GroupStyle.HeaderTemplate> <DataTemplate> <TextBlock Text='{Binding Key}' Foreground="Gray" Margin="5" FontSize="30" FontFamily="Segoe UI Light" /> </DataTemplate> </GroupStyle.HeaderTemplate> <GroupStyle.Panel> <ItemsPanelTemplate> <VariableSizedWrapGrid MaximumRowsOrColumns="2" Orientation="Vertical" /> </ItemsPanelTemplate> </GroupStyle.Panel> </GroupStyle> </ListView.GroupStyle> <ListView.ItemsPanel> <ItemsPanelTemplate> <ItemsWrapGrid GroupPadding="0,0,70,0" /> </ItemsPanelTemplate> </ListView.ItemsPanel> </ListView> 中启用环境模式吗?

3 个答案:

答案 0 :(得分:3)

您应该实施AmbientModeSupport.AmbientCallbackProvider而不是WearableActivity,然后您可以扩展FragmentActivity

这是新的首选方法,它仍然为您提供了WearableActivity的所有好处,但也允许您使用Activity(或任何子类...... FragementActivity等)。

Official docs call out the details (and example code)

更新:立即使用AmbientModeSupport代替AmbientMode。 Google最近更改了名称,因此旧版本已弃用。

答案 1 :(得分:2)

对这两个问题的回答是,抱歉。

通过调用WearableActivity.setUseAmbient()启用环境模式,如果您未扩展WearableActivity,则显然无法使用此模式。由于Java不支持多重继承,因此您不能同时对WearableActivityFragmentActivity进行子类化 - 它是一个或另一个。

你真的需要在观看活动中使用Fragments吗?如果你真的想要支持环境模式,你可能需要考虑从片段中移动你的UI。

答案 2 :(得分:0)

如果您想在Android Wear上使用Fragments并支持环境模式,则需要使用AmbientModeSupport类。

让您的活动扩展FragmentActivity并实现AmbientModeSupport.AmbientCallbackProvider,一切都准备就绪!

详细信息和示例在这里:https://developer.android.com/training/wearables/apps/always-on#ambient-mode-class