我的应用程序中有一个 SeekBar,我希望它的行为是当用户拖动“拇指”时,拇指上方会出现一个弹出窗口(并在拖动拇指时跟随它),并且弹出窗口显示相应的位置SeekBar 的(或该位置可能代表的任何其他文本)。
有什么建议么?
看看这个博客
@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));
}
});
}
}
我在搜索栏之后为这个弹出窗口找到的解决方案是将文本视图放在搜索栏正上方的相对布局中。然后,在 seekbar 的 onProgressChange 中,使用相应的方法设置 textView 的左边距
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(widht, height)
params.setLeftMargin(margin)
效果很好,有一些调整!
干杯
这一定是迟到了,但是我是这样做的。
通过获得拇指的界限。并在 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);
}
拇指是可绘制的,因此解决方案可能是将拇指设置为可绘制的,其中包括拇指和带有文本的弹出窗口。这意味着您需要为滑块上的每个可能值提供一个可绘制/图标,并在每次值更改时更新它。环顾四周,我发现了这一点,这表明其他人在他们的可绘制对象中需要文本时已经采用了这种方式:将字符串转换为可绘制对象
这是所选答案的 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
}