1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/chinasoft5_ohos-FlyoutMenus

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

FlyoutMenus

Проектное описание

  • Название проекта: FlyoutMenus
  • Серия: адаптация и портирование третьих сторон для OpenHarmony
  • Функционал: простой выпадающий меню
  • Состояние портирования: основные функции завершены
  • Различия при вызове: отсутствуют
  • Версия SDK: SDK6
  • Версия DevEco Studio: DevEco Studio 2.2 beta1
  • Базовая версия: Release 0.5.3

Демонстрация работы

Демонстрация работы

Инструкция по установке

  1. В файле build.gradle в корневой директории проекта,
allprojects {
    repositories {
        maven {
            url 'https://s01.oss.sonatype.org/content/repositories/releases/'
        }
    }
}
  1. В файле build.gradle модуля entry,
dependencies {
    implementation('com.gitee.chinasoft_ohos:flyoutmenu:1.0.0')
    ......  
}

Проект можно запустить непосредственно в SDK6 с DevEco Studio 2.2 beta1. Если проект не запускается, удалите файлы .gradle, .idea, build, gradle, build.gradle, создайте новый проект в соответствии со своей версией и скопируйте соответствующие файлы нового проекта в корневую директорию.

Инструкция по использованию

Добавьте пользовательский view в XML следующим образом:

<org.zakariya.flyoutmenu.FlyoutMenuView
            ohos:id="$+id:toolSelectorFlyoutMenu"
            ohos:width="match_content"
            ohos:height="match_content"
            ohos:padding="$float:flyout_menu_button_padding"
            ohos:right_margin="$float:flyout_menu_right_margin"
            hap:fmButtonSize="$float:flyout_menu_button_size"
            hap:fmItemHeight="$float:flyout_menu_item_height"
            hap:fmItemWidth="$float:flyout_menu_item_width"
            hap:fmMenuAnchor="top"
            hap:fmSelectedItemBackgroundColor="@color/toolSelectionBackgroundColor"
            />
```Полный пример использования:

```java
public class EmojiFlyoutMenu {
    
    /**
     * Преобразование Unicode в emoji
     */
    public static String uni2emoji(String unicode16) {
        if (unicode16.length() <= 0) {
            return null;
        }
        BigInteger bi = new BigInteger(unicode16, 16);
        String biemoji = bi.toString(10);
        Integer integer = Integer.valueOf(biemoji);
        String emoji = new String(Character.toChars(integer));
        return emoji;
    }

    public static class MenuItem extends FlyoutMenuView.MenuItem {

        String emojiString;
        Paint paint;
        int position;

        public MenuItem(Context context, int id, String emojiCode, float size, int color, int position) {
            super(context, id);  // type = 1
            this.emojiString = emojiCode;
            this.position = position;

            paint = new Paint();
            paint.setAntiAlias(true);
            paint.setColor(new Color(0xFFA30303));
            paint.setTextSize(96); //(int) size);106
            paint.setStyle(Paint.Style.FILL);
            paint.setTextAlign(Paint.Align.CENTER);
        }

        public String getEmojiCode() {
            return emojiString;
        }

        @Override
        public void onDraw(Canvas canvas, RectFloat bounds, float degreeSelected) {
            canvas.drawText(paint, uni2emoji(emojiString), bounds.getCenter().getPointX(), (bounds.bottom + bounds.top) / 2 + paint.descent() + 5); //uni2emoji(emojiString)
        }
    }

    public static class ButtonRenderer extends FlyoutMenuView.ButtonRenderer {  // Можно установить цвет внешней окружности

        private int emojiCode;
        private String emojiString;
        private Paint paint;
        private Paint paint1;
        private TextPaint textPaint;

        public ButtonRenderer(String emojiCode, float size, int color) {
            super();

            this.setEmojiCode(emojiCode);
            paint1 = new Paint();
            paint1.setColor(new Color(0xFFA30303));

            paint = new Paint();
            paint.setAntiAlias(true);
            paint.setColor(new Color(0xFFA30303));
            paint.setTextSize(96);
            paint.setTextAlign(Paint.Align.CENTER);
            paint.setStyle(Paint.Style.FILL);
        }
    }
}
``````java
public String getEmojiCode() {
    return emojiString;
}

