我的应用程序中有一个SeekBar,我希望它的行为方式是当用户拖动'拇指'时,弹出窗口出现在拇指上方(并在拖动拇指时跟随它),弹出窗口显示SeekBar的相应位置(或位置可能代表的任何其他文本)。
有什么建议吗?
答案 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
}