我正在尝试将底部导航栏与FAB重叠。我希望我的导航栏看起来像这样:
但是相反,它像这样切断了按钮:
如何防止FAB被切断?这是我的XML:
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.mobgen.designsprintapp.ui.main.MainActivity">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<android.support.design.widget.BottomNavigationView
android:id="@+id/navigation"
android:layout_width="match_parent"
android:layout_height="56dp"
android:background="?android:attr/windowBackground"
android:backgroundTint="@color/colorPrimary"
app:itemBackground="@color/colorPrimary"
app:itemIconTint="@color/nav_item_color_state"
app:itemTextColor="@android:color/black"
app:menu="@menu/navigation" >
<android.support.design.widget.FloatingActionButton
android:id="@+id/tools"
android:layout_width="56dp"
android:layout_height="56dp"
android:layout_gravity="center"
android:layout_marginBottom="8dp"
android:elevation="6dp"
android:scaleType="center"
app:srcCompat="@drawable/play" />
</android.support.design.widget.BottomNavigationView>
</LinearLayout>
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud) xml android android-layout android-view floating-action-button
背景
大家好,我是Firebase for Android的新手,我正试图首次实现Facebook和Google身份验证/登录.我按照这两个教程进行了相应的身份验证:
另外,在FacebookSignInActivity和GoogleSignInActivity正在努力,他们应该.
问题
问题是我试图在同一活动中使用Google和Facebook身份验证,但它不起作用.像这样:

我做了什么
我试图通过让它们扩展并在那里设置布局来保持FacebookSignInActivity分离.GoogleSignInActivityMainActivity
但我认为我应该把这两者合二为一.所以我尝试了但是我得到了一个奇怪的nullpointer异常:
java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.firebase.auth.FirebaseAuth.addAuthStateListener(com.google.firebase.auth.FirebaseAuth$AuthStateListener)' on a null object reference
Run Code Online (Sandbox Code Playgroud)
我不知道为什么对象在null中是onCreate因为我从其他两个正在运行的活动中复制了相同的代码:
mAuth = FirebaseAuth.getInstance();
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
// User is signed in
Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
} else {
// User is signed out
Log.d(TAG, …Run Code Online (Sandbox Code Playgroud) android google-authentication facebook-authentication firebase firebase-authentication
我有一个多模块化 android 应用程序设置,它由一个数据、域和演示模块组成。域模块是纯 Java 的。我知道可以通过添加以下内容来支持非 android 模块中的刀柄:
领域 build.gradle
implementation "com.google.dagger:hilt-core:$hilt_version"
kapt "com.google.dagger:hilt-compiler:$hilt_version"
Run Code Online (Sandbox Code Playgroud)
域模块提供了 UseCase 类的实现,这些类应该注入到位于 Presentation (app) 模块中的 ViewModel 中。
域模块:
@Module
@InstallIn(SingletonComponent::class)
// @InstallIn(ViewModelComponent::class)
object UseCaseModule {
@Provides
// @ViewModelScoped
fun provideGetMovieDetailsUseCase(
movieRepository: MovieRepository
): GetMovieDetailsUseCase {
return GetMovieDetailsUseCaseImpl(movieRepository)
}
}
Run Code Online (Sandbox Code Playgroud)
演示模块:
@HiltViewModel
class MovieDetailViewModel @Inject constructor(
private val getMovieDetailsUseCase: GetMovieDetailsUseCase
) : ViewModel() {
...
}
Run Code Online (Sandbox Code Playgroud)
由于 java-only 模块的性质,我不能使用@InstallIn(ViewModelComponent::class)注释。相反,我必须在SingletonComponent::class. 这也是在这里的 awnser 中完成的
我的问题
这种方法是“最佳实践”吗?还是将库设为 Android 库更好,以便我可以将依赖范围限定为 ViewModel?我更愿意将它保留为仅限 Java 的库。