Режим контекстного действия, наложенный поверх android.support.v7.widget.Toolbar, кажется, не фильтрует касания по всей его ширине, но позволяет касаниям «проваливаться» к (невидимым) виджетам на панели инструментов.
Моя панель инструментов содержит настраиваемый виджет (одно из объявленных преимуществ панели инструментов). У меня есть режим контекстного действия, предназначенный для наложения панели инструментов, и он полностью ее скрывает. Однако, когда я прикасаюсь к тому месту, где располагался (теперь скрытый) пользовательский виджет, прикосновение проходит к нему. Интересно, это ошибка/оплошность, но, возможно, я не уловил это правильно, или мои ожидания могут быть высокими. Я предполагаю, что касание не прошло бы, если бы что-то было на оверлее контекстного действия в месте скрытого пользовательского компонента.
Я тестирую это на Kitkat.
Вот пример кода:
MainActivity.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.actionbar_toolbar);
setSupportActionBar(toolbar);
TextView barTextView = (TextView) toolbar.findViewById(R.id.textview_bar);
barTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "Bar TextView clicked", Toast.LENGTH_SHORT).show();
}
});
mActionModeCallback = new ActionModeCallback();
TextView mainTextView = (TextView) findViewById(R.id.textview_main);
mainTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "Main TextView clicked", Toast.LENGTH_SHORT).show();
if (mActionMode != null) {
return;
}
getSupportActionBar().startActionMode(mActionModeCallback);
}
});
}
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
android:id="@+id/actionbar_toolbar"
android:layout_height="?attr/actionBarSize"
android:layout_width="match_parent"
android:background="?attr/colorPrimary"
app:theme="@style/ThemeOverlay.AppCompat.ActionBar">
<TextView
android:id="@+id/textview_bar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="Bar"
android:textColor="#FF0000"/>
</android.support.v7.widget.Toolbar>
<TextView
android:id="@+id/textview_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="SomeTextToClick"/>
</LinearLayout>
styles.xml
<resources>
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
<item name="windowActionModeOverlay">true</item>
</style>
</resources>
Я также попытался настроить режим действия со следующей альтернативой, но поведение было таким же:
Toolbar toolbar = (Toolbar) MainActivity.this.findViewById(R.id.actionbar_toolbar);
mActionMode = toolbar.startActionMode(mActionModeCallback);
На данный момент я могу думать только о том, чтобы явно отключить пользовательский компонент всякий раз, когда включается режим контекстного действия, или каким-то образом заполнить контекстную панель действий невидимым мусором, чтобы более серьезно скрыть панель инструментов.
Несколько скриншотов ниже.
Прежде чем нажимать что-либо:
После нажатия «SomeTextToClick» — режим контекстного действия теперь включен, и текст на панели инструментов скрыт, но в этот момент я могу щелкнуть в центре контекстной панели действий, и щелчок обрабатывается слушателем на «Панель " TextView на панели инструментов:
Кто-нибудь может помочь?