如何创建具有Android优先级等4种状态的自定义SeekBar?

时间:2016-06-06 13:13:21

标签: android android-layout android-seekbar

我正在尝试自定义一个SeekBar以确定过去6个月内问题的发生率,因此基于此,我有4种可能的状态:无,低,中和高。

正如我所知,我希望能够实现如下例所示的布局。 Android Priority

我尝试在布局中放置一个SeekBar,并在其中包含了具有预期选项的其他布局。但是,它会根据屏幕大小更改行为外观,并变得混乱。下面是使用过的代码:

SeekBar布局         

        <include
            android:id="@+id/options"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            layout="@layout/options"
            android:layout_alignLeft="@+id/seekBar"
            android:layout_alignStart="@+id/seekBar"
            android:layout_marginRight="11dp"
            android:layout_marginEnd="11dp" />

        <SeekBar
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/seekBar"
            android:max="100"
            android:layout_below="@+id/options" />

    </RelativeLayout>

选项布局

<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tableRow1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/optionN"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="left"
        android:paddingLeft="12dp"
        android:text="None" />

    <TextView
        android:id="@+id/optionL"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="left"
        android:paddingLeft="10dp"
        android:text="Low" />

    <TextView
        android:id="@+id/optionM"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="right"
        android:paddingRight="6dp"
        android:text="Medium" />

    <TextView
        android:id="@+id/optionH"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="right"
        android:paddingRight="8dp"
        android:text="High" />

</TableRow>

1 个答案:

答案 0 :(得分:0)

Basiclly,你需要覆盖onProgressChanged函数:

在onCreate函数中添加:

seekbar = (SeekBar) findViewById(R.id.seekBar);
seekbar.setOnSeekBarChangeListener(this);

您的类应该实现OnSeekBarChangeListener:

class yourActivity extends Activity implements OnSeekBarChangeListener

你应该覆盖的功能应如下所示:

int stepSize = 4;
 @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    progress = ((int)Math.round(progress/stepSize))*stepSize;
    seekBar.setProgress(progress);
    textview.setText(progress + "");
}