Страницы

Поиск по вопросам

Показаны сообщения с ярлыком menu. Показать все сообщения
Показаны сообщения с ярлыком menu. Показать все сообщения

вторник, 25 февраля 2020 г.

Как описать контекстные меню для нескольких view в одной Activity?

#java #android #activity #view #menu

Во всех найденных мною примерах создается меню для одного view.
Как создать контекстные меню для нескольких элементов в одной Activity?    


Ответы

Ответ 1



Так, по идее, можно сделать. Весь код пишем в активити. 1) Находим нужные нам вьюхи и регистрируем их для получения события вызова контестного меню: TextView tV = (TextView) findViewById(R.id.yours_text_view_id); registerForContextMenu(tV); ImageView iV = (ImageView ) findViewById(R.id.yours_image_view_id); registerForContextMenu(iV); 2) Переопределяем методы активити: @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { switch (v.getId()) { case R.id.yours_text_view_id: menu.add(0, 0, 0, "Получить тест статьи"); menu.add(0, 1, 0, "Комментарии"); menu.add(0, 2, 0, "Открыть в браузере"); break; case R.id.yours_image_view_id: menu.add(0, 3, 0, "Ещё кнопка0"); menu.add(0, 4, 0, "Ещё кнопка1"); menu.add(0, 5, 0, "Ещё кнопка2"); break; } } @Override public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case 0: //что-то делаем break; case 1: //что-то делаем break; case 2: //что-то делаем break; case 3: //что-то делаем break; case 4: //что-то делаем break; case 5: //что-то делаем break; case 6: //что-то делаем break; } return super.onContextItemSelected(item); }

суббота, 8 февраля 2020 г.

Верстка меню по дуге

#html #css #вёрстка #menu

Каким образом можно сверстать меню такого типа? Нужно расположить элементы меню по дуге.


    


Ответы

Ответ 1



Вариант на jquery. Впрочем, значения отступов можно один раз посчитать и прописать для каждого пункта меню отдельно в css. function curvemenu(selector, radius, step) { var lis = $(selector), mid = lis.length / 2 - 0.5, ymid = step * mid, radius2 = radius * radius, offset = Math.sqrt(radius2 - ymid * ymid); lis.each(function(idx, el) { var y = step * (idx - mid); var x = Math.sqrt(radius2 - y * y); $(el).css("margin-left", (x - offset) + "px"); }); } curvemenu("li", 120, 20); li { line-height: 20px; list-style: none }
  • меню 1
  • меню 2
  • меню 3
  • меню 4
  • меню 5
  • меню 6
  • меню 7
  • меню 8
  • меню 9
radius - радиус окружности, по дуге которой будут располагаться элементы меню. step - высота пункта меню.

Ответ 2



Использование usemap Пример 1: http://jsfiddle.net/2o57tvpg/ Навигация
по сайту

Пункт 1 Пункт 2 Пункт 3 Пункт 3 Пункт 4 Пункт 5

Пример 2: - позиционирование http://jsfiddle.net/0braeda5/ *{ padding: 0; margin: 0; } nav{ font-family: 'segoe ui', sans-serif; font-size: 16px; position: relative; } nav .arc, nav ul{ display: inline-block; *display: inline; zoom: 1; vertical-align: middle; } .arc{ width: 300px; height: 300px; background: #f00; text-align: center; line-height: 300px; color: #fff; font-size: 20px; border-radius: 50%; } nav > ul{ list-style: none; } nav > ul > li{ margin: 15px 0; } nav > ul > li.menu-item-1{position: relative; left: -35px;} nav > ul > li.menu-item-2{position: relative; left: -10px;} nav > ul > li.menu-item-4{position: relative; left: -20px;} nav > ul > li.menu-item-5{position: relative; left: -40px;} nav > ul > li a{ display: inline-block; *display: inline; zoom: 1; padding: 5px 15px; background: #ccc; color: #000; text-decoration: none; } nav > ul > li a:hover{ color: #fff; background: #555; } nav > ul > li a:active{ color: #fff; background: #000; }

суббота, 28 декабря 2019 г.

