2013-03-05 3 views
0

Я использую PopupWindow, чтобы показать некоторые данные, когда пользователь нажимает кнопку на панели действий (используя АБС). Я также использую анимацию перевода, чтобы показать и скрыть PopupWindow, чтобы она опустилась сверху.Android PopupWindow внутри фрагмента с actionbarsherlock

Поведение, которое я хочу, состоит в том, чтобы панель действий всегда оставалась на вершине (принося к фронту) все остальное в деятельности. Но когда я показываю PopupWindow, анимация показывает, что она опускается и перекрывает панель действий во время ее перемещения. Если я установил разную высоту для PopupWindow, она также перекрывает панель действий.

Есть ли способ использовать ActionBarSherlock, чтобы всегда показывать панель действий поверх всего остального, включая всплывающие окна и диалоги? Или есть способ привязать PopupWindow к основному фрагменту внутри корня FrameLayout?

+0

Это настраиваемый макет, который отображает «ListView» с данными и изображениями. – Wenger

ответ

2

Посмотрите на свое мнение в режиме просмотра иерархии. Иерархия здесь, в том числе, где находится ABS, действует как z-индекс для слоев просмотров и групп представлений. Вы можете захватить слой, который находится под панелью действий и добавить настраиваемое представление к нему:

// Grab android.R.id.content's parent to encompass the actionbar & user content 
    content = ((ViewGroup) findViewById(android.R.id.content).getParent()); 

    // Make sure we inflate our menu resource before it is used 
    if (dialog == null) 
     dialog = (ViewGroup) <INFLATE SOME DIALOG/VIEWGROUP HERE>; 

    // We need this to add a view beneath the action bar 
    FrameLayout parent = (FrameLayout) content.getParent(); 
    // There needs to be some layout params set for visibility 
    FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, Gravity.TOP); 
    // A little tricky... using negative margins can do an initial translation that hides a view 
    layoutParams.setMargins(0, -(heightOfDialog), 0, 0); 
    dialog.setLayoutParams(layoutParams); 
    parent.addView(dialog, 0); 

Это позволит вам расположить вид под диалогом, и все еще быть в состоянии оживить его, как вы хотели бы, используя такой класс, как TranslateAnimation:

TranslateAnimation animation = new TranslateAnimation(leftOfContent, 0, 0, 0); 
animation.setDuration(TIME_TO_AUTO_SCROLL); 
dialog.startAnimation(animation); 
+0

Итак, это решение будет удалять «PopupWindow» и заменять его видом, который вы можете поместить в FrameLayout? Мне понравилась 'setAnimationStyle()' часть PopupWindow, поэтому мне просто нужно выяснить, как оживить представление и выйти. – Wenger

+0

Я добавил отправную точку для анимации. Они довольно гладкие. – Shellum

+0

Удивительная благодарность. Итак, как бы я мог разделить «parent.addView (...)» и «dialog.startAnimation (...)»? Если я добавлю представление, я подумаю, что он отображается в конечном месте, где я хочу анимировать его с верхней части экрана. – Wenger

Смежные вопросы