Узнайте о контекстных меню и длительном взаимодействии с пользователем на Android в этом быстром совете по Android SDK!
Платформа Android предоставляет несколько стандартных меню, которые вы можете использовать в своих приложениях. Контекстное меню появляется, когда пользователи долго нажимают на элементы пользовательского интерфейса, нажимая на элемент и удерживая его, пока не появится меню. Пользователи Android, как правило, привыкли к такому типу взаимодействия, поскольку это стандартно для системных функций, таких как изменение значков на главном экране. Руководство разработчика Android сравнивает контекстное меню с щелчком правой кнопкой мыши на компьютере. Реализация контекстного меню проста и является ключевым компонентом во многих приложениях.
Шаг 1: Откройте или создайте проект
Если у вас есть приложение, с которым вы хотите реализовать контекстное меню, откройте класс Activity, в который вы хотите добавить его. В противном случае создайте новый проект и добавьте в него класс Activity. Исходный код включает в себя всю необходимую обработку, поэтому, если вы не уверены, обратитесь к этому. Если вы создаете новую активность в своем приложении, не забудьте добавить ее в свой файл манифеста следующим образом:
1
|
<activity android:name=».MyLovelyClass»></activity>
|
Измените имя в соответствии с вашим собственным классом.
Шаг 2. Импорт ресурсов Android
Добавьте операторы импорта, необходимые для обработки контекстного меню. Возможно, вам не понадобятся все эти импортированные ресурсы, в зависимости от того, как вы решите реализовать контекстное меню, и ваша IDE может добавить некоторые из них автоматически. Чтобы использовать технику, продемонстрированную в этом руководстве, вашему классу Activity потребуется следующий импорт:
1
2
3
4
5
6
7
8
9
|
import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.TextView;
import android.widget.Toast;
|
Шаг 3: добавление элемента пользовательского интерфейса в длинное нажатие
В макете для своей деятельности включите элемент представления пользовательского интерфейса, который вы хотите, чтобы пользователи могли долго нажимать для контекстного меню. В следующем примере XML-содержимого макета показано, как это сделать, поэтому используйте его, если вы создаете новый проект и можете использовать некоторую помощь:
01
02
03
04
05
06
07
08
09
10
11
|
<LinearLayout xmlns:android=»http://schemas.android.com/apk/res/android»
android:layout_width=»fill_parent»
android:layout_height=»fill_parent»
android:orientation=»vertical»
android:gravity=»center» >
<TextView android:id=»@+id/press»
android:layout_width=»wrap_content»
android:layout_height=»wrap_content»
android:textSize=»30sp»
android:text=»Long-press me» />
</LinearLayout>
|
Вы можете указать своему классу Activity использовать этот макет следующим образом:
1
2
3
4
5
6
|
public class MyLovelyClass extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.lovely_layout);
}
}
|
Измените имя в соответствии с вашим собственным классом. В этом случае файл макета XML сохраняется как «lovely_layout.xml» в папке «res / layout» приложения.
Шаг 4. Создание ресурса меню
Если в вашем пакете приложения нет папки «menu» внутри директории ресурсов «res», создайте ее. Внутри папки меню создайте новый XML-файл для вашего меню и сохраните его с именем по вашему выбору. В этом файле вы определяете элементы, которые будут отображаться в контекстном меню. Вы можете использовать следующий код:
1
2
3
4
5
6
|
<menu xmlns:android=»http://schemas.android.com/apk/res/android»>
<item android:id=»@+id/option1″
android:title=»A Context Option» />
<item android:id=»@+id/option2″
android:title=»Another Context Option» />
</menu>
|
Измените элементы в соответствии с вашим собственным приложением и добавьте больше, если вам нужно.
Шаг 5: Зарегистрируйтесь в контекстном меню
Вам нужно настроить Android на прослушивание длительных нажатий на элементе пользовательского интерфейса, для которого вы хотите предоставить контекстное меню. В методе onCreate вашей деятельности добавьте следующий код, внося изменения в соответствии с подробностями вашего собственного приложения:
1
2
3
4
|
//get a reference to the view for pressing
TextView pressView = (TextView)findViewById(R.id.press);
//register if for context
registerForContextMenu(pressView);
|
Укажите атрибут ID, который вы использовали для своего собственного элемента представления в файле макета XML, где в этом примере используется «нажатие». Это указывает вашему приложению обнаруживать пользователей, длительно нажимающих на указанный элемент просмотра. Когда это происходит, приложение вызывает метод «onCreateContextMenu», в котором вы можете указать ему использовать ресурс контекстного меню.
Шаг 6: Используйте свой ресурс меню
Вы должны сообщить Android, что хотите использовать ресурс меню XML, созданный вами, в качестве контекстного меню для зарегистрированного элемента просмотра. Добавьте следующий метод в свой класс Activity:
1
2
3
4
5
|
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.lovely_context, menu);
}
|
При необходимости измените это, чтобы отразить имя файла, которое вы выбрали для своего XML-файла контекстного меню. В этом примере для демонстрации используется файл меню с именем «lovely_context.xml».
Шаг 7: Реализация длинных нажатий
Ваш класс Activity теперь обнаруживает длительные нажатия на элемент просмотра, но вам все равно нужно определить, что должно происходить при выборе каждого элемента в вашем меню. Добавьте следующий метод в ваш класс:
01
02
03
04
05
06
07
08
09
10
11
12
13
|
public boolean onContextItemSelected(MenuItem item) {
//find out which menu item was pressed
switch (item.getItemId()) {
case R.id.option1:
doOptionOne();
return true;
case R.id.option2:
doOptionTwo();
return true;
default:
return false;
}
}
|
Измените операторы case, чтобы они отражали атрибуты идентификатора, которые вы дали своим элементам меню в файле XML. Оператор switch использует переданный параметр пункта меню, чтобы проверить, какую опцию меню выбрал пользователь. Вы можете включить дополнительную инструкцию case для каждой опции в своем контекстном меню, если вы добавили больше самостоятельно. Внутри каждого оператора код указывает метод, который вызывается, когда пользователь выбирает этот элемент. Теперь вам нужно реализовать методы, указанные в этом операторе.
Шаг 8. Добавьте методы контекста
Определение выделенных методов для каждого параметра контекстного меню обеспечивает хорошую организацию вашего класса Activity, поэтому добавьте каждый из них, включенный в оператор switch. Следующие примеры методов демонстрируют принцип:
1
2
3
4
5
6
7
8
9
|
//method to execute when option one is chosen
private void doOptionOne() {
Toast.makeText(this, «Option One Chosen…», Toast.LENGTH_LONG).show();
}
//method to execute when option two is chosen
private void doOptionTwo() {
Toast.makeText(this, «Option Two Chosen…», Toast.LENGTH_LONG).show();
}
|
Эти методы просто пишут короткое сообщение в интерфейс для демонстрации. В ваших собственных классах вы можете реализовать любую необходимую вам обработку.
Вывод
Ваше приложение теперь имеет код обработки, необходимый для предоставления контекстного меню пользователям, нажимающим и удерживающим выбранный вами элемент просмотра. Ниже приведен полный код действия, и вы можете скачать прикрепленную исходную папку, которая также содержит файлы XML для макета и пунктов меню.
1
|
import android.app.Activity;
|
Если в вашем приложении есть раздел справки или инструкции любого рода, вы можете указать этот пункт в контекстном меню, поскольку ваши пользователи могут не осознавать, что эта функция была предоставлена.
об авторе
Я веб-разработчик / разработчик программного обеспечения и технический / комедийный писатель — подробности смотрите в BeNormal.info . Приложения Nonsense — моя первая попытка разработки под Android. Я написал для многих разных клиентов, включая Smashing Magazine . Мои собственные сайты включают в себя журнал об обмане BrainDeadAir . Следуйте за мной в Twitter @BrainDeadAir или пишите мне на [email protected] .