Меню под Toolbar. Нет названия табов

#android #material_design #menu #android_toolbar

Пытаюсь сделать так - 



Java код

//Pager
    TabsViewPagerAdapter adapter = new TabsViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new Fragment1(), "Первый");
    adapter.addFragment(new Fragment2(), "Second");
    viewPager.setAdapter(adapter);

    //Set tabs
    tabLayout.setupWithViewPager(viewPager);


Так же вот вам мой класс -

public class PagerAdapterHelper extends FragmentPagerAdapter {
private final List mFragmentList = new ArrayList<>();
private final List mFragmentTitleList = new ArrayList<>();

public PagerAdapterHelper(FragmentManager manager) {
    super(manager);
}

@Override
public Fragment getItem(int position) {
    return mFragmentList.get(position);
}

@Override
public int getCount() {
    return mFragmentList.size();
}

public void addFragment(Fragment fragment, String title) {
    mFragmentList.add(fragment);
    mFragmentTitleList.add(title);
}


@Override
public CharSequence getPageTitle(int position) {
    switch (position) {
        case 0:
            return "ONE";
        case 1:
            return "TWO";
        default:
            return "WTF";
    }
}


}

После запуска Активити есть тулбар и поле под ним, но почему-то самих табов на нем
нет. Так же сами фрагменты спокойно отображаются/листаются. На табы можно тыкать, все
норм, только надписей нет(
    


Ответы

Ответ 1



Для этого применяются табы. Код разметки: Код добавления: Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); assert toolbar != null; setSupportActionBar(toolbar); viewPager = (ViewPager) findViewById(R.id.viewpager); tabLayout = (TabLayout) findViewById(R.id.tabs); TabsViewPagerAdapter adapter = new TabsViewPagerAdapter(getSupportFragmentManager()); adapter.addFragment(new Fragment1(), "ssss"); adapter.addFragment(new Fragment2(), "Second"); viewPager.setAdapter(adapter); viewPager.setAdapter(adapter); assert tabLayout != null; tabLayout.setupWithViewPager(viewPager); tabLayout.setupWithViewPager(viewPager); tabLayout.getTabAt(0).setText("1"); tabLayout.getTabAt(1).setText("2"); Код адаптера: public class TabsViewPagerAdapter extends FragmentPagerAdapter { private final List mFragmentList = new ArrayList<>(); private final List mFragmentTitleList = new ArrayList<>(); public TabsViewPagerAdapter(FragmentManager manager) { super(manager); } @Override public Fragment getItem(int position) { return mFragmentList.get(position); } @Override public int getCount() { return mFragmentList.size(); } public void addFragment(Fragment fragment, String title) { mFragmentList.add(fragment); mFragmentTitleList.add(title); } @Override public CharSequence getPageTitle(int position) { return mFragmentTitleList.get(position); } }

Ответ 2



build.gradle dependencies { compile 'com.android.support:design:23.1.1' } activity_pull_to_refresh.xml TabLayoutActivity.class public class TabLayoutActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_pull_to_refresh); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout); ViewPager viewPager = (ViewPager) findViewById(R.id.pager); if (toolbar != null) { setSupportActionBar(toolbar); } viewPager.setAdapter(new SectionPagerAdapter(getSupportFragmentManager())); tabLayout.setupWithViewPager(viewPager); } public class SectionPagerAdapter extends FragmentPagerAdapter { public SectionPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { switch (position) { case 0: return new FirstTabFragment(); case 1: default: return new SecondTabFragment(); } } @Override public int getCount() { return 2; } @Override public CharSequence getPageTitle(int position) { switch (position) { case 0: return "First Tab"; case 1: default: return "Second Tab"; } } } }

понедельник, 16 декабря 2019 г.

Прокрутка меню в Corona SDK

#lua #menu #coronasdk

Создаю прокрутку для меню в Lua CORONA SDK.

Исходник файла menu.lua

local composer = require( "composer" )
local widget = require( "widget" )

local scene = composer.newScene()

local function onButtonRelease( event )
composer.gotoScene( event.target.id:lower(), { effect="fade", time=300 } )
--composer.recycleOnSceneChange = true
end

