Проблема с видом не перекрывая другой вид
Мое требование заключается в том, что мне нужно показать информацию о каком-либо событии, которое должно быть показано внизу. Я создал макет, и когда это событие произошло, я использую метод ниже:
Макет 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 Пожалуйста, отметьте как ответ после того, как вы проверили его.