2015-09-01 3 views
0

У меня есть видеозапись с заголовком вверху и SeekBar с элементами управления мультимедиа внизу. Как заголовок, так и макеты SeekBar накладываются на SurfaceView, когда происходит событие касания, и они исчезают через определенное время. Я также применяю режим Immersive, в котором исчезают как статусные, так и навигационные полосы вместе с заголовком и SeekBar. Мне удалось создать пространство, чтобы строка состояния отображалась без наложения на макет заголовка, используя атрибут ниже.Как избежать наложения навигационной панели на видеоперехват

android:fitsSystemWindows="true" 

Но если я использую тот же атрибут для макетов медиа-элементов управления в нижней части экрана, он не работает. В результате панель навигации накладывается на макет. Я не мог понять, почему вышеупомянутый атрибут работает нормально на одном макете, а не на другом. У меня есть настраиваемый макет для средств массовой информации, у меня есть класс, который расширяет FrameLayout. Не подходит ли атрибут fitSystemWindows для настроенных макетов? См. Значок внизу справа в первом снимке экрана. Это становится перекрыты навигационной панели, как показано на втором скриншоте

enter image description here

я включил часть моего класса файла и расположение ниже.

MediaController.java

public class MediaController extends FrameLayout { 

    //Some private fields are declared here 

    public MediaController(Context context, boolean useFastForward, boolean useFullScreenButton) { 
     super(context); 
     .... 
    } 

    public MediaController(Context context) { 
     this(context, true, false); 
    } 

    @Override 
    public void onFinishInflate() { 
     if (mRoot != null) 
      initControllerView(mRoot); 
    } 

    //Inflating the layout here 
    protected View makeControllerView() { 
     LayoutInflater inflate = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     mRoot = inflate.inflate(R.layout.media_controller, null); 
     .... 
     return mRoot; 
    } 

    //Lot of other methods here 

} 

media_controller.xml

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" 
    android:fitsSystemWindows="true"> <!--Using the attribute here--> 

    <ImageButton android:id="@+id/pause" 
     android:layout_gravity="top" 
     android:layout_width="30dp" 
     android:layout_height="30dp" 
     android:background="@android:color/transparent"/> 

    <TextView android:id="@+id/time_current" 
     android:layout_gravity="center_horizontal" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="@color/white"/> 

    <SeekBar 
     android:id="@+id/mediacontroller_progress" 
     style="?android:attr/progressBarStyleHorizontal" 
     android:layout_width="0dip" 
     android:layout_weight="1" 
     android:layout_height="32dip" /> 

    <TextView android:id="@+id/time" 
     android:layout_gravity="center_horizontal" 
     android:textColor="@color/white" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 

    <ImageButton android:id="@+id/fullscreen" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@android:color/transparent" 
     android:contentDescription="@string/description" /> 

</LinearLayout> 

+0

Я настоятельно рекомендую вам поделиться короткой видеороликой (или скриншотом) с этой проблемой, а затем объяснить, как она должна работать. – Nactus

+0

@Nactus Я добавил скриншоты. Спасибо. – Prudhvi

+0

«Смотрите значок внизу справа на первом снимке экрана.Он накладывается навигационной панелью, как показано на втором снимке экрана », поэтому, если вы правильно поняли, что хотите скрыть навигационную панель, когда ваш медиа-плеер активен, правильно? (Первое изображение - как это сделать должен выглядеть, а вторая картинка - это то, что вы получаете, правильно?) – Nactus

ответ

1

Если вы не п Eed нав-бар скрыть это так:

// onResume ensures that every time the application is resumed, the nav bar goes away 
    @TargetApi(Build.VERSION_CODES.HONEYCOMB) 
    @Override 
    protected void onResume() { 

     super.onResume(); 

     View decorView = getWindow().getDecorView(); 
     //int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; 
     int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; 
     decorView.setSystemUiVisibility(uiOptions); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, 
       WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    } 

Кроме того, проверить это:

На Android 4.1 и выше, вы можете установить содержание вашего приложения появляться позади панели навигации, так что содержимое не изменяет размер , когда панель навигации скрывается и отображается. Для этого используйте SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION. Вам также может понадобиться использовать SYSTEM_UI_FLAG_LAYOUT_STABLE, чтобы помочь вашему приложению поддерживать стабильный макет .

При использовании этого подхода, становится ваша ответственность, чтобы обеспечить , что критические части пользовательского интерфейса вашего приложения не в конечном итоге получить охвачены системы баров. Дополнительную информацию по этой теме см. В разделе Скрытие урока .