function scene:create( event )

local sceneGroup = self.view

local sceneTitle = display.newText( sceneGroup, "Выберете уровень", display.contentCenterX,
10, composer.getVariable( "appFont" ), 20 )

-- Создание массива из кнопок меню
local menuButtons = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12",
"13", "14", "15", "16", "17", "18"  }

-- Создание цикла для кнопок меню
local rowNum = 0
for i = 1,#menuButtons do

    rowNum = rowNum+1
    local button = widget.newButton(
        {
            label = menuButtons[i],
            id = menuButtons[i],
            shape = "circle",
            radius = 20,
            font = composer.getVariable( "appFont" ), 
            fontSize = 16,
            fillColor = { default={ 0.12,0.32,0.52,1 } ,over={ 0.132,0.352,0.572,1
} }, -- цвет кнопки и нажатия на кнопку
            labelColor = { default={ 1,1,1,1 }, over={ 1,1,1,1 } }, -- цвет шрифта
на кнопках
            onRelease = onButtonRelease
        })

   mod = math.fmod(i, 2) -- определение кратности

    if (i*mod >= 1 ) then -- если кратно 1
        button.x = display.contentCenterX -50
        elseif (i*mod == 0) then  -- если кратно 0 
            button.x = display.contentCenterX + 50 
        end     
    button.y = 65 + ((rowNum-1)*35) -- растояние по y между кнопками

    sceneGroup:insert( button ) -- обновление сцены после нажатия на кнопку
end

end

scene:addEventListener( "create", scene ) -- слушатель на создание сцены


--обработка касаний
function scene:touch(e)
-- body
if(e.phase == "began") then
        print("начало a");
    elseif (e.phase == "moved") then
        scene.x = e.x;
        scene.y = e.y;
        print("двигаю a");
    elseif(e.phase == "ended") then
        print("отпустил a");
end
end

 scene:addEventListener("touch", scene);

return scene


Для наглядности прикрепляю изображение



По обработке касаний, пробовал как со сценой, так и с меню, и с массивом кнопок.

Подскажите, пожалуйста, решение моей проблемы.
    


Ответы

Ответ 1



Для выполнения поставленной цели, нужно создать scrollView и переместить в функцию код на создания кнопок в цикле из function scene:create в function showSlidingMenu и слушать события каждый раз в Runtime. Для реализации прокрутки меню сразу при переходе в меню, функция вызывается в scene:create local composer = require( "composer" ) local widget = require( "widget" ) local scrollView local scene = composer.newScene() local function onButtonRelease( event ) composer.gotoScene( event.target.id:lower(), { effect="fade", time=300 } ) end function scene:create( event ) sceneGroup = self.view composer.recycleOnSceneChange = true; local sceneTitle = display.newText( sceneGroup, "Выберете уровень", display.contentCenterX, 10, composer.getVariable( "appFont" ), 20 ) end local function ButtonListener( event ) if ( event.phase == "moved" ) then local dx = math.abs( event.x - event.xStart ) if ( dx > 5 ) then scrollView:takeFocus( event ) end elseif ( event.phase == "ended" ) then print( "клик по объекту" ) timer.performWithDelay( 10, function() scrollView:removeSelf(); scrollView = nil; Runtime:removeEventListener("touch",showSlidingMenu) end ) end return true end function showSlidingMenu( event ) if ( "ended" == event.phase ) then scrollView = widget.newScrollView { width = _W, height = _H, scrollWidth = width, scrollHeight = height, horizontalScrollDisabled = true } scrollView.x = display.contentCenterX scrollView.y = display.contentCenterY local menuButtons = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18" } rowNum = 0 for i = 1,#menuButtons do rowNum = rowNum+1 local button = widget.newButton( { label = menuButtons[i], id = menuButtons[i], shape = "circle", radius = 20, font = composer.getVariable( "appFont" ), fontSize = 16, fillColor = { default={ 0.12,0.32,0.52,1 } ,over={ 0.132,0.352,0.572,1 } }, -- цвет кнопки и нажатия на кнопку labelColor = { default={ 1,1,1,1 }, over={ 1,1,1,1 } }, -- цвет шрифта на кнопках onRelease = onButtonRelease }) mod = math.fmod(i, 2) -- определение кратности if (i*mod >= 1 ) then -- если кратно 1 button.x = display.contentCenterX -50 -- смещение относительно центра влево elseif (i*mod == 0) then -- если кратно 0 button.x = display.contentCenterX + 50 -- смещение относительно центра впрово end button.y = 30 + ((rowNum-1)*35) -- координаты первой кнопки и растояние по y между кнопками scrollView:insert( button ) sceneGroup:insert( scrollView ) scene:addEventListener( "touch", ButtonListener ) end return true end end -- hide() function scene:hide( event ) local sceneGroup = self.view local phase = event.phase if ( phase == "will" ) then -- Код здесь работает, когда сцена находится на экране (но собирается уйти с экрана) print ("ухожу с экрана"); elseif ( phase == "did" ) then -- Код здесь запускается сразу после того, как сцена полностью выходит за пределы экрана print ("ушел за пределы экрана"); end end -- destroy() function scene:destroy( event ) local sceneGroup = self.view showSlidingMenu = nil; end scene:addEventListener( "create", scene ) -- слушатель на создание сцены scene:addEventListener( "destroy", scene ) scene:addEventListener( "hide", scene ) Runtime:addEventListener("touch",showSlidingMenu) return scene Если тема создания меню с помощью Corona SDK интересна, то буду ее развивать

