android - Seekbars 和 EditTexts

标签 android android-edittext seekbar

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

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

<p></p>

<p><code><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></code>
</p>
搜索栏和 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 更改时进行更新。

最佳答案

我对 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 模型中做到这一点。

关于android - Seekbars 和 EditTexts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3781885/

相关文章:

android - Google map Android API v2 - 简单的 map 应用程序崩溃

android - 如何从 Android 中的 SQLite 中获取记录

android - 删除 EditText 和 TextView 之间的空白

android - 如何让 Edittext(多行)在顶部位置可绘制

android - 如何清除方向更改时的 EditText 错误状态

java - 为什么 getActionView() 返回 null

java - 为什么要将多个接口(interface)放在一个 Android 应用程序的 Java 文件中?

android - 自动调整 SeekBars Android

android - Seekbar 在 RecyclerView 中自行改变值

Android:自定义 SeekBar 图层列表未按预期工作