如何在Android中的离散搜索条标记上均匀分布TextView?

时间:2017-12-07 14:54:15

标签: android android-layout android-seekbar

如何在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>

这是我得到的结果:

enter image description here

请注意,根据进度,一次只能看到一个TextView。

2 个答案:

答案 0 :(得分:0)

您是否尝试过使用android:layout_width="0dp" android:layout_weight="1" 并指定相似的权重?像这样:

<?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>
每个TextView

修改 我使用了这个xml,它可以均匀地分割空间

.wrapper{
    transform: rotate(90deg);
    transform-origin:bottom left;

    position:absolute;
    top:-100vw;

    height:100vw;
    width:100vh;

    background-color:#000;
    color:#fff;

    overflow:auto;
}

编辑2 对于想要在离散搜索栏上均匀分布Texviews的人,here's这是一个很好的教程,解释了实现它的所有步骤。

答案 1 :(得分:0)

所提供的答案并没有真正正确地分隔事物(尤其是使用不同尺寸的标签)。它们可能是均匀间隔的标签,但不足以使它们与搜索栏右侧的凹口对齐(例如,最后一个标签通常放置得不好)。

理想情况下,您希望标签位于缺口的中心。

我想出了一些使用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>

如果缺口更多,则需要添加以正确比例隔开的参考线,然后将标签设置为居中(将其“左+右”约束设置为等于参考线)。

显然,最好的解决方案是将其包装在扩展SeekBar的控件中,并基于seekbar的Max设置动态构建constaintlayout准则,标签和约束。