1

我正在开发一个应用程序,我需要用户在其中设置一个包含 30 个值的数组,并使其用户友好且易于使用,我决定使用一系列 SeekBars 和 EditText 小部件。我正在使用 eclipse 并用它来设置布局。

我正在寻找一种有效的方法来设置应用程序,以便在更改 EditText 的值时自动更新 SeekBar 的值,然后在应用程序整数数组中使用相同的值。

<SeekBar android:layout_height="wrap_content" android:layout_width="wrap_content" android:max="255" android:layout_gravity="center_vertical" android:layout_weight="1" android:padding="10dp" android:id="@+id/seekX"></SeekBar> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight=".01" android:minWidth="50sp" android:maxWidth="50sp" android:gravity="center_horizontal" android:padding="10dp" android:layout_marginRight="10dp" android:inputType="number" android:id="@+id/editX"></EditText>

搜索栏和 EditText 字段以相应的方式命名,editX 应与 seekX 匹配,因为 editY 应与 seekY 匹配,依此类推。我还将值存储在 int[] upgradeValues 中。

我还将 SeekBar 的最大值设置为 255,但我需要一种方法来自动将 EditText 字段中设置的任何高于 255 的值更改为 255,类似地,将任何低于 0 的值更改为 0。

基本上我需要一种有效的方法来制作“(ValueOF)seekX = (ValueOf)editX = (ValueOf)upgradeValues[x] >= 0 <= 255”,并且如果 seekX 或 editX 发生更改则更新。

4

1 回答 1

1

我对 Android 开发还是很陌生,所以这个答案不是很具体,但希望它能让你上路。

有几种方法。您可以在搜索栏和更新另一个值的编辑文本上设置更改侦听器(假设您有 EditText t、SeekBar b 和模型中的值:

b.setOnSeekBarChangeListener(new OnSeekBarChangeListener()
    {
        @Override
        public void onProgressChanged(final SeekBar seekBar,
            final int progress,
            final boolean fromUser)
        {
            if (fromUser)
            {
                model = progress;
                updateUI();
            }
        }

        @Override
        public void onStartTrackingTouch(final SeekBar seekBar)
        {

        }

        @Override
        public void onStopTrackingTouch(final SeekBar seekBar)
        {

        }
    });
    t.setOnKeyListener(new View.OnKeyListener()
    {
        @Override
        public boolean onKey(final View v,
            final int keyCode,
            final KeyEvent event)
        {
            model = Integer.parseInt(t.getText().toString());
            updateUI();
            return true;
        }
    });

然后 updateUI() 将类似于:

private void updateUI()
{
    t.setText(model);
    b.setProgress(model);
}

这些是一些疯狂的名字,我显然没有进行错误检查。但你明白了。这可能不是您想要的方式,因为您必须确保捕获用户与每个组件交互的所有不同方式(onKey 可能不足以检测到 EditText 值何时发生变化)。

正确的(MVC)方法是让您的模型(您的 int[])包含该值,并让您的 SeekBar 和 EditText 使用您的模型作为他们的模型。我不知道如何在 Android 的 UI 模型中做到这一点。

于 2011-04-01T19:30:40.040 回答