ZetCode

SeekBar 小部件

最后修改于 2012年11月5日

在本章的 Android 开发教程中,我们将介绍 SeekBar 小部件。

SeekBar 小部件用于从一系列值中选择一个值。用户拖动该小部件的滑块来选择特定值。为了处理 SeekBar 事件,我们实现了 SeekBar.OnSeekBarChangeListener 监听器。

SeekBar 示例

我们有一个 SeekBar 小部件和一个 TextView 小部件。SeekBar 的当前值显示在 TextView 中。Android manifest 文件保持不变。

main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >  
<SeekBar
   android:id="@+id/sbId"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:layout_margin="10dp"
   android:max="100"
   android:progress="50"
   />
<TextView
    android:id="@+id/tvId"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="10dp"
    />     
</LinearLayout>

main.xml 布局文件中,我们定义了两个小部件。SeekBar 小部件和 TextView 小部件。

strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">SeekBar</string>
    <string name="init_tv_value">50</string>
</resources>

这是 strings.xml 资源文件。init_tv_valueTextView 小部件的初始值。

MainActivity.java
package com.zetcode.seekbar;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;

public class MainActivity extends Activity implements 
    OnSeekBarChangeListener
{
    TextView tv;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        SeekBar sb = (SeekBar) findViewById(R.id.sbId);
        sb.setOnSeekBarChangeListener(this);

        tv = (TextView) findViewById(R.id.tvId);
        String val = this.getString(R.string.init_tv_value);
        tv.setText(val);
    }

   @Override
   public void onProgressChanged(SeekBar seekBar, int progress,
     boolean fromUser) 
   {
       tv.setText(String.valueOf(progress));
   }

   @Override
   public void onStartTrackingTouch(SeekBar seekBar) 
   {
       // not implemented 
   }

   @Override
   public void onStopTrackingTouch(SeekBar seekBar) 
   {
       // not implemented 
   }
}

SeekBar 的当前值被设置为 TextView 小部件。

public class MainActivity extends Activity implements 
    OnSeekBarChangeListener

MainActivity 类实现了 OnSeekBarChangeListener。我们需要定义三个抽象方法。onProgressChanged()onStartTrackingTouch()onStopTrackingTouch() 方法。最后两个方法未实现。它们与触摸手势有关。我们只提供空方法。

SeekBar sb = (SeekBar) findViewById(R.id.sbId);
sb.setOnSeekBarChangeListener(this);

我们获取到 SeekBar 小部件的引用并为其设置监听器。

tv = (TextView) findViewById(R.id.tvId);
String val = this.getString(R.string.init_tv_value);
tv.setText(val);

我们获取到 TextView 小部件的引用。我们从字符串资源中检索 init_tv_value 并将其设置为 TextView

@Override
public void onProgressChanged(SeekBar seekBar, int progress,
    boolean fromUser) 
{
    tv.setText(String.valueOf(progress));
}

当我们移动 SeekBar 的滑块时,会调用 onProgressChanged() 方法。progress 参数是 SeekBar 的当前值。默认范围是 0..100。我们将 SeekBar 的当前值设置为 TextView 小部件。

SeekBar widget
图示:SeekBar 小部件

在本章的 Android 开发教程中,我们已经介绍了 SeekBar 小部件。