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

Custom Menu - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android onClick и onLongClick у WebView http://www.cyberforum.ru/android-dev/thread908367.html
Собственно как научить WebView обрабатывать эти 2 события?
Android Работа с картинками так получаю координаты нужного квадратика, где x и y - координаты центра public String getSelectedRect() { return String.valueOf(x-75)+";"+String.valueOf(y-75)+";"+String.valueOf(x+75)+";"+String.valueOf(y+75);//left; top; right; bottom } так пытаюсь ставить этот квадратик Rect rect = new... http://www.cyberforum.ru/android-dev/thread908301.html
Загрузка файла в файловую систему эмклятора Android
Как загрузить файл в систему? жму на stdcard, потом push fili onto device, потом идет полоса загрузка файла и вылет ошибок в логкат transfer error: Read-only file system Failed to push selection: Read-only file system
Получить количество строк в TextView (ListView) Android
привет всем. уже очень давно никак не могу получить количество строк в TextView который находится в ListView. каждый итем - TextView. использую не стандартный адаптер, а делаю свой. вот как это происходит класс Items: public class Item { String text1;
Android Получить строковое представление нажатой клавиши http://www.cyberforum.ru/android-dev/thread908046.html
Несколько дней назад начал изучать android , первое что пришло в голову- написать службу-кейлогер, но вот никак не могу найти метод который по keycode клавиши определят что это за клавиша, те например keykode = 11 а я бы получал string klavisha = unknowmethod(keykode) (="F")
Android Yandex Map Kit android Добрый день. Хочу написать приложение для android, использующее карту Яндекс. Скачал библиотеку, документацию и пример кода: https://github.com/yandexmobile/yandexmapkit-android Не могу запустить пример. А надо-то всего, чтобы запустить пример, согласно официальному сайту: "Данные проекты уже настроены для работы в среде Eclipse подробнее

Показать сообщение отдельно
Chernoff20
0 / 0 / 0
Регистрация: 06.05.2013
Сообщений: 28

Custom Menu - Android

21.06.2013, 01:10. Просмотров 471. Ответов 0
Метки (Все метки)

Здравствуйте. Пробую по примеру сделать своё меню, вот коды
Главная активити
Кликните здесь для просмотра всего текста
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package com.authorwjf;
 
import java.util.ArrayList;
import com.authorwjf.CustomMenu.OnMenuItemSelectedListener;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.Gravity;
import android.view.KeyEvent;
import android.widget.Toast;
 
public class Demo extends Activity implements OnMenuItemSelectedListener {
    
    private CustomMenu mMenu;
    public static final int MENU_ITEM_1 = 1;
    public static final int MENU_ITEM_2 = 2;
    public static final int MENU_ITEM_3 = 3;
    public static final int MENU_ITEM_4 = 4;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        mMenu = new CustomMenu(this, this, getLayoutInflater());
        mMenu.setHideOnSelect(true);
        mMenu.setItemsPerLineInPortraitOrientation(4);
        mMenu.setItemsPerLineInLandscapeOrientation(4);
 
        loadMenuItems();
    }
 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
        if (keyCode == KeyEvent.KEYCODE_MENU) {
            doMenu();
            return true; //always eat it!
        }
        return super.onKeyDown(keyCode, event); 
    } 
    
    private void loadMenuItems() {
 
        ArrayList<CustomMenuItem> menuItems = new ArrayList<CustomMenuItem>();
        CustomMenuItem cmi = new CustomMenuItem();
        cmi.setCaption("Item 1");
        cmi.setId(MENU_ITEM_1);
        menuItems.add(cmi);
        cmi = new CustomMenuItem();
        cmi.setCaption("Item 2");
        cmi.setId(MENU_ITEM_2);
        menuItems.add(cmi);
        cmi = new CustomMenuItem();
        cmi.setCaption("Item 3");
        cmi.setId(MENU_ITEM_3);
        menuItems.add(cmi);
        cmi = new CustomMenuItem();
        cmi.setCaption("Item 4");
        cmi.setId(MENU_ITEM_4);
        menuItems.add(cmi);
        if (!mMenu.isShowing())
        try {
            mMenu.setMenuItems(menuItems);
        } catch (Exception e) {
            AlertDialog.Builder alert = new AlertDialog.Builder(this);
            alert.setTitle("Egads!");
            alert.setMessage(e.getMessage());
            alert.show();
        }
    }
 
    private void doMenu() {
        if (mMenu.isShowing()) {
            mMenu.hide();
        } else {
            mMenu.show(findViewById(R.id.any_old_widget));
        }
    }
 
    @Override
    public void MenuItemSelectedEvent(CustomMenuItem selection) {
        Toast t = Toast.makeText(this, "You selected item #"+Integer.toString(selection.getId()), Toast.LENGTH_SHORT);
        t.setGravity(Gravity.CENTER, 0, 0);
        t.show();
    }
}

Активити с пунктами меню
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.authorwjf;
 
public class CustomMenuItem {
 
    private String mCaption = null;
    private int mImageResourceId = -1;
    private int mId = -1;
    
    public void setCaption(String caption) { mCaption =caption; }
 
    public String getCaption() { return mCaption; }
 
    public void setImageResourceId(int imageResourceId) { mImageResourceId = imageResourceId; }
 
