小编Rob*_*rdi的帖子

Android设计支持库可扩展浮动操作按钮(FAB)菜单

现在Android设计支持库已经推出,有没有人知道如何用它实现扩展的Fab菜单,比如Inbox App上的fab?

应该是这样的:

在此输入图像描述

android material-design floating-action-button speed-dial

159
推荐指数
7
解决办法
13万
查看次数

如何将 Arrangement.spacedBy() 和 Arrangement.Center 组合在 Row.horizo​​ntalArrangement 中

是否可以将Arrangement.spacedBy(16.dp)and组合Arrangement.Center在一个 中Row.horizontalArrangement

我想做的是将内容水平居中并设置默认间距16.dp

我知道我可以结合Row和 aBox来达到相同的结果,但我想知道是否可以仅使用 heRow的属性来完成。

    Row(
        modifier = Modifier.fillMaxWidth(),
        horizontalArrangement = Arrangement.Center, // I would like to add the .spacedBy(16.dp), keeping the Center arrangement 
        verticalAlignment = Alignment.CenterVertically,
    ) {
        Text(
            text = stringResource(R.string.generic_error_pagination),
            style = MaterialTheme.typography.subtitle1,
            color = MaterialTheme.colors.textSecondary,
        )
        OutlinedButton(onClick = onClick) {
            Text(stringResource(id = R.string.retry_button))
        }
    }
Run Code Online (Sandbox Code Playgroud)

android android-jetpack-compose android-jetpack-compose-layout android-compose-layout

35
推荐指数
1
解决办法
6027
查看次数

Gradle:从自定义构建文件开始获取根项目目录路径

我的Gradle项目的结构如下:

Project
??? app
     ??? build.gradle
??? foo
     ??? bar.txt
·
·
·
??? build.gradle
Run Code Online (Sandbox Code Playgroud)

通常要获取foo文件夹的绝对路径,我只需new File('foo').getAbsolutePath()在根build.gradle文件中执行即可.

但遗憾的是,如果从项目目录外部运行gradle脚本,则无法执行此操作,例如执行以下操作:

$ trunk/gradlew -b trunk/build.gradle tasks
Run Code Online (Sandbox Code Playgroud)

使用上一个命令,gradle正在查找foo项目父项中的目录,因为我从那里启动了脚本.

有没有办法获得build.gradle所在项目的绝对路径,即使你从另一个目录启动你的脚本?或者有没有其他方法来获取脚本所在的同一文件夹中的目录引用?

我也尝试过,getClass().protectionDomain.codeSource.location.path但它返回了gradle缓存目录的路径.

groovy gradle

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

撰写:如何使用边缘到边缘的 ime 填充和支架填充,并且 windowSoftInputMode 为 adjustmentResize

即使在软键盘打开时,填充androidx.compose.material3.Scaffold也会错误地添加导航栏填充,并且会添加 IME 填充,从而导致导航栏填充量增加一倍(请参见下面的屏幕截图,分隔线应接触软键盘的顶部)。

我正在尝试让以下事情一起工作:

  1. 应用程序是边缘到边缘的
  2. windowSoftInputModeadjustResize
  3. 将我的内容放在androidx.compose.material3.Scaffold

