我想将一张 gif 放入我的应用程序中。我知道如何插入图像资源,但是当我尝试添加 gif 时,它变成了静态图像。
DrawImage(image = +imageResource(R.drawable.gif))
Run Code Online (Sandbox Code Playgroud)
有没有人尝试过在 Jetpack Compose 中添加 gif,因为很难在网上找到如何添加 gif 文档?
我刚刚开始使用 Jetpack 撰写工具包。我添加了@Preview和 一组showBackground = true, showSystemUi = true作为参数,效果非常好。但每次我添加或更改某些内容时,它都不会自动刷新,所以我必须手动执行。
在我的Android应用我有一个运行一个又一个的第一个目的服务是由广播trigerred多意图服务.几天前我遇到了Work Manager,并且非常喜欢Worker和WorkManager类的简单性.工作管理器对常规意图服务的利弊是什么?我现在应该转换到工作经理,考虑到将来我可能不得不写更多的意向服务吗?还有哪个选项可以帮助我轻松测试代码?
java android intentservice android-jetpack android-workmanager
由于Worker该类是由framework(WorkerManager)创建的,我们如何使用@Inject字段Worker?
我是新架构组件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
我正在使用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) 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
我正在尝试Android架构组件中的分页库,但我怀疑将它集成到基于干净架构的项目中.
一般来说我有3个模块:
为了引入分页,我不得不将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 map和mapByPage方法,但工厂驻留在数据层.我的Viewmodel使用来自模型层的数据,在这种情况下,这将是一个数据PagedList,据我所知,分页列表不支持映射.
那么在这种情况下适当的做法是什么呢?
android clean-architecture android-architecture-components android-jetpack android-paging
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
在 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 ×10
android-jetpack ×10
kotlin ×5
android-architecture-components ×3
dagger-2 ×1
gif ×1
java ×1
rx-java2 ×1