Как реализовать кнопку Cast как кнопку с плавающим действием? - PullRequest
0 голосов
/ 24 февраля 2019

Я пытаюсь реализовать кнопку Cast как кнопку с плавающим действием, но я не знаю как.

У меня она работает на панели инструментов без каких-либо проблем, но я хотел попробовать этоделать как плавающую кнопку действия.

Я пробовал следующее, но она не работает как настоящая плавающая кнопка действия.

    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_scrollFlags="scroll|enterAlways|snap" />

    </com.google.android.material.appbar.AppBarLayout>

    <include layout="@layout/content_main" />

    <com.google.android.material.bottomappbar.BottomAppBar
        android:id="@+id/bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:contentInsetStart="0dp"
        android:contentInsetLeft="0dp"
        android:contentInsetEnd="0dp"
        android:contentInsetRight="0dp"
        app:contentInsetEnd="0dp"
        app:contentInsetLeft="0dp"
        app:contentInsetRight="0dp"
        app:contentInsetStart="0dp"
        app:hideOnScroll="true"
        app:layout_scrollFlags="scroll|enterAlways|snap">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:weightSum="5">

            <androidx.appcompat.widget.AppCompatImageButton
                android:id="@+id/ib_monitors"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="?attr/selectableItemBackgroundBorderless"
                android:tint="@color/colorAccent"
                app:srcCompat="@drawable/ic_photo_camera_black_24dp" />

            <androidx.appcompat.widget.AppCompatImageButton
                android:id="@+id/ib_videos"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="?attr/selectableItemBackgroundBorderless"
                android:tint="@color/colorAccent"
                app:srcCompat="@drawable/ic_video_library_black_24dp" />

            <androidx.appcompat.widget.AppCompatImageButton
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="?attr/selectableItemBackgroundBorderless" />

            <androidx.appcompat.widget.AppCompatImageButton
                android:id="@+id/ib_settings"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="?attr/selectableItemBackgroundBorderless"
                android:tint="@color/colorAccent"
                app:srcCompat="@drawable/ic_settings_black_24dp" />

            <androidx.appcompat.widget.AppCompatImageButton
                android:id="@+id/ib_account"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="?attr/selectableItemBackgroundBorderless"
                android:tint="@color/colorAccent"
                app:srcCompat="@drawable/ic_account_circle_black_24dp" />

        </LinearLayout>

    </com.google.android.material.bottomappbar.BottomAppBar>

    <androidx.mediarouter.app.MediaRouteButton
        android:id="@+id/media_route_button"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        app:backgroundTint="@color/fabBackgroundTint"
        app:layout_anchor="@id/bar"
        app:tint="@color/colorAccent"/>

    <!--<com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:backgroundTint="@color/fabBackgroundTint"
        app:layout_anchor="@id/bar"
        app:srcCompat="@drawable/ic_add_a_photo_black_24dp"
        app:tint="@color/colorAccent" />-->

</androidx.coordinatorlayout.widget.CoordinatorLayout>

Цените любые советы.

Ответы [ 2 ]

0 голосов
/ 03 сентября 2019

Это реализация, которую я имею.Это работает для меня, я надеюсь, что это работает и для вас

1.- Во-первых, вам нужно добавить MediaRouteButton

<androidx.mediarouter.app.MediaRouteButton
        android:id="@+id/home_media_route_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:mediaRouteTypes="user"
        android:visibility="visible"/>

2.- Теперь вам просто нужно добавить плавающийстиль кнопки для вашей кнопки

style="@style/Widget.Design.FloatingActionButton"

3. -В качестве последнего шага вам нужно всего лишь настроить MediaRouteButton следующим образом:

 CastButtonFactory.setUpMediaRouteButton(this,home_media_route_button)

БОНУС

Если вы хотите, чтобы кнопка отображалась только тогда, когда доступны литые устройства, добавьте этот код в onCreate метод

private lateinit var castContext: CastContext

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        castContext = CastContext.getSharedInstance(this)
        castContext.addCastStateListener{state->
            if(state==CastState.NO_DEVICES_AVAILABLE) {
                home_media_route_button.visibility = View.GONE
            }else{
                home_media_route_button.visibility=View.VISIBLE
            }
        }
        if(castContext.castState==CastState.NO_DEVICES_AVAILABLE){
            home_media_route_button.visibility = View.GONE
        }else{
            home_media_route_button.visibility=View.VISIBLE
        }
        CastButtonFactory.setUpMediaRouteButton(this,home_media_route_button)
}

Дайте мне знать, работает ли она для вас.

0 голосов
/ 12 июня 2019

Добавьте 2 вида (кнопка FAB и медиа-маршрут) в RelativeLayout.Совместите оба представления по центру в родительском.И, наконец, добавьте свойство возвышения, чтобы кнопка Media Route отображалась поверх FAB:

   <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@id/viewpager"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_margin="15dp">

        <android.support.design.widget.FloatingActionButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true" />

        <android.support.v7.app.MediaRouteButton
            android:id="@+id/home_media_route_button"
            android:layout_width="wrap_content"
            android:elevation="7dp"
            android:layout_height="wrap_content"
            android:mediaRouteTypes="user"
            android:visibility="visible"
            android:layout_centerInParent="true"/>
    </RelativeLayout>
...