Android 视图不可见

Android View doesn't become VISIBLE

我正在尝试为我的音乐播放器实现控件。

这是我的 XML:

<FrameLayout 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="match_parent"
    android:background="@color/white"
    android:clickable="true"
    android:fitsSystemWindows="true"
    app:behavior_hideable="true"
    app:layout_behavior="android.support.design.widget.BottomSheetBehavior">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:baselineAligned="false"
        android:orientation="vertical">

        ...

            <LinearLayout
                android:id="@+id/control_toolbar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:gravity="bottom"
                android:orientation="horizontal"
                android:weightSum="4">

<!-- This is volume control Button -->
                <RelativeLayout
                    android:id="@+id/bottom_sheet_control_volume_container"
                    android:layout_width="wrap_content"
                    android:layout_height="56dp"
                    android:layout_weight="1"
                    android:gravity="center">

                    <ImageButton
                        android:id="@+id/bottom_sheet_control_volume"
                        android:layout_width="48dp"
                        android:layout_height="48dp"
                        android:background="@drawable/item_bg_transparent"
                        android:src="@drawable/ic_volume_up_black_24dp" />
                </RelativeLayout>

<!-- Other Buttons -->
                ...
            </LinearLayout>

<!-- Layout with volume control SeekBar -->
            <io.codetail.widget.RevealFrameLayout
                android:id="@+id/reveal_seek_bar_volume"
                android:layout_width="match_parent"
                android:layout_height="56dp"
                android:layout_alignParentBottom="true"
                android:focusable="true"
                android:focusableInTouchMode="true"
                android:visibility="visible">

                <LinearLayout
                    android:id="@+id/container_seek_bar_volume"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="@color/white"
                    android:focusable="true"
                    android:focusableInTouchMode="true"
                    android:gravity="center_vertical"
                    android:orientation="horizontal"
                    android:visibility="gone">

                    <ImageButton
                        android:id="@+id/container_seek_bar_volume_close"
                        android:layout_width="40dp"
                        android:layout_height="40dp"
                        android:layout_marginLeft="16dp"
                        android:layout_marginStart="16dp"
                        android:background="@drawable/item_bg_transparent"
                        android:src="@drawable/ic_close_black_24dp" />

                    <android.support.v7.widget.AppCompatSeekBar
                        android:id="@+id/seek_bar_volume"
                        android:layout_width="match_parent"
                        android:layout_height="30dp"
                        android:layout_margin="16dp"
                        android:max="100"
                        android:paddingLeft="8dp"
                        android:paddingRight="8dp"
                        android:paddingTop="0dp"
                        android:progress="100"
                        app:theme="@style/AppTheme.SeekBar.Accent" />
                </LinearLayout>
            </io.codetail.widget.RevealFrameLayout>

        </RelativeLayout>
    </LinearLayout>
</FrameLayout>

还有我的代码:

LLcontainerSBvolume = (LinearLayout) findViewById(R.id.container_seek_bar_volume);
IBcontrolVolume = (ImageButton) findViewById(R.id.bottom_sheet_control_volume);
        IBcontrolVolume.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                LLcontainerSBvolume.setVisibility(View.VISIBLE);
            }
        });

我还尝试请求关注 ImageButton 和其他 Views:

IBcontrolVolume.requestFocus();
LLcontainerSBvolume.requestFocus();
LLcontainerSBvolume.requestLayout();

问题

接下来的问题是:

当我启动 Activity 时,点击歌曲,打开 BottomSheet 并点击音量控制 ImageButtonSeekbar 不会变成 VISIBLE。我应该点击其他 View,然后音量 ImageButton 也能正常工作。

您在启动时将 Visibility 设置为 GONE 并使其在运行时可见的布局不是 Inside formal android Layout。它的内部自定义库 io.codetail.widget.RevealFrameLayout 可能会在运行时更改 Visibility 时出现错误。所以不要在 ImageButtonAppCompatSeekBar 的容器中使用 android:visibility。分开做 Like

<ImageButton
  -----
android:visibility="gone" />


<android.support.v7.widget.AppCompatSeekBar
   -----
android:visibility="gone" />

然后在 onClick 中根据您的要求使两者都可见或一个可见

@Override
public void onClick(View v) {
   myImageButton.setVisibility(View.VISIBLE);
   myAppCompatSeekBar.setVisibility(View.VISIBLE);
}