标签: android-jetpack

将 gif 添加到 Jetpack Compose 中

我想将一张 gif 放入我的应用程序中。我知道如何插入图像资源,但是当我尝试添加 gif 时,它变成了静态图像。

DrawImage(image = +imageResource(R.drawable.gif))
Run Code Online (Sandbox Code Playgroud)

有没有人尝试过在 Jetpack Compose 中添加 gif,因为很难在网上找到如何添加 gif 文档?

android gif kotlin android-jetpack android-jetpack-compose

19
推荐指数
3
解决办法
2万
查看次数

有没有办法设置自动刷新jetpack撰写预览?

我刚刚开始使用 Jetpack 撰写工具包。我添加了@Preview和 一组showBackground = true, showSystemUi = true作为参数,效果非常好。但每次我添加或更改某些内容时,它都不会自动刷新,所以我必须手动执行。

android kotlin android-jetpack android-jetpack-compose

19
推荐指数
1
解决办法
3923
查看次数

Android Work Manager与服务?

在我的Android应用我有一个运行一个又一个的第一个目的服务是由广播trigerred多意图服务.几天前我遇到了Work Manager,并且非常喜欢Worker和WorkManager类的简单性.工作管理器对常规意图服务的利弊是什么?我现在应该转换到工作经理,考虑到将来我可能不得不写更多的意向服务吗?还有哪个选项可以帮助我轻松测试代码?

java android intentservice android-jetpack android-workmanager

18
推荐指数
1
解决办法
7890
查看次数

如何为工人类实现Dagger?

由于Worker该类是由framework(WorkerManager)创建的,我们如何使用@Inject字段Worker

android dagger-2 android-jetpack android-workmanager

18
推荐指数
2
解决办法
2196
查看次数

Worker中的同步或异步Rxjava(来自WorkManager组件)什么是正确的选择?

我是新架构组件WorkManager的新手,我通过Retrofit和RxJava进行API调用.

我的用例是从后端获取新帖子,然后显示通知,并更新小部件.

所以来自Worker类的doWork()方法中的代码可能看起来像这样.

@NonNull
  @Override
  public Result doWork() {
    AppDependencies appDependencies = new AppDependencies((Application) getApplicationContext());
    Repository repository = appDependencies.getRepository();

    repository.getNewPosts()
        .flatMap(newPosts -> repository.inserPosts(newPosts).toObservable())
        .doOnError(Timber::e)
        //if success - > return  Result.SUCCESS,
        // -> show notification
        // -> update widget
        // error-> return Result.Failure
        .dontKnowWhatBestNextThing; //blocking or subscribing

    //if we reached here then Retry
    return Result.RETRY;
  }
Run Code Online (Sandbox Code Playgroud)

我的问题是在Worker类中使用RxJava代码的正确方法是什么,因为doWork()方法有一个返回值,所以我必须使Rx代码同步.

如果我使用非阻塞Rx方法,我怎样才能返回值(成功 - 失败 - 重试)

android rx-java2 android-architecture-components android-jetpack android-workmanager

18
推荐指数
2
解决办法
3193
查看次数

Android Unresolved参考:findNavController错误

我正在使用Kotlin并在我的项目中添加了所有引用.

// Navigation
implementation "android.arch.navigation:navigation-common-ktx:$rootProject.nav_version"
implementation "android.arch.navigation:navigation-fragment-ktx:$rootProject.nav_version"
implementation "android.arch.navigation:navigation-runtime-ktx:$rootProject.nav_version"
implementation "android.arch.navigation:navigation-ui-ktx:$rootProject.nav_version"
Run Code Online (Sandbox Code Playgroud)

我也在build.gradle之上有这些

apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' apply plugin: 'androidx.navigation.safeargs'

我在我的片段中使用它就像这样

class HomeFragment : BaseFragment(){

    ...

    override fun onCategoryItemClicked(category: Category) {
        view.findNavController()?.navigate(R.id.phrasesFragment)
    }
}
Run Code Online (Sandbox Code Playgroud)

我也可以看到这个生成的扩展名(文件)

fun Fragment.findNavController(): NavController =
    NavHostFragment.findNavController(this)
Run Code Online (Sandbox Code Playgroud)

android navigationcontroller kotlin android-jetpack

18
推荐指数
1
解决办法
5256
查看次数

Jetpack Compose:如何以编程方式 onClick 将主题从浅色模式更改为深色模式

TL;DR 更改主题并在单击时在浅色和深色主题之间重新组合应用程序。

你好!我有一个有趣的问题,我一直在努力解决,希望得到一些帮助。我正在尝试实现一个设置屏幕,让用户更改应用程序的主题(选择与系统设置匹配的深色、浅色或自动)。

