Форум программистов, компьютерный форум 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... http://www.cyberforum.ru/android-dev/thread908301.html
Загрузка файла в файловую систему эмклятора Программирование Android
Как загрузить файл в систему? жму на stdcard, потом push fili onto device, потом идет полоса загрузка файла и вылет ошибок в логкат transfer error: Read-only file system Failed to push...
Получить количество строк в TextView (ListView) Программирование Android
привет всем. уже очень давно никак не могу получить количество строк в TextView который находится в ListView. каждый итем - TextView. использую не стандартный адаптер, а делаю свой. вот как это...
Программирование Android Получить строковое представление нажатой клавиши http://www.cyberforum.ru/android-dev/thread908046.html
Несколько дней назад начал изучать android , первое что пришло в голову- написать службу-кейлогер, но вот никак не могу найти метод который по keycode клавиши определят что это за клавиша, те...
Программирование Android Yandex Map Kit android Добрый день. Хочу написать приложение для android, использующее карту Яндекс. Скачал библиотеку, документацию и пример кода: https://github.com/yandexmobile/yandexmapkit-android Не могу... подробнее

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

Custom Menu - Программирование Android

21.06.2013, 01:10. Просмотров 482. Ответов 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 ? Чтоб это меню стало похоже на меню из старших версий.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru