Animate the software keyboard in ViewPrivateMessgesActivity.

This commit is contained in:
Docile-Alligator 2022-05-17 19:12:39 +08:00
parent 63ea1f54d0
commit 3df7b761a2
2 changed files with 114 additions and 64 deletions

View File

@ -7,6 +7,8 @@ import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.EditText; import android.widget.EditText;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
@ -14,6 +16,11 @@ import android.widget.LinearLayout;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowCompat;
import androidx.core.view.WindowInsetsAnimationCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import androidx.transition.AutoTransition; import androidx.transition.AutoTransition;
import androidx.transition.TransitionManager; import androidx.transition.TransitionManager;
@ -25,6 +32,7 @@ import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.Subscribe;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import javax.inject.Inject; import javax.inject.Inject;
@ -55,8 +63,6 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit
public static final String EXTRA_MESSAGE_POSITION = "EMP"; public static final String EXTRA_MESSAGE_POSITION = "EMP";
private static final String USER_AVATAR_STATE = "UAS"; private static final String USER_AVATAR_STATE = "UAS";
private static final String PRIVATE_MESSAGES_STATE = "PMS"; private static final String PRIVATE_MESSAGES_STATE = "PMS";
@BindView(R.id.linear_layout_view_private_messages_activity)
LinearLayout mLinearLayout;
@BindView(R.id.coordinator_layout_view_private_messages_activity) @BindView(R.id.coordinator_layout_view_private_messages_activity)
CoordinatorLayout mCoordinatorLayout; CoordinatorLayout mCoordinatorLayout;
@BindView(R.id.appbar_layout_view_private_messages_activity) @BindView(R.id.appbar_layout_view_private_messages_activity)
@ -107,7 +113,7 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
((Infinity) getApplication()).getAppComponent().inject(this); ((Infinity) getApplication()).getAppComponent().inject(this);
setImmersiveModeNotApplicable(); //setImmersiveModeNotApplicable();
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -123,6 +129,34 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit
addOnOffsetChangedListener(mAppBarLayout); addOnOffsetChangedListener(mAppBarLayout);
} }
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Window window = getWindow();
if (isChangeStatusBarIconColor()) {
addOnOffsetChangedListener(mAppBarLayout);
}
if (isImmersiveInterface()) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
mCoordinatorLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
window.setDecorFitsSystemWindows(false);
WindowCompat.setDecorFitsSystemWindows(window, false);
} else {
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}
adjustToolbar(mToolbar);
int navBarHeight = getNavBarHeight();
if (navBarHeight > 0) {
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mEditTextLinearLayout.getLayoutParams();
params.bottomMargin += navBarHeight;
mEditTextLinearLayout.setLayoutParams(params);
}
}
}
setSupportActionBar(mToolbar); setSupportActionBar(mToolbar);
setToolbarGoToTop(mToolbar); setToolbarGoToTop(mToolbar);
@ -142,6 +176,23 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit
} else { } else {
EventBus.getDefault().post(new PassPrivateMessageIndexEvent(getIntent().getIntExtra(EXTRA_PRIVATE_MESSAGE_INDEX, -1))); EventBus.getDefault().post(new PassPrivateMessageIndexEvent(getIntent().getIntExtra(EXTRA_PRIVATE_MESSAGE_INDEX, -1)));
} }
ViewCompat.setWindowInsetsAnimationCallback(
mCoordinatorLayout,
new WindowInsetsAnimationCompat.Callback(
WindowInsetsAnimationCompat.Callback.DISPATCH_MODE_CONTINUE_ON_SUBTREE
) {
@NonNull
@Override
public WindowInsetsCompat onProgress(@NonNull WindowInsetsCompat insets, @NonNull List<WindowInsetsAnimationCompat> runningAnimations) {
Insets typesInset = insets.getInsets(WindowInsetsCompat.Type.ime());
Insets otherInset = insets.getInsets(WindowInsetsCompat.Type.systemBars());
Insets diff = Insets.max(Insets.NONE, Insets.subtract(typesInset, otherInset));
mCoordinatorLayout.setPadding(0, 0, 0, diff.bottom);
return insets;
}
});
} }
private void bindView() { private void bindView() {
@ -306,7 +357,7 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit
@Override @Override
protected void applyCustomTheme() { protected void applyCustomTheme() {
mLinearLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor()); mCoordinatorLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(mAppBarLayout, null, mToolbar); applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(mAppBarLayout, null, mToolbar);
mDivider.setBackgroundColor(mCustomThemeWrapper.getDividerColor()); mDivider.setBackgroundColor(mCustomThemeWrapper.getDividerColor());
mEditText.setTextColor(mCustomThemeWrapper.getPrimaryTextColor()); mEditText.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());

View File

@ -1,17 +1,11 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/linear_layout_view_private_messages_activity" android:id="@+id/coordinator_layout_view_private_messages_activity"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical">
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" android:layout_weight="1"
android:id="@+id/coordinator_layout_view_private_messages_activity"
tools:context=".activities.ViewPrivateMessagesActivity"> tools:context=".activities.ViewPrivateMessagesActivity">
<com.google.android.material.appbar.AppBarLayout <com.google.android.material.appbar.AppBarLayout
@ -25,26 +19,29 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize" android:minHeight="?attr/actionBarSize"
app:popupTheme="@style/AppTheme.PopupOverlay" app:navigationIcon="?attr/homeAsUpIndicator"
app:navigationIcon="?attr/homeAsUpIndicator" /> app:popupTheme="@style/AppTheme.PopupOverlay" />
</com.google.android.material.appbar.AppBarLayout> </com.google.android.material.appbar.AppBarLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior" >
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view_view_private_messages" android:id="@+id/recycler_view_view_private_messages"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="0dp"
android:clipToPadding="false" android:layout_weight="1"
app:layout_behavior="@string/appbar_scrolling_view_behavior" /> android:clipToPadding="false" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<LinearLayout <LinearLayout
android:id="@+id/edit_text_wrapper_linear_layout_view_private_messages_activity" android:id="@+id/edit_text_wrapper_linear_layout_view_private_messages_activity"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical">
android:layout_gravity="bottom">
<View <View
android:id="@+id/edit_text_divider_view_private_messages_activity" android:id="@+id/edit_text_divider_view_private_messages_activity"
@ -61,28 +58,30 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:padding="16dp" android:background="#00000000"
android:fontFamily="?attr/font_family"
android:hint="@string/message" android:hint="@string/message"
android:inputType="textMultiLine" android:inputType="textMultiLine"
android:textSize="?attr/font_default" android:maxLines="3"
android:background="#00000000" android:padding="16dp"
android:textColor="?attr/primaryTextColor" android:textColor="?attr/primaryTextColor"
android:fontFamily="?attr/font_family" android:textSize="?attr/font_default" />
android:maxLines="3" />
<ImageView <ImageView
android:id="@+id/send_image_view_view_private_messages_activity" android:id="@+id/send_image_view_view_private_messages_activity"
android:layout_width="56dp" android:layout_width="56dp"
android:layout_height="56dp" android:layout_height="56dp"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:scaleType="center" android:background="?attr/selectableItemBackgroundBorderless"
android:src="@drawable/ic_send_black_24dp"
android:clickable="true" android:clickable="true"
android:focusable="true" android:focusable="true"
android:background="?attr/selectableItemBackgroundBorderless" /> android:scaleType="center"
android:src="@drawable/ic_send_black_24dp" />
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>