如何在 Android 中将 TextView 均匀分布在离散的搜索栏刻度上?
How to evenly distribute TextView on discrete seekbar ticks in Android?
如何在 Discrete Seekbar 中的每个刻度线上方均匀分布文本?
我是这样的:
<SeekBar
android:id="@+id/sb_task_detail_status"
style="@style/Widget.AppCompat.SeekBar.Discrete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:max="4"
android:progress="0" />
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:stretchColumns="*"
android:layout_above="@+id/sb_task_detail_status"
android:layout_alignStart="@+id/sb_task_detail_status">
<TableRow
android:id="@+id/statusRow"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_task_status_newly_developed"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_column="1"
android:textColor="@android:color/white"
android:textSize="10sp"
android:text="Newly Developed"/>
<TextView
android:id="@+id/tv_task_status_developed"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_column="2"
android:textSize="10sp"
android:textColor="@android:color/white"
android:text="Developed"/>
<TextView
android:id="@+id/tv_task_status_in_progress"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_column="3"
android:textSize="10sp"
android:textColor="@android:color/white"
android:text="In Progress"/>
<TextView
android:id="@+id/tv_task_status_completed"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_column="4"
android:textSize="10sp"
android:textColor="@android:color/white"
android:text="Completed"/>
<TextView
android:id="@+id/tv_task_status_submitted"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_column="5"
android:textSize="10sp"
android:textColor="@android:color/white"
android:text="Submitted"/>
</TableRow>
</TableLayout>
这是我得到的结果:
请注意,根据进度,一次只能看到一个 TextView。
您是否尝试过使用 layout_width="0dp"
并分配相似的权重?像这样:
android:layout_width="0dp"
android:layout_weight="1"
对于每个 TextView
编辑
我用了这个 xml 并且它把 space 均匀地分开了
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<SeekBar
android:id="@+id/sb_task_detail_status"
style="@style/Widget.AppCompat.SeekBar.Discrete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:max="4"
android:progress="0" />
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:stretchColumns="*"
android:layout_above="@+id/sb_task_detail_status"
android:layout_alignStart="@+id/sb_task_detail_status">
<TableRow
android:id="@+id/statusRow"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_task_status_newly_developed"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_column="0"
android:textColor="@android:color/white"
android:textSize="10sp"
android:text="Newly Developed"/>
<TextView
android:id="@+id/tv_task_status_developed"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_column="1"
android:textSize="10sp"
android:textColor="@android:color/white"
android:text="Developed"/>
<TextView
android:id="@+id/tv_task_status_in_progress"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_column="2"
android:textSize="10sp"
android:textColor="@android:color/white"
android:text="In Progress"/>
<TextView
android:id="@+id/tv_task_status_completed"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_column="3"
android:textSize="10sp"
android:textColor="@android:color/white"
android:text="Completed"/>
<TextView
android:id="@+id/tv_task_status_submitted"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_column="4"
android:textSize="10sp"
android:textColor="@android:color/white"
android:text="Submitted"/>
</TableRow>
</TableLayout>
编辑 2
对于任何想要在离散搜索栏上均匀分布 Texviews 的人,here's 一个很好的教程,解释了实现它的所有步骤。
所提供的答案并没有真正 space 正确地解决问题(尤其是对于不同大小的标签)。它们可能是均匀的 spaced 个标签,但这还不足以使内容与搜索栏右侧的凹口对齐(例如,最后一个标签通常不会定位良好)。
理想情况下,您希望标签在槽口下方居中。
我想出了一些使用 ConstraintLayout 的东西
<android.support.constraint.ConstraintLayout
android:id="@+id/slider_root"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:clipToPadding="false"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent">
<SeekBar
android:id="@+id/slider"
android:theme="@style/Widget.AppCompat.SeekBar.Discrete"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingStart="10dp"
android:paddingEnd="10dp"
android:max="3"/>
<!-- Seek Bar notch guidlines -->
<android.support.constraint.Guideline
android:id="@+id/seekbar_start_guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0"/>
<android.support.constraint.Guideline
android:id="@+id/seekbar_mid_a_guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.33"/>
<android.support.constraint.Guideline
android:id="@+id/seekbar_mid_b_guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.66"/>
<android.support.constraint.Guideline
android:id="@+id/seekbar_end_guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="1"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="First"
android:textSize="12sp"
app:layout_constraintTop_toBottomOf="@id/slider"
app:layout_constraintLeft_toLeftOf="@id/seekbar_start_guideline"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Second"
android:textSize="12sp"
app:layout_constraintTop_toBottomOf="@id/slider"
app:layout_constraintLeft_toLeftOf="@id/seekbar_mid_a_guideline"
app:layout_constraintRight_toRightOf="@id/seekbar_mid_a_guideline"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Third"
android:textSize="12sp"
app:layout_constraintTop_toBottomOf="@id/slider"
app:layout_constraintLeft_toLeftOf="@id/seekbar_mid_b_guideline"
app:layout_constraintRight_toRightOf="@id/seekbar_mid_b_guideline"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Fourth"
android:textSize="12sp"
app:layout_constraintTop_toBottomOf="@id/slider"
app:layout_constraintRight_toRightOf="@id/seekbar_end_guideline"/>
</android.support.constraint.ConstraintLayout>
如果您有更多槽口,则需要以正确的比例添加参考线 spaced,然后将标签设置为居中(将其左右约束设置为与参考线相等)。
显然,最好的解决方案是将其包装在您自己的扩展 SeekBar 的控件中,并根据 seekbar 的最大设置动态构建 containtlayout 指南、标签和约束。
如何在 Discrete Seekbar 中的每个刻度线上方均匀分布文本?
我是这样的:
<SeekBar
android:id="@+id/sb_task_detail_status"
style="@style/Widget.AppCompat.SeekBar.Discrete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:max="4"
android:progress="0" />
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:stretchColumns="*"
android:layout_above="@+id/sb_task_detail_status"
android:layout_alignStart="@+id/sb_task_detail_status">
<TableRow
android:id="@+id/statusRow"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_task_status_newly_developed"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_column="1"
android:textColor="@android:color/white"
android:textSize="10sp"
android:text="Newly Developed"/>
<TextView
android:id="@+id/tv_task_status_developed"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_column="2"
android:textSize="10sp"
android:textColor="@android:color/white"
android:text="Developed"/>
<TextView
android:id="@+id/tv_task_status_in_progress"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_column="3"
android:textSize="10sp"
android:textColor="@android:color/white"
android:text="In Progress"/>
<TextView
android:id="@+id/tv_task_status_completed"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_column="4"
android:textSize="10sp"
android:textColor="@android:color/white"
android:text="Completed"/>
<TextView
android:id="@+id/tv_task_status_submitted"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_column="5"
android:textSize="10sp"
android:textColor="@android:color/white"
android:text="Submitted"/>
</TableRow>
</TableLayout>
这是我得到的结果:
请注意,根据进度,一次只能看到一个 TextView。
您是否尝试过使用 layout_width="0dp"
并分配相似的权重?像这样:
android:layout_width="0dp"
android:layout_weight="1"
对于每个 TextView
编辑 我用了这个 xml 并且它把 space 均匀地分开了
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<SeekBar
android:id="@+id/sb_task_detail_status"
style="@style/Widget.AppCompat.SeekBar.Discrete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:max="4"
android:progress="0" />
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:stretchColumns="*"
android:layout_above="@+id/sb_task_detail_status"
android:layout_alignStart="@+id/sb_task_detail_status">
<TableRow
android:id="@+id/statusRow"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_task_status_newly_developed"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_column="0"
android:textColor="@android:color/white"
android:textSize="10sp"
android:text="Newly Developed"/>
<TextView
android:id="@+id/tv_task_status_developed"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_column="1"
android:textSize="10sp"
android:textColor="@android:color/white"
android:text="Developed"/>
<TextView
android:id="@+id/tv_task_status_in_progress"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_column="2"
android:textSize="10sp"
android:textColor="@android:color/white"
android:text="In Progress"/>
<TextView
android:id="@+id/tv_task_status_completed"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_column="3"
android:textSize="10sp"
android:textColor="@android:color/white"
android:text="Completed"/>
<TextView
android:id="@+id/tv_task_status_submitted"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_column="4"
android:textSize="10sp"
android:textColor="@android:color/white"
android:text="Submitted"/>
</TableRow>
</TableLayout>
编辑 2 对于任何想要在离散搜索栏上均匀分布 Texviews 的人,here's 一个很好的教程,解释了实现它的所有步骤。
所提供的答案并没有真正 space 正确地解决问题(尤其是对于不同大小的标签)。它们可能是均匀的 spaced 个标签,但这还不足以使内容与搜索栏右侧的凹口对齐(例如,最后一个标签通常不会定位良好)。
理想情况下,您希望标签在槽口下方居中。
我想出了一些使用 ConstraintLayout 的东西
<android.support.constraint.ConstraintLayout
android:id="@+id/slider_root"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:clipToPadding="false"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent">
<SeekBar
android:id="@+id/slider"
android:theme="@style/Widget.AppCompat.SeekBar.Discrete"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingStart="10dp"
android:paddingEnd="10dp"
android:max="3"/>
<!-- Seek Bar notch guidlines -->
<android.support.constraint.Guideline
android:id="@+id/seekbar_start_guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0"/>
<android.support.constraint.Guideline
android:id="@+id/seekbar_mid_a_guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.33"/>
<android.support.constraint.Guideline
android:id="@+id/seekbar_mid_b_guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.66"/>
<android.support.constraint.Guideline
android:id="@+id/seekbar_end_guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="1"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="First"
android:textSize="12sp"
app:layout_constraintTop_toBottomOf="@id/slider"
app:layout_constraintLeft_toLeftOf="@id/seekbar_start_guideline"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Second"
android:textSize="12sp"
app:layout_constraintTop_toBottomOf="@id/slider"
app:layout_constraintLeft_toLeftOf="@id/seekbar_mid_a_guideline"
app:layout_constraintRight_toRightOf="@id/seekbar_mid_a_guideline"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Third"
android:textSize="12sp"
app:layout_constraintTop_toBottomOf="@id/slider"
app:layout_constraintLeft_toLeftOf="@id/seekbar_mid_b_guideline"
app:layout_constraintRight_toRightOf="@id/seekbar_mid_b_guideline"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Fourth"
android:textSize="12sp"
app:layout_constraintTop_toBottomOf="@id/slider"
app:layout_constraintRight_toRightOf="@id/seekbar_end_guideline"/>
</android.support.constraint.ConstraintLayout>
如果您有更多槽口,则需要以正确的比例添加参考线 spaced,然后将标签设置为居中(将其左右约束设置为与参考线相等)。
显然,最好的解决方案是将其包装在您自己的扩展 SeekBar 的控件中,并根据 seekbar 的最大设置动态构建 containtlayout 指南、标签和约束。