    public int getImageResourceId() { return mImageResourceId;  }
 
    public void setId(int id) { mId = id; }
 
    public int getId() { return mId; }
    
}

Активити с самим меню
Кликните здесь для просмотра всего текста
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package com.authorwjf;
 
import java.util.ArrayList;
import android.content.Context;
import android.graphics.Color;
import android.graphics.Typeface;
import android.view.Display;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.view.WindowManager.LayoutParams;
import android.widget.PopupWindow;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
 
public class CustomMenu {
 
    private ArrayList<CustomMenuItem> mMenuItems;
    private OnMenuItemSelectedListener mListener = null;
    private Context mContext = null;
    private LayoutInflater mLayoutInflater = null;
    private PopupWindow mPopupWindow = null;
    private boolean mIsShowing = false;
    private boolean mHideOnSelect = true;
    private int mRows = 0;
    private int mItemsPerLineInPortraitOrientation = 3;
    private int mItemsPerLineInLandscapeOrientation = 6;
    
    public interface OnMenuItemSelectedListener {
        public void MenuItemSelectedEvent(CustomMenuItem selection);
    }
 
    public boolean isShowing() { return mIsShowing; }
 
    public void setHideOnSelect(boolean doHideOnSelect) { mHideOnSelect = doHideOnSelect; } 
 
    public void setItemsPerLineInPortraitOrientation(int count) { mItemsPerLineInPortraitOrientation = count; }
 
    public void setItemsPerLineInLandscapeOrientation(int count) { mItemsPerLineInLandscapeOrientation = count; }
 
    public synchronized void setMenuItems(ArrayList<CustomMenuItem> items) throws Exception {
        if (mIsShowing) {
            throw new Exception("Menu list may not be modified while menu is displayed.");
        }
        mMenuItems = items;
    }
 
    public CustomMenu(Context context, OnMenuItemSelectedListener listener, LayoutInflater lo) {
        mListener = listener;
        mMenuItems = new ArrayList<CustomMenuItem>();
        mContext = context;
        mLayoutInflater = lo;
    }
 
    public synchronized void show(View v) {
        mIsShowing = true;
        boolean isLandscape = false;
        int itemCount = 4;
        if (itemCount<1) return; //нет пунктов меню для показа
        if (mPopupWindow != null) return; //всегда показывает
        Display display = ((WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
        if (display.getWidth() > display.getHeight()) isLandscape = true;
        View mView= mLayoutInflater.inflate(R.layout.custom_menu, null);
        mPopupWindow = new PopupWindow(mView,LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT, false);
        mPopupWindow.setAnimationStyle(android.R.style.Animation_Dialog);
        mPopupWindow.setWidth(LayoutParams.WRAP_CONTENT);
        mPopupWindow.showAtLocation(v, Gravity.BOTTOM|Gravity.RIGHT, 0, 0);
        /*
        int divisor = mItemsPerLineInPortraitOrientation;
        if (isLandscape) divisor = mItemsPerLineInLandscapeOrientation;
        int remainder = 0;
        if (4 < divisor) {
            mRows = 1;
            remainder = 4;
        } else {
            mRows = (4 / divisor);
            remainder = 4 % divisor;
            if (remainder != 0) mRows++;
        }
        */
        TableLayout table = (TableLayout)mView.findViewById(R.id.custom_menu_table);
        table.removeAllViews();
        for (int i=0; i < 4; i++) {
            TableRow row = null;
            TextView tv = null;
            row = new TableRow(mContext);
            row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
            
            for (int j=0; j< 4; j++) {
                if (i*4+j >= 4) break;
                final CustomMenuItem cmi = mMenuItems.get(i*4+j);
                View itemLayout = mLayoutInflater.inflate(R.layout.custom_menu_item, null);
                tv = (TextView)itemLayout.findViewById(R.id.custom_menu_item_caption);
                tv.setText(cmi.getCaption());
                itemLayout.setOnClickListener( new OnClickListener() {
                   @Override
                   public void onClick(View v) {
                        mListener.MenuItemSelectedEvent(cmi);
                        if (mHideOnSelect) hide();
                   }
                });
                row.addView(itemLayout);
            }           
            table.addView(row);
       }     
    }
 
    public synchronized void hide() {
        mIsShowing = false;
        if (mPopupWindow != null) {
            mPopupWindow.dismiss();
            mPopupWindow = null;
        }
        return;
    }
}

Разметка пункта меню
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:clickable="true"
    android:gravity="center"
    android:orientation="horizontal"
    android:padding="4dip" >    
 
    <TextView
        android:id="@+id/custom_menu_item_caption"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textColor="#ffffff"
        android:textSize="12sp" />
 
</LinearLayout>

Разметка всего меню
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:clickable="true"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:orientation="vertical" >
 
    <TableLayout
        android:id="@+id/custom_menu_table"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:stretchColumns="*" >
 
    </TableLayout>
 
</LinearLayout>


В общем сейчас это меню представляет собой разметку в виде одной строки и четырех столбцов, они я так понимаю создаются динамически, так вот мой вопрос в том, как сделать, чтобы был один столбец, а строк 4 ? Чтоб это меню стало похоже на меню из старших версий.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru