在Android中创建SeekBar位置弹出窗口

时间:2011-06-29 18:54:28

标签: android seekbar

我的应用程序中有一个SeekBar,我希望它的行为方式是当用户拖动'拇指'时,弹出窗口出现在拇指上方(并在拖动拇指时跟随它),弹出窗口显示SeekBar的相应位置(或位置可能代表的任何其他文本)。

有什么建议吗?

5 个答案:

答案 0 :(得分:0)

拇指是一个可绘制的,因此解决方案可能是将拇指设置为包含拇指和弹出文本的drawable。这意味着您需要滑块上每个可能值的可绘制/图标,并在每次值更改时更新它。环顾四周,我发现了这一点,这表明当他们需要文字时,其他人就这样了:Convert String to Drawable

答案 1 :(得分:0)

我在搜索栏后面找到的弹出式解决方案是将textview放在搜索栏正上方的相对布局中。然后,在seekbar的onProgressChange中,使用

相应地设置textView的左边距
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(widht, height)
params.setLeftMargin(margin)

效果很好,有些调整!

欢呼声

答案 2 :(得分:0)

这一定是迟到但是我这样做了。

通过获得拇指的界限。并在seekbar的progressChanged上设置textview的x

  @Override
 public void onProgressChanged(SeekBar seekBar, int progress,
    boolean fromUser) {

    mDistance.setText("" + AppConstants.getDistance() + " miles");
   //Get the thumb bound and get its left value
    int x = mSeekBar.getThumb().getBounds().left;
         //set the left value to textview x value
    mDistance.setX(x);
  }

答案 3 :(得分:0)

查看此blog

@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
   // TODO Auto-generated method stub
        RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(
        RelativeLayout.LayoutParams.WRAP_CONTENT,
        RelativeLayout.LayoutParams.WRAP_CONTENT);
        p.addRule(RelativeLayout.ABOVE, seekBar.getId());
        Rect thumbRect = bar.getSeekBarThumb().getBounds();
        p.setMargins(
        thumbRect.centerX(),0, 0, 0);
        textView.setLayoutParams(p);
        textView.setText(String.valueOf(progress));
    }
  });
 }
}

答案 4 :(得分:0)

以下是所选答案的Kotlin版本和更多细节

override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
    txtSeekMonthsPopup.text = progress.toString()
    val params: RelativeLayout.LayoutParams = 
    txtSeekMonthsPopup.layoutParams as RelativeLayout.LayoutParams
    val existingMargin = params.marginStart
    params.marginStart = (seekBar?.thumb?.bounds?.left?: existingMargin) + 20 // 20 makes the text view more centered on the thumb
}