Невозможно перетащить кнопку поиска в scrollview

Я прошу прощения, если на этот вопрос был дан ответ в другом месте – я не мог найти никого, кто был бы в этом случае с такой же проблемой.

Я добавил SeekBar в RelativeLayout, который находится внутри вложенного ScrollView. Тем не менее, я не могу перетащить большой палец стрелки. Я могу щелкнуть по его пути, чтобы изменить его значение, но я не могу его перетащить. Любая помощь будет оценена по достоинству.

Мой XML выглядит так:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/containerView" android:background="@android:color/transparent" android:padding="0dip" android:layout_margin="0dip" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent" android:scrollbarStyle="insideOverlay" android:id="@+id/scrollView" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:fillViewport="true"> <HorizontalScrollView android:layout_width="fill_parent" android:layout_height="fill_parent" android:scrollbarStyle="insideInset" android:id="@+id/horizontalScrollView" android:fillViewport="true"> <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/scrollContainer"> </RelativeLayout> </HorizontalScrollView> </ScrollView> </RelativeLayout> 

И моя Java:

 SeekBar thisElement = new SeekBar(getActivity()); thisElement.setEnabled(true); thisElement.setLayoutParams(lp); thisElement.setAlpha(alphaVal); thisElement.setMinimumHeight(elementHeight); final int min = Integer.parseInt(getJsonPropertyValue(tmpJson, "elementSliderMinimum", "0")); int max = Integer.parseInt(getJsonPropertyValue(tmpJson, "elementSliderMaximum", "100")); int def = Integer.parseInt(getJsonPropertyValue(tmpJson, "elementSliderDefault", "50")); thisElement.setMax(max - min); thisElement.setProgress(def - min); thisElement.setTag(elementCounter); thisElement.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { String msg = "onTouch:" + v.getClass().toString(); Log.w("ZZ",msg); return false; } }); thisElement.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { String elementSliderAction = getJsonPropertyValue(tmpJson, "elementSliderAction", ""); if (elementSliderAction.equalsIgnoreCase("changeLabel")) { int labelNumber = -1; String elementSliderLabel = getJsonPropertyValue(tmpJson, "elementSliderLabel", ""); for (int j=0; j<childItems.size(); j++) { BT_item tmpElement = childItems.get(j); if (tmpElement.getItemId().equalsIgnoreCase(elementSliderLabel)) { TextView labelToChange = (TextView)scrollContainer.findViewWithTag(j+1000); String newVal = "" + (progress - min); labelToChange.setText(newVal); } } } else if (elementSliderAction.equalsIgnoreCase("saveToPref")) { String elementSliderPrefName = getJsonPropertyValue(tmpJson, "elementSliderPrefName", ""); String newVal = "" + (progress - min); setPrefString(elementSliderPrefName, newVal); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); scrollContainer.addView(thisElement); 

Я подозреваю, что это связано с тем, как структурирован мой XML-файл, но я не уверен, что такое правильное решение. Иногда я могу заставить его перетащить, но только после того, как вы пытаетесь снова и снова. Кроме того, OnTouchListener правильно идентифицирует его как SeekBar, который касается, когда я пытаюсь перетащить.

попробуй это

 thisElement.setOnTouchListener(new SeekBar.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { int action = event.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: // Disallow ScrollView to intercept touch events. v.getParent().requestDisallowInterceptTouchEvent(true); break; case MotionEvent.ACTION_UP: // Allow ScrollView to intercept touch events. v.getParent().requestDisallowInterceptTouchEvent(false); break; } // Handle Seekbar touch events. v.onTouchEvent(event); return true; } }); 

Вы можете использовать приведенный ниже код

 thisElement.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { scrolview1.setOverScrollMode(ScrollView.OVER_SCROLL_NEVER); return false; } }); 

Он будет работать для вас