我注意到很多人在寻找相同问题的答案,但他们总是有不同的结果而且不完整,我希望有人帮助解释尽可能简单的帮助所有用户。
我现在开始编程Android并希望得到帮助,如下:
我有一个id = value的TextView 和一个ID = seekbar的SeekBar。
希望搜索栏0-200而不是1合1,显示TextView中的值。 并纠正敏感问题是想知道如何把两个按钮+和 - 增加或减少一个。
我代表我所有的大学课程表示感谢。
答案 0 :(得分:2)
在询问这样一般性问题之前,您应该阅读文档。实际上,我想以外行的方式回答这个问题。想想seekbar作为一个简单的传感器。它可以触发像onProgressChanged()这样的事件。意思是,搜索栏的界面可以告诉我们搜索栏进度何时改变。因此,我们可以在Android提供的回调中进行一些操作。所以看看代码,看看这是你在寻找什么。这是我为此问题创建的测试应用程序。
public class SeekbarActivity extends Activity implements SeekBar.OnSeekBarChangeListener {
private SeekBar seekbar;
private TextView value;
private Button plus,minus;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
value = (TextView) findViewById(R.id.value);
seekbar = (SeekBar) findViewById(R.id.seekbar);
plus = (Button) findViewById(R.id.plus);
minus = (Button) findViewById(R.id.minus);
seekbar.setOnSeekBarChangeListener(this);
seekbar.setMax(201);
plus.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {seekbar.setProgress((int)seekbar.getProgress() + 1);}});
minus.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {seekbar.setProgress((int)seekbar.getProgress() - 1);}});
}
@Override
public void onProgressChanged(SeekBar arg0, int progress, boolean fromTouch) {
value.setText(String.valueOf(progress));
}
@Override
public void onStartTrackingTouch(SeekBar arg0) {}
@Override
public void onStopTrackingTouch(SeekBar arg0) {}
}
这是用于此应用程序的XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/value"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Progress" />
<SeekBar
android:id="@+id/seekbar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/plus"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="+" />
<Button
android:id="@+id/minus"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="-" />
</LinearLayout>
如果您对此代码有任何疑问,请随时询问。 顺便说一句,这不是一个代码生成论坛!好像我打破了SOF的一个条款...... :)。
答案 1 :(得分:1)
要收听搜索位置更改,请使用
onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener()
{
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
{
txtProgress.setText(""+progress);
}
});
on +和 - 按钮单击实现onClickListener,在onClick方法中,写
int newProgress=seekBar.getProgress()+10;
seekBar.setProgress(""+newProgress);
答案 2 :(得分:0)
假设这是您想要的UI(非常糟糕的ASCII艺术)
+-------------------+
| Progress bar value|
| TextView |
+-------------------+
+-----+ Progress Bar +-----+
| - | |--------------------------------------|| + |
+-----+ +-----+
实现此目的所需的布局(伪代码)
<RelativeLayout>
<TextView id=progValue
alignHorizontalCenter=true>
<ProgressBar id=progBar
alignHorizontalCenter=true
layout_below=id/progValue
android:max=200>
<Button id=negative
layout_toLeftof=id/progBar>
<Button id=positive
layout_toRightof =id/progBar>
</RelativeLayout>
Progress Bar(伪代码)的监听器
progBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener()
{
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
{
progValue.setText(""+progress);
}
});
按钮监听器(伪代码)
OnClickListener(){
public void onClick(View v) {
if(positive == v){
progBar.setProgress(progBar.getProgress()+1);
}else if (negative == v){
progBar.setProgress(progBar.getProgress()-1);
}
}
}
答案 3 :(得分:0)
在这里你不需要两个不同的按钮来执行增量和放大减少操作。
只需在此处设置开始和结束位置并执行操作,它将按照您的需要执行
试试这段代码......
float discrete=0;
float start=0;
float end=100;
float start_pos=0;
int start_position=0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
start=-10; //you need to give starting value of SeekBar
end=10; //you need to give end value of SeekBar
SeekBar seek=(SeekBar) findViewById(R.id.seekBar1);
seek.setProgress(start_position);
seek.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
Toast.makeText(getBaseContext(), "discrete = "+String.valueOf(discrete), Toast.LENGTH_SHORT).show();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {
// TODO Auto-generated method stub
// To convert it as discrete value
float temp=progress;
float dis=end-start;
discrete=(start+((temp/100)*dis));
}
});
}