小编dro*_*256的帖子

ConstraintLayout - 让元素占用必要的空间直到可用的空间

我在ConstraintLayout中按顺序水平组织了TextView和Button:

工作案例

我需要第一个元素(TextView)在文本足够短时只占用必要的空间,但是当需要显示更多文本时必要时展开,同时仍然留下足够的空间让第二个元素(Button)完全呈现在里面视图,其末尾与父级的末尾对齐.

这就是XML目前的样子:

<android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="16dp">

    <TextView
        android:id="@+id/element1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:text="Short enough text"/>

    <Button
        android:id="@+id/element2"
        android:layout_width="wrap_content"
        android:layout_height="48dp"
        android:layout_gravity="center_vertical"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        android:drawableLeft="@drawable/element2ButtonDrawable"
        android:drawablePadding="0dp"
        android:drawableStart="@drawable/element2ButtonDrawable"
        android:text="Action"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toRightOf="@id/element1"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintHorizontal_bias="0.0"/>

 </android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

这是从"足够短的文本"切换到"将导致大部分底部被推到父视图边界之外的较长文本"时树呈现的方式:

不好的情况

是否有可能通过使用ConstraintLayout实现我想要做的事情?

(在撰写本文时,最新版本为1.0.2)

谢谢!

android android-constraintlayout

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

java.lang.IllegalStateException:无法为X创建层-使用硬件层时

我在自定义视图上使用硬件层,以在为其Alpha设置动画时获得更好的性能。在我的崩溃报告人身上看到此崩溃:

Fatal Exception: java.lang.IllegalStateException: Unable to create layer for X
   at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
   at android.os.MessageQueue.next(MessageQueue.java:323)
   at android.os.Looper.loop(Looper.java:135)
   at android.app.ActivityThread.main(ActivityThread.java:5585)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
Run Code Online (Sandbox Code Playgroud)

我当前的解决方法是等待这种情况的发生,然后为“设备不支持硬件层”存储一个布尔值,并继续进行一次崩溃……然后下一次返回更简单的动画。

鉴于这是异步发生的,因此我无法真正尝试捕获。有谁知道一种可以预先检查操作是否成功的方法,以便直接使用后备功能,而不必甚至使用户崩溃?

谢谢!

android views hardware-acceleration

5
推荐指数
1
解决办法
641
查看次数