小编Sdg*_*emi的帖子

与CoordinatorLayout和CollapsingToolbarLayout结合使用时,共享元素转换不起作用

我的应用程序主屏幕包含图像的网格视图.当用户选择图像时,使用共享元素转换开始细节活动,该共享元素转换将所选择的网格图像动画化为位于细节活动中的CardView中的配对图像.

升级我的详细视图XML布局以包含CoordinatorLayout以及CollapsingToolbarLayout后,共享元素转换将图像视图移动到详细活动中的错误位置("enter"活动).如果在包含目标图像视图的CardView上方没有CollapsingToolBarLayout,框架似乎会将整个AppBarLayout和内部CollapsingToobarLayout的偏移量和动画放大到图像的大致位置.

通过将activityView(带有transitionName)添加到activity_detail.xml中的3个CardView中的任何一个,可以在Chris Banes的cheesesquare示例应用程序中复制该问题:

<ImageView
 android:id="@+id/imageView"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:src="@mipmap/ic_launcher"
 android:transitionName="sharedImage" />
Run Code Online (Sandbox Code Playgroud)

然后在CheeseListFragment.java中的onBindViewHolder中设置共享元素转换,如下所示:

@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
        holder.mBoundString = mValues.get(position);
        holder.mTextView.setText(mValues.get(position));

        holder.mView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Context context = v.getContext();
                Intent intent = new Intent(context, CheeseDetailActivity.class);
                intent.putExtra(CheeseDetailActivity.EXTRA_NAME, holder.mBoundString);

                holder.mImageView.setTransitionName("sharedImage");                        
                ActivityOptionsCompat options = ActivityOptionsCompat.
                        makeSceneTransitionAnimation(
                                getActivity(v.getContext()),
                                            holder.mImageView,                     
                                            "sharedImage");
                ActivityCompat.StartActivity((MyActivity) context, intent, options.toBundle());
            }
        });

        Glide.with(holder.mImageView.getContext())
                .load(Cheeses.getRandomCheeseDrawable())
                .fitCenter()
                .into(holder.mImageView);
    }
Run Code Online (Sandbox Code Playgroud)

如果运行应用程序,并单击奶酪列表项,您将了解过渡动画如何将图像移动到目标活动视图中的错误(太高)偏移.动画完成后,图像将"扭曲"到正确的位置.

任何关于可能的解决方法的想法都会非常受欢迎.

animation android shared-element-transition android-coordinatorlayout android-collapsingtoolbarlayout

12
推荐指数
1
解决办法
3072
查看次数

Android Firebase Crashlytics NDK 回溯缺少帧

当我使用 Fabric Crashlytics 时问题就出现了,现在使用 Firebase Crashlytics 最新版本它仍然存在。一切都基于官方 NDK 文档实现并且每次构建后都会正确上传符号 (cSYM) 文件。我设法产生了一个故意崩溃来比较墓碑并报告本机崩溃回溯,结果如下:

Firebase 控制台上报告的崩溃:

Firebase Crashlytics NDK 报告示例

崩溃保存的墓碑文件:

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'samsung/klteduosxx/klte:5.0/LRX21T/G900FDXXU1BOJ1:user/release-keys'
Revision: '14'
ABI: 'arm'
pid: 652, tid: 1160, name: AsyncTask #5  >>> com.mnhaami.pasaj <<<
signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
Abort message: 'stack corruption detected'
    r0 00000000  r1 00000488  r2 00000006  r3 00000000
    r4 656f3db8  r5 00000006  r6 00000016  r7 0000010c
    r8 …
Run Code Online (Sandbox Code Playgroud)

android android-ndk firebase crashlytics firebase-console

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

如何防止自定义 DialogFragment 在显示时隐藏键盘

有 2 种方法可以通过DialogFragment.

  1. 使用覆盖onCreateDialog并返回对话框AlertDialog.Builder
  2. 覆盖onCreateView

我们注意到,如果我们覆盖onCreateDialog,之前显示的软键盘将不会被隐藏。

但是,如果我们覆盖onCreateView之前显示的软键盘将被隐藏。

onCreateDialog不会隐藏软键盘

在此输入图像描述


onCreateView将隐藏软键盘

在此输入图像描述


隐藏软键盘不是我们想要的行为。我们希望软键盘保持原样。

onCreateDialog但是,由于DialogFragment 中提到的 ViewPager 限制 - IllegalStateException: Fragment does not have a view ,我们无法使用该方法。简而言之,如果您需要ViewPager在对话框中很好地工作,则无法使用onCreateDialog.

如果我们使用onCreateView,我们可以实现除了“不隐藏软键盘”之外的一切。

您知道为什么覆盖onCreateView创建自定义对话框会隐藏键盘吗?我们怎样才能防止这种行为呢?


代码

我的对话框风格是:

<style name="CustomDialog" parent="@style/Theme.AppCompat.Light.Dialog">
    <item name="android:windowNoTitle">false</item>
</style>
Run Code Online (Sandbox Code Playgroud)

ColorDialogFragment.java

public class ColorDialogFragment extends DialogFragment {
    private TabLayout tabLayout;
    private ViewPager viewPager;
    private ColorFragmentPagerAdapter colorFragmentPagerAdapter;

    public static ColorDialogFragment newInstance() {
        ColorDialogFragment colorDialogFragment …
Run Code Online (Sandbox Code Playgroud)

android android-softkeyboard android-dialogfragment

6
推荐指数
1
解决办法
1484
查看次数

如何在Android Room中创建部分索引

我想在名为MessagesonStateIdcolumns 的表上创建部分索引。WHERE通常,这可以通过添加一个子句来创建索引语句来完成,如官方文档中所述。正确的 SQLite 语句是:

CREATE INDEX `index_Messages_State_Id` ON `Messages` (`State`, `Id`) WHERE State = -2
Run Code Online (Sandbox Code Playgroud)

由于我目前使用 Room 作为 ORM,因此我不知道如何使用 Room 语法声明部分索引。

这是我的Messages表的简要说明:

@Entity(tableName = "Messages")
public class Message implements Parcelable {
    @PrimaryKey
    @SerializedName("i")
    @ColumnInfo(name = "Id")
    private long mId;

    @SerializedName("t")
    @ColumnInfo(name = "Type")
    private byte mType;

    @SerializedName("s")
    @ColumnInfo(name = "State")
    private byte mState;

    ....
}
Run Code Online (Sandbox Code Playgroud)

提前致谢。

sqlite indexing android android-room

3
推荐指数
1
解决办法
357
查看次数