即使在.bringToFront和View.VISIBLE之后,DrawerLayout上方的视图也不会变得可见

时间:2018-06-18 20:49:50

标签: android android-fragments drawerlayout

以下是我的布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical">

<LinearLayout
    android:id="@+id/progress_layout"
    android:visibility="gone"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ProgressBar
        android:id="@+id/horizontal_progress_bar"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:indeterminateOnly="false"
        android:max="10000"
        android:maxHeight="15dip"
        android:minHeight="10dip" />

</LinearLayout>

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- The main content view -->
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <!-- Add content here -->
        <RelativeLayout
            android:id="@+id/content_fragments_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"></RelativeLayout>
    </FrameLayout>

    <ListView
        android:id="@+id/menu_items_list"
        android:layout_width="280dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:dividerHeight="0dp" />
</android.support.v4.widget.DrawerLayout>

默认情况下,progress_layout可见性为GONE。每当用户点击菜单项时,我想在(覆盖)现有片段的顶部显示进度条并开始后台操作。要显示此布局,我请调用以下方法:

public void showProgress(int progress){
    LinearLayout progressLayout = (LinearLayout) findViewById(R.id.progress_layout);
    ProgressBar progressBar = (ProgressBar) findViewById(R.id.horizontal_progress_bar);
    progressBar.setProgress(progress);
    progressLayout.bringToFront();
    progressLayout.setVisibility(View.VISIBLE);
    LinearLayout dashboardLayout = (LinearLayout) findViewById(R.id.activity_layout);
    dashboardLayout.requestLayout();
    dashboardLayout.invalidate();
}

但我仍然没有在我的片段上看到我的进度条。

请让我知道如何才能让它发挥作用。

2 个答案:

答案 0 :(得分:0)

在您的xml文件中,ID为LinearLayout的{​​{1}}处于消失模式。因此,您需要在progress_layout方法中添加此行:

showProgress

我希望这会对你有所帮助。

答案 1 :(得分:0)

我认为简单的解决方案是将进度条移动到视图顶部

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical">

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- The main content view -->
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <!-- Add content here -->
        <RelativeLayout
            android:id="@+id/content_fragments_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"></RelativeLayout>
    </FrameLayout>

    <ListView
        android:id="@+id/menu_items_list"
        android:layout_width="280dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:dividerHeight="0dp" />
</android.support.v4.widget.DrawerLayout>
<!-- move your progress_layout to end of this xml, it will be on top of view --> 
<LinearLayout
    android:id="@+id/progress_layout"
    android:visibility="gone"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ProgressBar
        android:id="@+id/horizontal_progress_bar"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:indeterminateOnly="false"
        android:max="10000"
        android:maxHeight="15dip"
        android:minHeight="10dip" />

</LinearLayout>

现在你只想在展示它时设置visibility = VISIBLE。