Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
just_moment
0 / 0 / 0
Регистрация: 25.03.2012
Сообщений: 38
#1

При долгом нажатии вывести контекстное меню - Android

17.12.2013, 23:23. Просмотров 1026. Ответов 2
Метки нет (Все метки)

Здравствуйте, подскажите, пожалуйста, как сделать так, чтобы при долгом нажатии на адресную строку, выводилось контекстное меню. Браузер отображается через компонент WebView.

BrowserActivity.java
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
public class BrowserActivity extends Activity {
WebView webview;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.browser);
 
    WebView webView = (WebView) findViewById(R.id.webView);
    
    //Uri data = getIntent().getData();
    //webView.loadUrl(data.toString());
    //webView = (WebView) findViewById(R.id.webview);
    
    // включаем поддержку JavaScript
    webView.getSettings().setJavaScriptEnabled(true);
    // указываем страницу загрузки
    webView.loadUrl("about:blank"); 
    WebView webview = (WebView) findViewById(R.id.webView);
    registerForContextMenu(webview);
  // webView.setWebViewClient(new HelloWebViewClient());
  }
  // чтобы ссылки открывались внутри WebView
  private class HelloWebViewClient extends WebViewClient 
  {
      @Override
      public boolean shouldOverrideUrlLoading(WebView view, String url) 
      {
          view.loadUrl(url);
          return true;
      }
  }
  
  @Override
  public void onCreateContextMenu(ContextMenu menu, View v,
           ContextMenuInfo menuInfo) {
           MenuInflater inflateLayout = getMenuInflater();
           inflateLayout.inflate(R.menu.items, menu);
          super.onCreateContextMenu(menu, v, menuInfo);
         }  
         public boolean onContextItemSelected(MenuItem item) {
           switch (item.getItemId()) {
           case R.id.add:
            Toast.makeText(this, "Выбран пункт Добавить в коллекцию", 1000).show();
            showDialog(1);
               break;
              case R.id.back:
            Toast.makeText(this,"Вы вернулись к предыдущему экрану", 1000).show();
            break;
          }
           return super.onOptionsItemSelected(item);
         } 
         
         @Override
         protected Dialog onCreateDialog(int id) {
             return DialogFactory.getDialogById(1, this);
         }
     
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2013, 23:23     При долгом нажатии вывести контекстное меню
Посмотрите здесь:

Android Контекстное меню вместо опционального
Android ListView и контекстное меню
Android контекстное меню на ExpandableListView
Android ListView: сбивается содержимое ImageView элемента при скроллинге + как сделать выделение пункта списка при нажатии?
Android Как изменить цвет пункта ListView при нажатии на него и сохранять его цвет при проматывании списка?
Android Ошибка при запуске AsyncTask при нажатии на пункт ActionBar
Android Контекстное меню в ListView
При нажатии на пункт меню открыть новое активити Android
Android Ошибка при нажатии
Android Как показать ProgressDialog при долгом построении UI?
Android При нажатии на элемент ListView вывести новое Activity с информацией об этом элементе
Android Контекстное меню не работает

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
18.12.2013, 01:58     При долгом нажатии вывести контекстное меню #2
Java
1
2
3
4
5
6
.setOnLongClickListener(new OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                return false;
            }
        });
just_moment
0 / 0 / 0
Регистрация: 25.03.2012
Сообщений: 38
18.12.2013, 20:31  [ТС]     При долгом нажатии вывести контекстное меню #3
Спасибо большое. Вроде должно работать правильно, но этого не происходит. Может я что то не так понимаю или делаю. Должно быть (изображение context_ment(true)), а выводит (изображение context_menu). Подскажите, пожалуйста, что не так.

BrowserActivity.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import android.app.Activity;
import android.app.Dialog;
import android.net.Uri;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
import android.view.ContextMenu;
import android.view.KeyEvent;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnLongClickListener;
 
 
public class BrowserActivity extends Activity {
WebView webview;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.browser);
 
    WebView webView = (WebView) findViewById(R.id.webView);
    
    //Uri data = getIntent().getData();
    //webView.loadUrl(data.toString());
    //webView = (WebView) findViewById(R.id.webview);
    
    // включаем поддержку JavaScript
    webView.getSettings().setJavaScriptEnabled(true);
    // указываем страницу загрузки
    webView.loadUrl("about:blank"); 
    WebView webview = (WebView) findViewById(R.id.webView);
    registerForContextMenu(webview);
  
  webview.setOnLongClickListener(new OnLongClickListener() {
      @Override
      public boolean onLongClick(View v) {
          return false;
      }
  });
  }
  
  @Override
  public void onCreateContextMenu(ContextMenu menu, View v,
           ContextMenuInfo menuInfo) {
           MenuInflater inflateLayout = getMenuInflater();
           inflateLayout.inflate(R.menu.items, menu);
          super.onCreateContextMenu(menu, v, menuInfo);
         }  
         public boolean onContextItemSelected(MenuItem item) {
           switch (item.getItemId()) {
           case R.id.add:
            Toast.makeText(this, "Выбран пункт Добавить в коллекцию", 1000).show();
            showDialog(1);
               break;
              case R.id.back:
            Toast.makeText(this,"Вы вернулись к предыдущему экрану", 1000).show();
            break;
          }
           return super.onOptionsItemSelected(item);
         } 
         
         @Override
         protected Dialog onCreateDialog(int id) {
             return DialogFactory.getDialogById(1, this);
         }
     
 
}
DialogFactory.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
public class DialogFactory {
 
    public static int DIALOG_ALERT = 0;
 
    /**
     * Фабричный метод возвращающий
     * диалог по его коду
     *
     * @param id      код диалога
     * @param context
     * @return диалог соответствующий коду
     */
    public static Dialog getDialogById(int id, final Context context) {
        Dialog dialog = null;
        switch (id) {
            case 1:
                dialog = createInpuAler(context);
                break;
        }
 
        return dialog;
    }
 
    private static Dialog createInpuAler(final Context context) {
        Dialog dialog = null;
 
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 
        View layout = inflater.inflate(R.layout.dialog, null);
 
        final EditText address = (EditText) layout.findViewById(R.id.address);
        boolean d = address.requestFocus();
        Log.e("myaddress", new Boolean(d).toString()); //возвращает true
        
        
        final EditText comment = (EditText) layout.findViewById(R.id.comment);
        boolean c = comment.requestFocus();
        Log.e("mycomment", new Boolean(c).toString());
 
        DialogInterface.OnClickListener onClickListener = new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
             String input = address.getText().toString();
                Toast.makeText(context, input, Toast.LENGTH_SHORT).show();
            String com = comment.getText().toString();
            Toast.makeText(context, com, Toast.LENGTH_SHORT).show();
            }
        };
 
        dialog = builder.setPositiveButton("Добавить", onClickListener).setView(layout).create();
 
        return dialog;
    }
}
Миниатюры
При долгом нажатии вывести контекстное меню   При долгом нажатии вывести контекстное меню  
Yandex
Объявления
18.12.2013, 20:31     При долгом нажатии вывести контекстное меню
Ответ Создать тему
Опции темы

Текущее время: 21:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru