Прозрачная панель действий и строка состояния, такие как Uber

Я сделал несколько исследований по этой теме, но я не смог найти решение для своего приложения / активности.

  1. Я попытался получить прозрачную панель действий.

Во-первых, я попытался изменить темы в своем AndroidManifest.xml:

Значения / styles.xml:

<style name="AppTheme.ActionBar.Transparent" parent="AppTheme"> <item name="android:windowContentOverlay">@null</item> <item name="windowActionBarOverlay">true</item> <item name="colorPrimary">@android:color/transparent</item> 

а также

Значения-V21 / styles.xml:

  <style name="AppTheme.ActionBar.Transparent" parent="AppTheme"> <item name="colorPrimary">@android:color/transparent</item> </style> 

Но вот результат:

Введите описание изображения здесь

Поэтому я получаю только немного светло-серого бар с некоторыми пробелами слева / справа.

Во-вторых, я попытался использовать fitsSystemWindow="true" и android:background="@android:color/transparent" в своих макетах, но это также не помогло решить проблему.

  <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context="com.example.poweranimal.letsgo.Application.MainActivity"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/transparent"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"/> </android.support.design.widget.AppBarLayout> <include layout="@layout/content_main" /> </android.support.design.widget.CoordinatorLayout> 

Но я получаю тот же результат, что и раньше 🙁 2. Кроме того, я попытался также получить прозрачную строку состояния с:

 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 

а также

 <item name="android:statusBarColor">@android:color/transparent</item> 

Но это тоже не сработало (ничего не изменилось).

Я действительно хочу что-то вроде этого:

Введите описание изображения здесь

Было бы здорово, если бы у кого-то было возможное решение для меня.

Заранее спасибо.

1. Во-первых, вам нужно изменить структуру layout чтобы показать MAP под прозрачной Toolbar и StatusBar а также удалить левый и правый gap с существующей Toolbar .

activity_main.xml:

 <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="false"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:layout_marginTop="24dp" android:elevation="1dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/sample_map"> <!-- put your content here --> </LinearLayout> </RelativeLayout> </android.support.design.widget.CoordinatorLayout> 

2. В своей MainActivity сделайте ниже, чтобы инициализировать Toolbar и сделать Toolbar и StatusBar transparent .

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); // Toolbar :: Transparent toolbar.setBackgroundColor(Color.TRANSPARENT); setSupportActionBar(toolbar); getSupportActionBar().setTitle("StackOverflow"); getSupportActionBar().setDisplayHomeAsUpEnabled(true); // Status bar :: Transparent Window window = this.getWindow(); if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.setStatusBarColor(Color.TRANSPARENT); } ........... .................. } . @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); // Toolbar :: Transparent toolbar.setBackgroundColor(Color.TRANSPARENT); setSupportActionBar(toolbar); getSupportActionBar().setTitle("StackOverflow"); getSupportActionBar().setDisplayHomeAsUpEnabled(true); // Status bar :: Transparent Window window = this.getWindow(); if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.setStatusBarColor(Color.TRANSPARENT); } ........... .................. } 

3. Примените ниже тему к своей MainActivity .

Значения / styles.xml:

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> ....... ........... </style> <style name="AppTheme.NoActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> </style> 

AndroidManifest.xml:

 <activity android:name=".EmptyActivity" android:theme="@style/AppTheme.NoActionBar"> </activity> 

ВЫВОД:

Введите описание изображения здесь

FYI , я только что использовал образец изображения карты в своем содержании LinearLayout чтобы показать поведение. Для вашего случая положите весь свой контент ( searchbar, map ) внутри него.

Надеюсь, это поможет ~

Попробуй это.

Добавьте следующий код в свою активность, чтобы настроить прозрачность состояния и для панели действий вы должны попробовать настраиваемую панель действий с прозрачным фоном.

  private void settingStatusBarTransparent() { if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) { Window w = getWindow(); // in Activity's onCreate() for instance w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getWindow().setNavigationBarColor(Color.BLACK); getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); getWindow().setStatusBarColor(Color.TRANSPARENT); //setStatusBarTranslucent(true); } } 

Попробуй это:

Прежде всего добавьте пользовательский цвет в colors.xml как colors.xml ниже:

 <color name="transparent_white">#80FFFFFF</color> 

Затем установите этот цвет в качестве фона основного макета вашего места Where to? Xml-файл.

И в этой строке #80 есть непрозрачность (короче, противоположная прозрачности) цвета.

Первые две буквы перед цветом:

  1. '# 00' – Полностью прозрачный цвет
  2. «#FF» или « Нет» – «Полный непрозрачный цвет»

Изменение в XML ниже и попытка

 <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/transparent_white"> 

Надеюсь, это решит вашу проблему.

Попробуйте: в своей деятельности: установите полноэкранный флаг

  @TargetApi(Build.VERSION_CODES.LOLLIPOP) @Override protected void onCreate(Bundle savedInstanceState) { getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); if (android.os.Build.VERSION.SDK_INT >= 21) getWindow().setStatusBarColor(Color.TRANSPARENT); super.onCreate(savedInstanceState); } 

Теперь в манифесте: Применить тему

 <activity android:name=".YourActivity" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@style/AppTheme.ActionBar.Transparent"/> 

В res / styles.xml

 <style name="AppTheme.ActionBar.Transparent" parent="AppTheme"> <item name="colorPrimary">@android:color/transparent</item> <item name="windowActionBarOverlay">false</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowActionBarOverlay">false</item> </style> 

И установите android:fitsSystemWindows="false" в вашем CoordinatorLayout

  • fitsSystemWindows="false" : обычно рисует представление в строке состояния из-за установленных флажков окон.

  • fitsSystemWindows="true" : рисует представление в строке состояния из-за установленных флажков окон, но добавляет верх
    Чтобы содержимое было отображено ниже строки состояния, и они не перекрываются.

Сначала, как и моя точка зрения, вы создаете настраиваемую панель действий и устанавливаете фон панели действий прозрачным.

 <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="60dp" android:background="@android:color/transparent" android:id="@+id/toolBar" android:minHeight="?attr/actionBarSize" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <ImageButton android:background="@android:color/transparent" android:id="@+id/btnBackButton" android:layout_width="40dp" android:layout_height="45dp" android:src="@drawable/back" /> <ImageView android:layout_width="wrap_content" android:layout_height="39dp" android:layout_gravity="center_vertical|center_horizontal" android:id="@+id/toolbar_image" android:background="@android:color/transparent" android:src="@drawable/logo_header_new" android:visibility="visible" /> </android.support.v7.widget.Toolbar> 

Все, что вам нужно сделать, это установить эти свойства в своей теме:

 <item name="android:windowTranslucentStatus">true</item> <item name="android:windowTranslucentNavigation">true</item> 

Для вашего вида деятельности / контейнера, который требуется иметь прозрачную строку состояния, требуется этот набор свойств:

 android:fitsSystemWindows=”true” 

Надеюсь, что это поможет вам