Android SeekBar:更改值
Android SeekBar: Changing the value
我正在编写一段代码,我在其中以编程方式创建一个 SeekBar
来捕获百分比。然后百分比显示在 TextView
中。我已经编写了在屏幕上显示两者的代码:
public static void pebbleTypeHandler(LinearLayout layout, final TaskSwitcherTask task, PData value)
{
// Create an android seek bar to allow thumb drag
// Have a text view to display the value
Log.v(PebbleTypeHandlerPercentage.class.toString(), "-----> Percentage");
SeekBar seekbar = new SeekBar(task.getParent());
TextView textView = new TextView(task.getParent());
textView.setTextColor(ColorStateList.valueOf(0xFFFFFFFF));
textView.setText(((PPercentage) value).getValue() + "%");
layout.addView(textView);
layout.addView(seekbar);
int id = UtilityMethods.getNextId();
value.getMeta().getDataPebble().setId(id);
textView.setId(id);
id = UtilityMethods.getNextId();
seekbar.setId(id);
Log.v(PebbleTypeHandlerLevel.class.toString(), "-----> TextView ID: " + textView.getId());
Log.v(PebbleTypeHandlerLevel.class.toString(), "-----> SeekBar ID: " + seekbar.getId());
}
我该如何处理 SeekBar
的变化。我希望 TextView
值根据拇指位置而变化。最大百分比为 100%,最小百分比为 0%。
我还想在 TextView
上设置一个 onClickListener
并根据输入的值更新 SeekBar
的位置,以便输入更准确的值。我的数据载体中的值称为 Pebble,是一个浮点数,因为我希望允许 Float
个数字。
如有任何帮助,我们将不胜感激。
此致,
欧文
首先,您应该设置最大进度:
strokeWidthBar.setMax(<your max progress>);
strokeWidthBar.setProgress(0); // Set initial progress value
跟踪SeekBar的变化
seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean b) {
textView.setText(String.valueOf(progress));
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
要从 EditText 更改 SeekBar 进度,您可以将 TextWatcher 添加到您的 EditText
更新
对于 TextWatcher 你可以使用这样的东西:
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// Convert text to integer. Do you already use editText.setInputType(InputType.TYPE_CLASS_NUMBER), don't you?
Integer enteredProgress = Integer.valueOf(s.toString());
seekBar.setProgress(enteredProgress);
}
@Override
public void afterTextChanged(Editable s) {}
});
您将需要使用 SeekBar 对象和 EditText 而不是 TextView,因为 eidttext 用于获取用户输入。
然后,您必须在 EditText 上的 seekBar 和 TextWatcher 上添加 seekbarChangeListener。我举下面的例子。
yourEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//You can set value to seekbar here. obviously after checking if its valid and converting it into int/float.
yourseekBar.setvalue(Integer.valueOf(s));
}
@Override
public void afterTextChanged(Editable s) {
}
});
并添加 seekbarchanged 监听器。
yourseekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean b) {
//convert progress into float if you want but it should be multiple of 10
yourEdittext.setText(progress+"");
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
由于 seekbar 只接受 int 值,因此您必须先将浮点值转换为整数。
我正在编写一段代码,我在其中以编程方式创建一个 SeekBar
来捕获百分比。然后百分比显示在 TextView
中。我已经编写了在屏幕上显示两者的代码:
public static void pebbleTypeHandler(LinearLayout layout, final TaskSwitcherTask task, PData value)
{
// Create an android seek bar to allow thumb drag
// Have a text view to display the value
Log.v(PebbleTypeHandlerPercentage.class.toString(), "-----> Percentage");
SeekBar seekbar = new SeekBar(task.getParent());
TextView textView = new TextView(task.getParent());
textView.setTextColor(ColorStateList.valueOf(0xFFFFFFFF));
textView.setText(((PPercentage) value).getValue() + "%");
layout.addView(textView);
layout.addView(seekbar);
int id = UtilityMethods.getNextId();
value.getMeta().getDataPebble().setId(id);
textView.setId(id);
id = UtilityMethods.getNextId();
seekbar.setId(id);
Log.v(PebbleTypeHandlerLevel.class.toString(), "-----> TextView ID: " + textView.getId());
Log.v(PebbleTypeHandlerLevel.class.toString(), "-----> SeekBar ID: " + seekbar.getId());
}
我该如何处理 SeekBar
的变化。我希望 TextView
值根据拇指位置而变化。最大百分比为 100%,最小百分比为 0%。
我还想在 TextView
上设置一个 onClickListener
并根据输入的值更新 SeekBar
的位置,以便输入更准确的值。我的数据载体中的值称为 Pebble,是一个浮点数,因为我希望允许 Float
个数字。
如有任何帮助,我们将不胜感激。
此致,
欧文
首先,您应该设置最大进度:
strokeWidthBar.setMax(<your max progress>);
strokeWidthBar.setProgress(0); // Set initial progress value
跟踪SeekBar的变化
seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean b) {
textView.setText(String.valueOf(progress));
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
要从 EditText 更改 SeekBar 进度,您可以将 TextWatcher 添加到您的 EditText
更新 对于 TextWatcher 你可以使用这样的东西:
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// Convert text to integer. Do you already use editText.setInputType(InputType.TYPE_CLASS_NUMBER), don't you?
Integer enteredProgress = Integer.valueOf(s.toString());
seekBar.setProgress(enteredProgress);
}
@Override
public void afterTextChanged(Editable s) {}
});
您将需要使用 SeekBar 对象和 EditText 而不是 TextView,因为 eidttext 用于获取用户输入。 然后,您必须在 EditText 上的 seekBar 和 TextWatcher 上添加 seekbarChangeListener。我举下面的例子。
yourEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//You can set value to seekbar here. obviously after checking if its valid and converting it into int/float.
yourseekBar.setvalue(Integer.valueOf(s));
}
@Override
public void afterTextChanged(Editable s) {
}
});
并添加 seekbarchanged 监听器。
yourseekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean b) {
//convert progress into float if you want but it should be multiple of 10
yourEdittext.setText(progress+"");
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
由于 seekbar 只接受 int 值,因此您必须先将浮点值转换为整数。