我正在编写一个代码块,我以编程方式创建c
来捕获百分比。然后百分比显示在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
值根据拇指位置而改变。最大百分比为100%,最小值为0%。
我还想在TextView
上设置onClickListener
,并根据输入的值更新TextView
的位置,以便输入更准确的值。我的数据载体中的值Pebble,是一个浮点数,因为我希望允许SeekBar
个数字。
任何帮助都将不胜感激。
此致
欧文
答案 0 :(得分:5)
首先,您应该设置最大进度:
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进度,您可以在EditText中添加TextWatcher
<强>更新强> 对于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) {}
});
答案 1 :(得分:0)
您将需要使用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值,因此您必须先将float值转换为整数。