public void setEmojiCode(String emojiCode) {
    this.emojiString = emojiCode;
}

@Override
public void onDrawButtonContent(Canvas canvas, RectFloat buttonBounds, Color buttonColor, float alpha) { // Реализация отрисовки содержимого кнопки
    canvas.drawText(paint, uni2emoji(emojiString), buttonBounds.getCenter().getPointX(), buttonBounds.getCenter().getPointY() + paint.descent() + 10); // можно реализовать
}
}

Чтобы использовать вышеуказанный код:

smileyFlyoutMenu = (FlyoutMenuView) findComponentById(ResourceTable.Id_smileyFlyoutMenu);

String[] emojiCodes = { "1f60a", "1f603", "1f601", "1f602", "1f620", "1f61e", "1f630", "1f624" };

ohos.global.resource.ResourceManager resManager = this.getResourceManager();

float fontSizeInMenu = 0; float fontSizeInButton = 0; int color = 0; try { color = resManager.getElement(ResourceTable.Color_smileyMenuCharColor).getInteger(); fontSizeInMenu = resManager.getElement(ResourceTable.Float_smiley_menu_item_size).getFloat() * 2.0f; fontSizeInButton = resManager.getElement(ResourceTable.Float_flyout_menu_button_size).getFloat() * 0.5f; } catch (IOException e) { e.printStackTrace(); } catch (NotExistException e) { e.printStackTrace(); } catch (WrongTypeException e) { e.printStackTrace(); }

List<FlyoutMenuView.MenuItem> menuItems = new ArrayList<>();

for (int i = 0; i < emojiCodes.length; i++) { menuItems.add(new EmojiFlyoutMenu.MenuItem(getContext(), i, emojiCodes[i], fontSizeInMenu, color, i)); }

smileyFlyoutMenu.setLayout(new FlyoutMenuView.GridLayout(2, FlyoutMenuView.GridLayout.UNSPECIFIED)); smileyFlyoutMenu.setAdapter(new FlyoutMenuView.ArrayAdapter<>(menuItems));

final EmojiFlyoutMenu.ButtonRenderer renderer = new EmojiFlyoutMenu.ButtonRenderer(emojiCodes[0], fontSizeInButton, color); smileyFlyoutMenu.setButtonRenderer(renderer);


```markdown
smileyFlyoutMenu = (FlyoutMenuView) findComponentById(ResourceTable.Id_smileyFlyoutMenu);

String[] emojiCodes = {
    "1f60a", "1f603", "1f601",
    "1f602", "1f620", "1f61e",
    "1f630", "1f624"
};

ohos.global.resource.ResourceManager resManager = this.getResourceManager();
```        smileyFlyoutMenu.setSelectionListener(new FlyoutMenuView.SelectionListener() {
            @Override
            public void onItemSelected(FlyoutMenuView flyoutMenuView, FlyoutMenuView.MenuItem item) {
                smileyFlyoutMenuSelectionId = item.getId();
                renderer.setEmojiCode(((EmojiFlyoutMenu.MenuItem) item).getEmojiCode());
            }

            @Override
            public void onDismissWithoutSelection(FlyoutMenuView flyoutMenuView) {
            }
        });

Тестовая информация

Код проверен CodeCheck — ошибок нет.

Код проверен CloudTest — ошибок нет.

Проверка безопасности от вирусов прошла успешно.

Функционал текущей версии демо совпадает с функционалом исходного компонента.

Версионирование

  • 1.0.0
  • 0.0.1-SNAPSHOT

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Простые выпадающие меню в стиле материала для Android. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/chinasoft5_ohos-FlyoutMenus.git
git@api.gitlife.ru:oschina-mirror/chinasoft5_ohos-FlyoutMenus.git
oschina-mirror
chinasoft5_ohos-FlyoutMenus
chinasoft5_ohos-FlyoutMenus
master