- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
Google 宣布了一种名为“ConstraintLayout”的新布局,它应该是终极布局,它可以取代所有布局,同时保持平坦(没有嵌套布局)并具有更好的性能。
问题是,除了 Google IO 上的视频之外,我几乎看不到任何可以帮助我解决这个问题的教程。
我想做的是,鉴于我在另一个布局中有一个垂直居中的 LinearLayout - 将它们都转换为一个 ConstraintLayout。
毕竟这就是这个新布局的目的……
我希望处理的布局如下所示:
注意中间的views只是垂直居中,两个textView在ImageView的右边,也是垂直居中的。
这一切都适用于RelativeLayout,它具有2个TextView的LinearLayout,但我想知道如何将它们转换为单个ConstraintLayout。
这是我展示的示例 XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
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="wrap_content"
android:minHeight="?attr/listPreferredItemHeightSmall">
<ImageView
android:id="@+id/appIconImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:layout_marginEnd="4dp"
android:layout_marginLeft="2dp"
android:layout_marginRight="4dp"
android:layout_marginStart="2dp"
android:adjustViewBounds="true"
android:src="@android:drawable/sym_def_app_icon"
tools:ignore="ContentDescription"/>
<LinearLayout
android:id="@+id/appDetailsContainer"
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toEndOf="@+id/appIconImageView"
android:layout_toLeftOf="@+id/overflowView"
android:layout_toRightOf="@+id/appIconImageView"
android:layout_toStartOf="@+id/overflowView"
android:orientation="vertical">
<TextView
android:id="@+id/appLabelTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:text="label"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textDirection="locale"
tools:ignore="HardcodedText,UnusedAttribute"/>
<TextView
android:id="@+id/appDescriptionTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:minLines="3"
android:text="description"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textDirection="locale"
tools:ignore="HardcodedText,UnusedAttribute"/>
</LinearLayout>
<ImageView
android:id="@+id/overflowView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:adjustViewBounds="true"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:padding="10dp"
app:srcCompat="@drawable/ic_more_vert_black_24dp"
tools:src="@drawable/ic_more_vert_black_24dp"
tools:ignore="ContentDescription"/>
<ImageView
android:id="@+id/isSystemAppImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignEnd="@+id/overflowView"
android:layout_alignLeft="@+id/overflowView"
android:layout_alignParentBottom="true"
android:layout_alignRight="@+id/overflowView"
android:layout_alignStart="@+id/overflowView"
android:adjustViewBounds="true"
android:scaleType="centerInside"
app:srcCompat="@drawable/ic_warning_black_24dp"
tools:ignore="ContentDescription"
tools:src="@drawable/ic_warning_black_24dp"/>
</RelativeLayout>
我尝试阅读一些文章并观看 Google 的一些视频:
那没有帮助,所以我尝试使用它,希望我能自己找出如何使用它。但我不知道该怎么做。我尝试使用该功能来转换布局,但这会使 View 变得一团糟,并添加了我不想拥有的额外边距。
如何将 2 个布局转换为单个 ConstraintLayout ?
最佳答案
ContraintLayout
包含一个功能 - Chains
- 可以实现您的要求:
Chains provide group-like behavior in a single axis (horizontally or vertically).
A set of widgets are considered a chain if they a linked together via a bi-directional connection
Once a chain is created, there are two possibilities:
- Spread the elements in the available space
- A chain can also be "packed", in that case the elements are grouped together
至于你的情况,你必须打包你的 label
和 description
TextViews 并将它们垂直居中在你的 parent 中:
(确保您使用支持链的 ConstraintLayout
版本)
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="16dp"
android:text="TextView"
app:layout_constraintBottom_toTopOf="@+id/button"
app:layout_constraintLeft_toRightOf="@+id/imageView2"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintHorizontal_chainStyle="packed"/>
<TextView
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:text="Button\nMkay"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toRightOf="@+id/imageView2"
app:layout_constraintTop_toBottomOf="@+id/textView"/>
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginTop="16dp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@mipmap/ic_launcher"/>
<ImageView
android:id="@+id/imageView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@mipmap/ic_launcher"/>
<ImageView
android:id="@+id/imageView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:layout_marginEnd="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:srcCompat="@mipmap/ic_launcher"/>
</android.support.constraint.ConstraintLayout>
现在在约束布局 1.1.3 中,我们必须使用 app:layout_constraintHorizontal_chainStyle="packed"
而不是 app:layout_constraintVertical_chainPacked="true"
关于android - 如何使用 ConstraintLayout 将多个 View 集中在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37507057/
我正在开发一个 Android 库,这个库有一些布局 Activity 。 在布局中,我有下一个代码 ... Make sure you have correct i
我想以编程方式将一个 ConstraintLayout 放入另一个 ConstraintLayout 中。但是,如果我按照之前使用 RelativeLayout 的方式对其进行膨胀,它不会显示。 这是
我在我的布局中使用 androidx.constraintlayout.widget.ConstraintLayout 并且它不显示链,我也不能拖动任何小部件。我只需键入要使用的约束。 这是 and
我注意到我可以注释掉 implementation 'androidx.constraintlayout:constraintlayout:2.0.4'尽管我在我的应用程序中使用了 Constrain
我尝试以编程方式添加 ConstraintLayout。它在工作,但 WRAP_CONTENT 不工作。布局始终为 MATCH_PARENT。 Android 开发者页面没有为 ConstraintL
使用 Android Studio 菜单选项 Refactor -> Refactor to Androidx...迁移到 Androidx 包后... 我收到以下错误: Error inflatin
我正在尝试学习 Android 开发,但问题是我的应用程序每次尝试运行时都会崩溃,并且在 logcat 中出现以下错误: 2019-06-30 16:17:18.198 5317-5317/? E/e
我刚刚通过 Android Studio 菜单选项 重构 -> 重构到 AndroidX 迁移到 androidx 我收到以下错误: android.view.InflateException: Bi
我遇到一个错误,ConstraintLayout 中存在空对象引用 Logcat E/UncaughtException: java.lang.NullPointerException: Attemp
如问题标题所示,我已经搜索了我的问题的答案,并找到了 Error inflating class androidx.constraintlayout.ConstraintLayout after mi
因此,我更新了我的 gradle 文件,我的应用开始崩溃并出现一些奇怪的错误。它开始莫名其妙地崩溃,而且我的 java 类中的抽屉导航代码也出现了错误,这是我以前没有遇到过的。 我已经尝试使用我的版本
当我尝试使用 XML 在覆盖中插入 Compose(在其他应用程序上绘制)时,我得到了这个异常: java.lang.IllegalStateException: ViewTreeLifecycleO
我正在尝试通过 CodingInFlow 在 YouTube 上关注 Android Studio 开发的播放列表。 我正在尝试关注此视频,但遇到了问题... https://www.youtube.
在android studio SDK工具中有两个ConstraintLayout选项,一个是ConstraintLayout for android,另一个是Solver for Constrain
我有一个非常令人沮丧的错误,我无法解释。我创建了一个 Android 应用程序,它使用 Androidx AppCompat 来使其与旧版本兼容。这是我的主要 Activity 布局文件:{Andro
免责声明:我知道 Compose 刚刚进入 alpha01,因此我不希望每个功能可用。但是,特定布局案例的布局和处理是恕我直言的一个重要主题应该尽早解决 😉。 当前基于 View Constrain
Attempt to invoke virtual method 'boolean androidx.constraintlayout.solver.widgets.ConstraintWidgetC
我正在尝试自己学习android开发,因为我试图使用按钮和 TextView 制作一个简单的文本更改应用程序,但是当使用USB在我自己的手机上运行它时,不幸的是,它开始显示该应用程序已经停止。如果您不
我遇到了一个奇怪的问题:layout.xml 我正在尝试将一个小部件连接到我的屏障。问题是,当我尝试将我的小部件的 END 与 barrier 连接时,没有
所以我有一个 RecycleView 的布局文件,它具有可展开/可折叠的 View 。 点击标题会展开/折叠额外的数据。在编辑器中一切看起来都很好。但是,它会有一个类似于 layout_marginB
我是一名优秀的程序员,十分优秀!