现在Android设计支持库已经推出,有没有人知道如何用它实现扩展的Fab菜单,比如Inbox App上的fab?
应该是这样的:
是否可以将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
我的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缓存目录的路径.
即使在软键盘打开时,填充androidx.compose.material3.Scaffold
也会错误地添加导航栏填充,并且会添加 IME 填充,从而导致导航栏填充量增加一倍(请参见下面的屏幕截图,分隔线应接触软键盘的顶部)。
我正在尝试让以下事情一起工作:
windowSoftInputMode
是adjustResize
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
我有一个核心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) 我正在尝试在具有多个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) 我有以下 Lottie 动画,只播放一次,我怎样才能让它无限期地播放?
val composition by rememberLottieComposition(LottieCompositionSpec.RawRes(R.raw.search_animation))
LottieAnimation(composition = composition)
Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Compose 中重新创建首选项屏幕,但我不确定实现项目禁用状态的最佳方法是什么。
这是禁用状态的示例:
使用旧方法,TextView
我可以轻松使用该方法setEnabled()
,该方法将帮助我禁用单击侦听器并更改文本颜色。可组合项Text()
似乎没有实现此功能,因此我想知道是否有一种简单的方法可以实现相同的结果。
理想情况下,我想找到一种简单的方法来获取默认禁用颜色或默认 alpha 应用于当前文本颜色以实现禁用外观。
我正在开发一个使用库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 ×8
dagger-2 ×2
gradle ×2
speed-dial ×2
android-jetpack-compose-layout ×1
edge-to-edge ×1
groovy ×1
java ×1
lottie ×1