我在选择调色板时通过调用isSystemInDarkTheme()函数成功地动态设置了主题,但我很难通过单击按钮在浅色和深色主题之间重新组合应用程序。

我现在的策略是创建一个主题模型,该模型从用户实际在其中选择主题的设置组件中提升状态。然后,该主题模型将主题状态变量公开给自定义主题(围绕材质主题),以决定是否选择浅色或深色调色板。这是相关代码-->

主题

@Composable
fun CustomTheme(
themeViewModel: ThemeViewModel = viewModel(),
content: @Composable() () -> Unit,
) {
   val colors = when (themeViewModel.theme.value.toString()) {
       "Dark" -> DarkColorPalette
       "Light" -> LightColorPalette
       else -> if (isSystemInDarkTheme()) DarkColorPalette else LightColorPalette
   }

   MaterialTheme(
       colors = colors,
       typography = typography,
       shapes = shapes,
       content = content
   )
   }
Run Code Online (Sandbox Code Playgroud)

主题模型和状态变量

class ThemeViewModel : ViewModel() {
private val _theme = MutableLiveData("Auto")
val theme: LiveData<String> = _theme

fun onThemeChanged(newTheme: String) {
    when …
Run Code Online (Sandbox Code Playgroud)

android android-theme kotlin android-jetpack android-jetpack-compose

18
推荐指数
3
解决办法
3万
查看次数

具有干净架构的Android分页库

我正在尝试Android架构组件中的分页库,但我怀疑将它集成到基于干净架构的项目中.

一般来说我有3个模块:

  • 主模块(App)
  • 数据模块(具有网络和数据库依赖关系的Android模块)
  • 域模块(Pure Kotlin模块)

为了引入分页,我不得不将PagedList<T>类视为域类.(IMO不是一个可怕的想法,因为最终是一个列表,数据源是抽象的)

所以在域层我可以有一个像以下的repostiory:

interface ItemRepository {
    fun getItems():PagedList<Item>
}
Run Code Online (Sandbox Code Playgroud)

然后在数据模块中创建如下的实现:

class ItemRepositoryImpl: ItemRepositoy(private val factory:ItemDataSourceFavtory) {
    fun getItems():PagedList<Item> {

  val pageConfigurations = PagedList.Config.Builder()
            .setPageSize(10)
            .setInitialLoadSizeHint(15)
            .setPrefetchDistance(5)
            .setEnablePlaceholders(false)
            .build()

    return RxPagedListBuilder(locationDataSourceFactory, pageConfigurations)
            .setInitialLoadKey(1)
            .buildObservable()
}
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.我的疑问是,当我们需要变换域模型为表示层(比方说我的项目需要意识到,如果被检查显示的图标检查),通常我会我的域模型映射到演示文稿一个.

我知道DataSourceFactoryhas mapmapByPage方法,但工厂驻留在数据层.我的Viewmodel使用来自模型层的数据,在这种情况下,这将是一个数据PagedList,据我所知,分页列表不支持映射.

那么在这种情况下适当的做法是什么呢?

android clean-architecture android-architecture-components android-jetpack android-paging

17
推荐指数
1
解决办法
1204
查看次数

发射和发射源与 LiveData 有什么区别?(如在实时用例中)

emit接受data类而emitSource接受LiveData<T>( T -> data)。考虑以下示例:-我有两种类型的调用:-

suspend fun getData(): Data // returns directly data
Run Code Online (Sandbox Code Playgroud)

而另一个;

suspend fun getData(): LiveData<Data> // returns live data instead
Run Code Online (Sandbox Code Playgroud)

对于第一种情况,我可以使用:-

liveData {
   emit(LOADING)
   emit(getData())
}
Run Code Online (Sandbox Code Playgroud)

我的问题:使用上述方法可以解决我的问题,为什么我们还需要emitSource(liveData)

任何使用该emitSource方法的好用例都会清楚地表明!

android android-livedata android-architecture-components android-jetpack kotlin-coroutines

17
推荐指数
4
解决办法
5963
查看次数

在 Jetpack Compose 中将 Drawable 实例设置为 Image

在 Jetpack Compose 中,谁能告诉我有没有办法将 Drawable 对象分配给 Image compose 视图?

我把应用程序安装在 Android 设备上。我得到一个类型为 Drawable 的图标,我想在 Image 中使用它

val icon: Drawable = packageInfor.applicationInfo.loadIcon(packageManager)
Run Code Online (Sandbox Code Playgroud)

我发现有3个函数可以分配图像

  • 来自画家 (IdRes)
  • 来自图像位图
  • 来自图像向量

在此输入图像描述

综上所述,我不知道如何分配一个 Drawable 实例。

android kotlin android-jetpack android-jetpack-compose

17
推荐指数
3
解决办法
1万
查看次数