Intereting Posts
Не удалось выполнить обновление SDK Как передавать данные между действиями в фрагмент, используя намерение в Android Java – Android: поток, вызываемый (запуск) дважды Установите модуль в опции «Редактировать конфигурации» в программе intelliJ / Android Studio? Не могу найти причину моего сбоя с этой трассировкой стека Где схемы для файлов XML в проекте Android? Установите границу и цвет фона textView Ошибка: выполнение выполнено для задачи ': app: packageRelease'. > Невозможно вычислить хэш /../AndroidStudioProjects/../classes.jar Android, List Adapter возвращает неправильную позицию в getView Почему Android onItemClick хочет иметь длинный идентификатор строки? Уведомление Android .addAction устарело в api 23 Android: FATAL EXCEPTION: AdWorker # 1 java.lang.NoSuchMethodError: java.io.IOException. <Init> ClassCastException ViewGroup $ LayoutParams нельзя отнести к ViewPager $ LayoutParams Сохранение текущего URL-адреса приложения Android Kivy Каков андроидный эквивалент функций конвертирования / конвертации UIView?

Как создать представление, подобное области системных уведомлений в android?

Я хотел бы иметь представление в своей деятельности, которое изначально остается в верхней части экрана, как маленькая панель, но когда вы нажимаете на нее, она должна расширяться, как и область системных уведомлений.

Я не нашел стандартных элементов управления с таким поведением. Каков наилучший способ реализовать это?

Используйте SlidingDrawer . Вот хороший учебник .

SlidingDrawer работает именно так.

Проблема в том, что SlidingDrawer не может располагаться в верхней части экрана – он открывается только вверх ( см. Соответствующий вопрос ). Поэтому я внедрил простой контроль самостоятельно, используя TranslateAnimation

class MySlidingDrawer extends LinearLayout { public static final int STATE_OPENED = 0; public static final int STATE_CLOSED = 1; private int m_intState; private LinearLayout m_content; private ImageButton m_handle; public MySlidingDrawer(Context context) { super(context); setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); setOrientation(VERTICAL); setGravity(Gravity.CENTER); m_content = new LinearLayout(context); // add your content here addView(m_content); m_intState = STATE_CLOSED; m_handle = new ImageButton(context); m_handle.setImageResource(R.drawable.icon); m_handle.setOnClickListener(new OnClickListener() { public void onClick(View v) { toggleState(); } }); m_handle.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); addView(m_handle); } private int getContentHeight() { return m_content.getHeight(); } private void toggleState() { int intYStart = 0; int intYEnd = m_intState == STATE_OPENED ? -getContentHeight() : getContentHeight(); Animation a = new TranslateAnimation(0.0f, 0.0f, intYStart, intYEnd); a.setDuration(1000); a.setStartOffset(300); a.setInterpolator(AnimationUtils.loadInterpolator(getContext(), android.R.anim.bounce_interpolator)); startAnimation(a); m_intState = m_intState == STATE_OPENED ? STATE_CLOSED : STATE_OPENED; } protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); offsetTopAndBottom(-getContentHeight()); // content is initially invisible } protected void onAnimationEnd() { super.onAnimationEnd(); int intYOffset = m_intState == STATE_OPENED ? getContentHeight() : -getContentHeight(); offsetTopAndBottom(intYOffset); } } 

Вы можете использовать код, отправленный в этом ответе: Android SlidingDrawer сверху?

Предоставленное решение, устанавливающее ориентацию Slidingdrawer в xml, также просто требует только 1 класс и некоторые дополнения в attrs.xml и стабильный, поскольку он получен из Androids SlidingDrawer из SDK. Я также обсуждаю, почему я не выбрал другие популярные библиотеки / решения, найденные в Интернете / SO.

Быстрая ссылка на суть: MultipleOrientationSlidingDrawer (источник и пример) @ gist