Это очень распространенная проблема, возникающая из-за непонимания работы :nth-child()
и :nth-of-type()
. К сожалению, в настоящее время нет решения на основе селектора, поскольку селектор не обеспечивает способ сопоставления n-го дочернего элемента, который соответствует произвольному селектору на основе шаблона, такого как нечетные, четные или любые an+b
, где a != 1
и b != 0
.
Это также означает, что если все дочерние элементы одного и того же родителя имеют один и тот же тип элемента, например, в случае тела таблицы, единственными дочерними элементами которого являются На самом деле все простые селектора в данном соединении селектор, включая псевдоклассы, такие как Это также подразумевает, что нет понятия порядка среди простых селекторов в каждом отдельном селекторе 1, что означает, например, следующие два селектора эквивалентны: При переводе на английский язык оба означают: Выберите любой элемент (вы заметите, что мое использование неупорядоченный список здесь, просто для того, чтобы управлять точкой.) Поскольку в настоящее время нет чистого решения CSS, вам придется использовать скрипт для фильтрации элементов и соответственно применять стили или дополнительные имена классов. Например, следующее обходное решение, использующее jQuery (предполагается, что в таблице есть только одна группа строк, заполненная элементами С соответствующим CSS: Если вы используете автоматические инструменты тестирования, такие как Selenium или обрабатываете HTML с помощью таких инструментов, как lxml, многие из этих инструментов позволяют XPath в качестве альтернативы: Другие решения, использующие разные технологии, оставил в качестве упражнения читателю; это всего лишь краткий, надуманный пример для иллюстрации. Для чего это стоит, есть предложение для расширения к Селектор, в котором для фильтрации совпадений предоставляется в качестве аргумента (Проницательный читатель сразу заметит, что это должно быть Конечно, будучи новым предложением в новая спецификация, это, вероятно, не увидит реализацию до нескольких лет в будущем. В то же время вам придется придерживаться сценария, как указано выше. 1 Если вы укажете тип или универсальный селектор, он должен быть первым. Однако это не меняет того, как работают селекторы. это не что иное, как синтаксический приступ. 2 Первоначально это было предложено как :nth-child()
псевдокласса подсчитывает элементы среди всех всех их братьев и сестер под одним и тем же родителем. Он не учитывает только братьев и сестер, которые соответствуют остальной части селектора. Аналогично, псевдо-класс :nth-of-type()
считает, что siblings используют один и тот же тип элемента, который относится к имени тега в HTML, а не к остальной части селектора. tr
или элемент списка, единственными дочерними элементами которого являются li
, тогда :nth-child()
и :nth-of-type()
будут вести себя одинаково, т. е. для каждого значения an+b
, :nth-child(an+b)
и :nth-of-type(an+b)
будут соответствовать одному и тому же набору элементов. :nth-child()
и :not()
, работают независимо друг от друга , вместо того, чтобы смотреть на подмножество элементов, которые сопоставляются остальными селектора.
tr
, который соответствует всем следующим независимым условиям: table
, который имеет класс «myClass». tr
): $('table.myClass').each(function() {
// Note that, confusingly, jQuery's filter pseudos are 0-indexed
// while CSS :nth-child() is 1-indexed
$('tr.row:even').addClass('odd');
});
table.myClass tr.row.odd {
...
}
//table[contains(concat(' ', @class, ' '), ' myClass ')]//tr[contains(concat(' ', @class, ' '), ' row ')][position() mod 2)=1]
:nth-child()
нотации , которое должно быть добавлено к Селекторы уровня 4 для конкретной цели выбора каждого n-го дочернего элемента, соответствующего данному селектору.2 :nth-child()
, снова из-за того, как селектора работают независимо от друг друга в последовательности, продиктованной существующим синтаксисом селектора. Итак, в вашем случае это будет выглядеть так: table.myClass tr:nth-child(odd of .row)
:nth-child(odd of tr.row)
вместо этого, поскольку простые селектор tr
и :nth-child()
работают независимо друг от друга. Это одна из проблем с функциональными псевдоклассами, которые принимают селекторы, банку червей, которую я предпочитаю не открывать посреди этого ответа. Вместо этого я собираюсь перейти к предположению что большинство сайтов не будут иметь каких-либо других элементов, кроме элементов tr
, как братьев и сестер друг друга в теле таблицы, что сделает любой вариант функционально эквивалентным.) :nth-match()
, однако, поскольку оно по-прежнему считает элемент относительным только для его братьев и сестер, а не для каждого другого элемента, который соответствует данному селектору, он с тех пор, как с 2014 года был перепрофилирован как расширение существующего :nth-child()
.
Наконец, я ответил на свой вопрос:
Пользовательский интерфейс извлечения (то есть режим полноэкранного редактирования) может быть отключен в тот момент, когда подключено входное соединение:
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI;
// etc.
}
Ответ выше помог мне разобраться с решением для динамически добавленных EditTexts:
editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
Я знаю, что это немного поздно, но для тех, кто все еще интересуется, вот мое решение: в моем случае у меня была ландшафтная активность, содержащая EditText наверху, и мне нужно было реализовать функцию автозаполнения в этой операции поиска, которая перекрывала клавиатуру, вызвала проблему, которую пользователь не смог увидеть в результате работы RecyclerView. Итак, у меня был этот EditText в моем макете:
<EditText
android:layout_width="match_parent"
android:layout_height="?actionBarSize"
android:id="@+id/main_search_et"
android:imeOptions="actionSearch|flagNoExtractUi"
android:inputType="text" />
Приветствия!
Вы можете вызвать, чтобы скрыть мягкую клавиатуру и очистить фокус от searchview.
public void hideKeyboard(View view) {
InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
super.clearFocus();
Кроме того, если вы хотите объединить несколько программных модулей imeOptions, вы можете использовать | синтаксис.
Например, чтобы отключить полноэкранное редактирование в ландшафте и заменить клавишу «Далее» на «ОК» (ACTION_DONE) на клавиатуре, вы можете использовать:
editText.setImeOptions(EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI);
добавьте свойство android:imeOptions="flagNoExtractUi"
к каждому EditText
в вашем файле XML
.
Для этого просто перейдите к действию xml и вставьте android:imeOptions="flagNoExtractUi"
в свой код. Хм довольно просто - но где hac его нужно вставить? Посмотрите на код примера activity xml и посмотрите на EditText:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<EditText
android:imeOptions="flagNoExtractUi"
android:id="@+id/etTextInAct"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10" >
<requestFocus />
</EditText>
</LinearLayout>
Если вы хотите больше настроек для клавиатуры, см. http://developer.android.com/guide/topics/ UI / управления / text.html
Для достижения этой функции используйте android:imeOptions="flagNoFullscreen"
.
Если вы изменяете IME напрямую, вы можете помешать ему когда-либо отображать ExtractedView, переопределив onUpdateExtractingVisibility
:
@Override
public void onUpdateExtractingVisibility(EditorInfo ei) {
ei.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI;
super.onUpdateExtractingVisibility(ei);
}
Вы можете использовать:
android:imeOptions="flagNoFullscreen"
в своем edittext
outAttrs.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI;
– ObsidianX 4 December 2012 в 02:31