2016-04-12 2 views
0

Это может макет XML:Android SeekBar становятся нажимается, когда не потрогать

<RelativeLayout 
    android:id="@+id/seek_bar_wrapper" 
    android:layout_width="match_parent" 
    android:layout_height="200dip"> 

    <SeekBar 
     android:id="@+id/seek_bar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_margin="20dip" 
     android:maxHeight="2dip" 
     android:minHeight="2dip" 
     android:progressDrawable="@drawable/drawable_seekbar_progress" 
     android:thumb="@drawable/drawable_seekbar_thumb" /> 
</RelativeLayout> 

Я установил OnClickListener к RelativeLayout. Странно то, что когда я касаюсь RelativeLayout, SeekBar выполняет, как я нажимаю на него, это большой палец становится доступным при нажатии на него. Я думаю, что это состояние.

Это ошибка и как с этим бороться?

+0

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

ответ

1

ViewGroups, кажется, проходят свое состояние вплоть до своих детей, когда они кликабельны, как показано в этом вопросе: View gets its drawable state (pressed, etc...) from its parent

Это может происходить потому, что вы установили OnClickListener к RelativeLayout.

Моим первым наклонением было бы поставить Button за SeekBar в качестве брата на SeekBar и использовать его для действия OnClick.

Вы также можете переопределить RelativeLayout, и ничего не делать на setPressed

Android: Child elements sharing pressed state with their parent even when duplicateParentState specified

Согласно документации: http://developer.android.com/training/gestures/viewgroup.html

Обработка событий прикосновения в ViewGroup уделяет особое внимание, потому что это общий для ViewGroup иметь детей, которые являются объектами для различных событий касания , чем сама ViewGroup. Чтобы убедиться, что каждый вид правильно принимает события касания, предназначенные для него, переопределите метод onInterceptTouchEvent() .

Похоже, это предполагаемое поведение. Если вы хотите избежать этого поведения, похоже, вам нужно будет переопределить ViewGroup (RelativeLayout) или использовать View, который не является родителем для SeekBar для этого события.