这是代码MainActivity

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        WindowCompat.setDecorFitsSystemWindows(window, false)
        setContent {
            MyComposeApplicationTheme {
                Scaffold(
                    topBar = {
                        TopAppBar(
                            title = { Text(text = stringResource(id = R.string.app_name)) }
                        )
                    },
                ) { scaffoldPadding ->
                    Box(
                        modifier = Modifier
                            .fillMaxSize()
                            .padding(scaffoldPadding),
                        contentAlignment = Alignment.BottomCenter
                    ) {
                        OutlinedTextField(
                            value = "",
                            onValueChange = {},
                            modifier = Modifier
                                .fillMaxWidth()
                                .padding(horizontal = 16.dp)
                        )
                        Divider() …
Run Code Online (Sandbox Code Playgroud)

android material-design android-jetpack-compose edge-to-edge

20
推荐指数
1
解决办法
5187
查看次数

Dagger 2:在不同库模块上的多个具有相同Scope的Component之间提供相同的实例

我有一个核心Android库,我使用@Singleton作用域来定义CoreComponent广告,以注入CoreModule提供的类的实例.

@Singleton
@Component(modules = {CoreModule.class})
public interface CoreComponent {
    void inject(SomeClass target);
}

@Module
public class CoreModule {
    @Singleton
    @Provides
    CoreRepository provideCoreRepository() {
        return new CoreRepositoryImpl();
    }
}
Run Code Online (Sandbox Code Playgroud)

我想从另一个依赖于核心库的Android库访问相同的@Singleton实例,并且正在使用另一个组件.

@Singleton
@FooScope
@Component(modules = {CoreModule.class, FooModule.class})
public interface FooComponent {
    void inject(SomeActivity target);
}

public class FooActivity extends AppCompatActivity {
    @Inject
    public CoreRepository repo;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        injectDependencies();
        super.onCreate(savedInstanceState);
    }
    [...]
}
Run Code Online (Sandbox Code Playgroud)

上面的代码构建,但@Singleton范围是Component的"本地".换句话说,有两个单例实例,一个用于CoreComponent,另一个用于FooComponent.

Android Application
??? Foo Library
|   ??? Core Library
??? Bar Library
|   ??? …
Run Code Online (Sandbox Code Playgroud)

java android dagger-2

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

Android浮动操作按钮选项菜单

在此输入图像描述

有很多自定义库可用于实现FAB菜单.但我希望它可以在不使用任何自定义库的情况下完成.我想本地实现这个FAB菜单.

请不要向我推荐任何自定义库

android android-layout speed-dial

14
推荐指数
1
解决办法
2万
查看次数

Dagger 2,图书馆模块和@Singleton

我正在尝试在具有多个Android库模块的Android项目中使用Dagger 2,并且我希望能够从这些模块提供单例范围的类实例.

目前,我能够在库模块中定义组件,并在主应用程序模块中注入实例.

我无法做的是提供一个单例实例.

项目结构如下:

Project
??? app
??? library1
·
·
·
??? libraryN
Run Code Online (Sandbox Code Playgroud)

在库中我用这种方式定义组件:

@Component
public interface LibraryComponent {

    // Provide instances of MyManager to MainComponent:
    MyManager getMyManager();
}
Run Code Online (Sandbox Code Playgroud)

而MyManager看起来像这样:

public class MyManager {

    private static final String TAG = "MyManager";

    @Inject
    public MyManager() {
        Log.d(TAG, "Creating MyManager");
    }
}
Run Code Online (Sandbox Code Playgroud)

在主App中,我以这种方式定义我的组件:

@ApplicationScope
@Component(dependencies = {LibraryComponent.class, Library2Component.class})
public interface MainComponent {

    void inject(MainActivity target);
}
Run Code Online (Sandbox Code Playgroud)

这是Application类:

public class App extends Application {
    private …
Run Code Online (Sandbox Code Playgroud)

android dagger-2

13
推荐指数
1
解决办法
3786
查看次数

Lottie Compose:如何无限循环动画

我有以下 Lottie 动画,只播放一次,我怎样才能让它无限期地播放?

val composition by rememberLottieComposition(LottieCompositionSpec.RawRes(R.raw.search_animation))
LottieAnimation(composition = composition)
Run Code Online (Sandbox Code Playgroud)

lottie android-jetpack-compose

11
推荐指数
1
解决办法
3572
查看次数

如何在文本可组合项上实现禁用外观

我正在尝试在 Compose 中重新创建首选项屏幕,但我不确定实现项目禁用状态的最佳方法是什么。

这是禁用状态的示例:

使用旧方法,TextView我可以轻松使用该方法setEnabled(),该方法将帮助我禁用单击侦听器并更改文本颜色。可组合项Text()似乎没有实现此功能,因此我想知道是否有一种简单的方法可以实现相同的结果。

理想情况下,我想找到一种简单的方法来获取默认禁用颜色或默认 alpha 应用于当前文本颜色以实现禁用外观。

android material-design android-jetpack-compose

9
推荐指数
2
解决办法
4843
查看次数

Android Studio 0.3.1,appcompat-v7和android库项目总是生成IllegalStateException

我正在开发一个使用库appcompat v7和support-v4的应用程序.该应用程序正常工作,其主题源自Theme.AppCompat.

当我尝试将任何模块(android库项目)添加到主项目时出现问题:我总是得到一个IllegalStateException.

目前项目库完全是空的:没有Java类或XML资源,只有AndroidManifest文件:

MyLibrary AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.viewpagerindicator"
    android:versionCode="1"
    android:versionName="1.0">

    <uses-sdk
        android:minSdkVersion="7"
        android:targetSdkVersion="18" />
    <application />
</manifest>
Run Code Online (Sandbox Code Playgroud)

我还尝试将主题添加Theme.AppCompat到MyLibrary的"应用程序"部分:

<?xml version="1.0" encoding="utf-8"?>
[...]
    <application android:theme="@style/Theme.AppCompat" />
</manifest>
Run Code Online (Sandbox Code Playgroud)

但结果始终是相同的异常:

10-28 12:22:36.761    1770-1770/? E/AndroidRuntime? FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.akhela.tekpea/com.akhela.tekpea.ui.OverviewActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
            at android.app.ActivityThread.access$600(ActivityThread.java:141)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5041)
            at java.lang.reflect.Method.invokeNative(Native Method) …
Run Code Online (Sandbox Code Playgroud)

android gradle android-library android-studio

8
推荐指数
1
解决办法
4612
查看次数