约束布局包装 textview 但约束宽度太长而无法让其他视图可见
Constraint layout wrap textview but constraint width when its too long to let other views be visible
我必须设计这个布局。图标应该贴在 textview
.
这是我试过的,看起来正是我所需要的。
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="@dimen/padding_m"
android:paddingTop="@dimen/padding_s"
android:paddingEnd="@dimen/padding_m"
android:paddingBottom="@dimen/padding_s"
app:layout_constraintTop_toTopOf="parent">
<LinearLayout
android:id="@+id/title_container"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/more_options"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/active_group_name"
style="@style/AppbarTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:maxLines="1"
app:layout_constrainedWidth="true"
tools:text="Ranjan Malav" />
<FrameLayout
android:id="@+id/account_option_icon_container"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_gravity="center"
android:layout_marginStart="@dimen/margin_xs"
android:background="@drawable/circle_background_36dp">
<ImageView
android:id="@+id/account_option_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
app:srcCompat="@drawable/ic_outline_settings_24" />
</FrameLayout>
</LinearLayout>
<ImageView
android:id="@+id/more_options"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_baseline_more_vert_24"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
但是当文字很长时,设置图标会被隐藏。
我怎样才能给图标优先权并让它占据 space 然后 textview 应该将自己包裹在剩余的 space 中?
在 textview 之前创建 ImageView
我不认为你能做到这一点,而且我认为让 ImageView 具有基于标题宽度的动态位置是糟糕的设计。
我认为最好的办法是将您的 imageView 作为动作放入 menu.xml
这按预期工作。这个关于 Whosebug 的回答很有帮助 .
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="@dimen/padding_m"
android:paddingTop="@dimen/padding_s"
android:paddingEnd="@dimen/padding_m"
android:paddingBottom="@dimen/padding_s"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/active_group_name"
style="@style/AppbarTitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:maxLines="1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@id/account_option_icon_container"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_default="wrap"
tools:text="Ranjan Ranjan Ranjan Ranjan Ranjan" />
<FrameLayout
android:id="@+id/account_option_icon_container"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_gravity="center"
android:layout_marginStart="@dimen/margin_xs"
android:background="@drawable/circle_background_36dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/more_options"
app:layout_constraintStart_toEndOf="@id/active_group_name"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/account_option_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
app:srcCompat="@drawable/ic_outline_settings_24" />
</FrameLayout>
<ImageView
android:id="@+id/more_options"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_baseline_more_vert_24"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
我必须设计这个布局。图标应该贴在 textview
.
这是我试过的,看起来正是我所需要的。
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="@dimen/padding_m"
android:paddingTop="@dimen/padding_s"
android:paddingEnd="@dimen/padding_m"
android:paddingBottom="@dimen/padding_s"
app:layout_constraintTop_toTopOf="parent">
<LinearLayout
android:id="@+id/title_container"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/more_options"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/active_group_name"
style="@style/AppbarTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:maxLines="1"
app:layout_constrainedWidth="true"
tools:text="Ranjan Malav" />
<FrameLayout
android:id="@+id/account_option_icon_container"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_gravity="center"
android:layout_marginStart="@dimen/margin_xs"
android:background="@drawable/circle_background_36dp">
<ImageView
android:id="@+id/account_option_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
app:srcCompat="@drawable/ic_outline_settings_24" />
</FrameLayout>
</LinearLayout>
<ImageView
android:id="@+id/more_options"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_baseline_more_vert_24"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
但是当文字很长时,设置图标会被隐藏。
我怎样才能给图标优先权并让它占据 space 然后 textview 应该将自己包裹在剩余的 space 中?
在 textview 之前创建 ImageView
我不认为你能做到这一点,而且我认为让 ImageView 具有基于标题宽度的动态位置是糟糕的设计。
我认为最好的办法是将您的 imageView 作为动作放入 menu.xml
这按预期工作。这个关于 Whosebug 的回答很有帮助
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="@dimen/padding_m"
android:paddingTop="@dimen/padding_s"
android:paddingEnd="@dimen/padding_m"
android:paddingBottom="@dimen/padding_s"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/active_group_name"
style="@style/AppbarTitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:maxLines="1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@id/account_option_icon_container"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_default="wrap"
tools:text="Ranjan Ranjan Ranjan Ranjan Ranjan" />
<FrameLayout
android:id="@+id/account_option_icon_container"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_gravity="center"
android:layout_marginStart="@dimen/margin_xs"
android:background="@drawable/circle_background_36dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/more_options"
app:layout_constraintStart_toEndOf="@id/active_group_name"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/account_option_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
app:srcCompat="@drawable/ic_outline_settings_24" />
</FrameLayout>
<ImageView
android:id="@+id/more_options"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_baseline_more_vert_24"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>