Проблема с видом не перекрывая другой вид

Мое требование заключается в том, что мне нужно показать информацию о каком-либо событии, которое должно быть показано внизу. Я создал макет, и когда это событие произошло, я использую метод ниже:

Макет XML

<RelativeLayout android:id="@+id/maincontainer"
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@android:color/white"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            tools:context=".HomeActivity"
>

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:text="BB"
    />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:text="AA"/>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginBottom="10dp"
    android:layout_marginRight="10dp"
    android:layout_marginTop="10dp"
    android:orientation="horizontal"
    android:weightSum="1">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_marginRight="5dp"
        android:layout_weight="0.5"
        android:text="PP"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_marginLeft="5dp"
        android:layout_weight="0.5"
        android:text="GG"/>
    </LinearLayout>
</RelativeLayout>

Код для отображения вида снизу:

// To check main container where new view is to be added
       android.view.ViewGroup insertPoint = (android.view.ViewGroup) findViewById(R.id.maincontainer);

// New View that needs to be added
        android.view.LayoutInflater vi = (android.view.LayoutInflater) getApplicationContext().getSystemService(android.content.Context.LAYOUT_INFLATER_SERVICE);
        android.view.View v = vi.inflate(R.layout.app_flow_error, null);

        android.widget.TextView textView = (android.widget.TextView) v.findViewById(cR.id.information_message);
        textView.setText("Showing error");

//Defining the params value for new view that needs to be added

        android.widget.RelativeLayout.LayoutParams layoutParams = new android.widget.RelativeLayout.LayoutParams(android.view.ViewGroup.LayoutParams.MATCH_PARENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
        layoutParams.addRule(android.widget.RelativeLayout.ALIGN_PARENT_BOTTOM);

        insertPoint.addView(v, insertPoint.getChildCount()-1, layoutParams);

        v.setHovered(true);

Вид, который должен быть показан внизу, полностью занимает нижний экран, но появляется кнопка "ВВ".

Можете ли вы дать мне знать, что на самом деле я делаю неправильно, поэтому кнопка "BB" должна скрываться при добавлении нового вида внизу?

Видеть это

2 ответа

Решение

В целях тестирования попробуйте использовать (Relative, Linear etc.)Layout вместо ББ Button и посмотреть, работает ли он в этом случае (я имею в виду, если красный макет находится поверх другого макета). Я подозреваю, что это потому, что Button имеет высоту, заданную (по умолчанию, не вами), и она "поднята" поверх того, что вы показываете (я полагаю, вы работаете на Lollipop+). Если это так, вы можете установить высоту для вашего красного макета, который больше, чем Buttonили использовать макет, который уже имеет это (CardView?)

Ааа, потребовалось некоторое время (10 минут), но я понял это. Вы допустили две ошибки: первая - надувание, а вторая - ошибка при получении layoutParams, так что вот что будет работать для вас:

//test purpose
    android.view.ViewGroup insertPoint = (android.view.ViewGroup) view.findViewById(R.id.maincontainer);
    // New View that needs to be added
    android.view.LayoutInflater vi = (android.view.LayoutInflater)
            getApplicationContext().getSystemService(android.content.Context.LAYOUT_INFLATER_SERVICE);
    android.view.View v = vi.inflate(R.layout.app_flow_error, insertPoint, false);

    android.widget.TextView textView = (android.widget.TextView) v.findViewById(cR.id.information_message);
    textView.setText("Showing error");

    //Defining the params value for new view that needs to be added

    android.widget.RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) v.getLayoutParams();
    layoutParams.addRule(android.widget.RelativeLayout.ALIGN_PARENT_BOTTOM);
    v.setLayoutParams(layoutParams);
    insertPoint.addView(v,  layoutParams);

    v.setHovered(true);

PS Пожалуйста, отметьте как ответ после того, как вы проверили его.

Другие вопросы по тегам