如何在辅助功能模式下将焦点设置在Thumb for Range Seek Bar上?

时间:2016-08-11 21:05:37

标签: android seekbar rangeseekbar

我有一个custom Range Seek Bar,它有2个自定义拇指(最大和最小),用于设置搜索栏的范围。一切都按预期正常工作,但是当我进入辅助功能模式时,焦点会出现在搜索栏范围内,这是设备的默认行为。

到目前为止我尝试过:

  • 尝试从SeekBar类获取Thumb视图,并在焦点应该到达搜索栏时强制访问。
  • 使用thumb.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);强制关注搜索栏的拇指

以及

thumb.setFocusable(true);
thumb.setFocusableInTouchMode(true);

但目前尚未取得积极成果。

我想要的是专注于Thumb而不是Seekbar本身。

任何建议都会非常有用。

1 个答案:

答案 0 :(得分:0)

int preMin = -1;
 int preMax = -1;

final RangeSeekBar<Integer> seekBar = new RangeSeekBar<Integer>(this);
        seekBar.setRangeValues(0, 100);
//setNotifyWhileDragging is important method to achive this functionality
        seekBar.setNotifyWhileDragging(true);

        seekBar.setOnRangeSeekBarChangeListener(new RangeSeekBar.OnRangeSeekBarChangeListener<Integer>() {
            @Override
            public void onRangeSeekBarValuesChanged(RangeSeekBar<?> bar, Integer minValue, Integer maxValue) {
                int diff = maxValue - minValue;
                if (diff == 39 || diff < 40) {
                    bar.setEnabled(false);
                    if(minValue != preMin){
                        seekBar.setSelectedMinValue(preMin);
                    }
                    else if(maxValue != preMax){
                        seekBar.setSelectedMaxValue(preMax);
                    }
                    AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this);
                    alert.setNegativeButton(getResources().getString(android.R.string.ok), new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.dismiss();
                            seekBar.setEnabled(true);
                        }
                    });
                    alert.setCancelable(false);
                    alert.setMessage(Html.fromHtml("You cant move below 40!!")).show();

                } else {
                    preM`enter code here`in = minValue;
                    preMax = maxValue;
                }
            }
        });