понедельник, 15 июля 2019 г.

На мобильных разрешениях при вызове выпадающего меню появляется скролл - как исправить?

Есть двухуровневое меню с выпадающим подменю на bootstrap. На мобильных разрешениях, когда меню сворачивается в бутерброд, нижние выпадающие списки не помещаются в область меню и появляется справа в нем скролл. Как этот момент можно исправить? фидл
.dropdown:hover > .dropdown-menu { display: block; }



Ответ

Быстрое решение - выставьте overflow-y: visible у .navbar-collapse.in
.navbar-collapse.in { overflow-y: visible; }

понедельник, 8 июля 2019 г.

Изменений содержимого окна по кнопкам

Здравствуйте. Необходимо разделить форму на 3 части. В первой части будет своё содержимой, в других частях своё. Эти части будут переключаться кнопками. Т.е. при нажатие на первую кнопку, у нас показываются в форме одни объекты, нажимаем на другое, и содержимой всей формы меняется снова. Как данный вопрос можно решить? Приблизительно всё будет выглядеть, как на рисунке.


Ответ

Самое простое Через TabControll. Этот контролл есть и в WinForms и в WPF. В TabPage добавляйте то что нужно.

вторник, 14 мая 2019 г.

Как описать контекстные меню для нескольких view в одной Activity?

Во всех найденных мною примерах создается меню для одного view. Как создать контекстные меню для нескольких элементов в одной Activity?


Ответ

Так, по идее, можно сделать. Весь код пишем в активити. 1) Находим нужные нам вьюхи и регистрируем их для получения события вызова контестного меню: TextView tV = (TextView) findViewById(R.id.yours_text_view_id); registerForContextMenu(tV);
ImageView iV = (ImageView ) findViewById(R.id.yours_image_view_id); registerForContextMenu(iV); 2) Переопределяем методы активити: @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { switch (v.getId()) { case R.id.yours_text_view_id: menu.add(0, 0, 0, "Получить тест статьи"); menu.add(0, 1, 0, "Комментарии"); menu.add(0, 2, 0, "Открыть в браузере"); break; case R.id.yours_image_view_id: menu.add(0, 3, 0, "Ещё кнопка0"); menu.add(0, 4, 0, "Ещё кнопка1"); menu.add(0, 5, 0, "Ещё кнопка2"); break; } }
@Override public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case 0: //что-то делаем break; case 1: //что-то делаем break; case 2: //что-то делаем break; case 3: //что-то делаем break; case 4: //что-то делаем break; case 5: //что-то делаем break; case 6: //что-то делаем break; } return super.onContextItemSelected(item); }