我有一个RelativeLayout
高度参数match_parent
,我在这里有另一个LinearLayout
,其属性为layout_alignParentBottom=true
。
我使用此布局来显示MediaController
按钮。
以下是我期望在MediaController
但下面是我Lollipop 5.1
的内容(我刚刚在布局中添加了硬编码的底部边距,这根本不是任何解决方案,因为它在所有设备上都无法正常工作。)
布局隐藏在底部后退按钮栏后面。
根据底栏的高度,从底部提供必要的边距的最佳方法是什么,因为这种布局在其他Android版本和早期带有硬件后退按钮的Android手机中运行良好。
我的XML文件看起来像这样
<RelativeLayout 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"
tools:context="com.mypack.MyActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/bottomLinear"
android:orientation="vertical" >
<ImageView
android:id="@+id/albumArt"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_gravity="center"
android:background="@drawable/default_cover" />
<TextView
android:id="@+id/titleOfSong"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="3"
android:text="Title Of Song"
android:textSize="18sp" />
<TextView
android:id="@+id/albumOfSong"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="3"
android:text="Album Of Song"
android:textSize="16sp" />
<TextView
android:id="@+id/artistOfSong"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="3"
android:text="Artist Of Song"
android:textSize="18sp" />
<TextView
android:id="@+id/genreOfSong"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="3"
android:text="Genre Of Song"
android:textSize="18sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/bottomLinear"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal" >
</LinearLayout>
</RelativeLayout>
应用主题
<style name="AppBaseTheme" parent="Theme.AppCompat"></style>
<style name="AppTheme" parent="AppBaseTheme">
<item name="android:windowDisablePreview">true</item>
<item name="android:windowAnimationStyle">@null</item>
</style>
答案 0 :(得分:0)
似乎您的Activity以某种方式使用透明导航栏主题或类似的东西,允许在可见区域外渲染视图。
也许给出一些关于你的活动的背景将有助于弄清楚究竟发生了什么。
话虽如此,您应该在XML布局的根目录中使用此属性android:fitsSystemWindows
来强制视图仅在窗口的可见区域中呈现。
答案 1 :(得分:0)
如果你想保持其他一切并且只是添加一个底部边距,this answer描述了一种通过减去getRealMetrics()和getMetrics()并使用差异来获得底部软键的高度的方法暗示高度尺寸。
我自己没有测试过该方法,但反馈似乎是正面的。
答案 2 :(得分:0)
您可以在Layout中使用defaultDisplay高度和宽度,如下所示: 对你而言,它是RelativeLayout params。
DisplayMetrics metrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
android.widget.FrameLayout.LayoutParams params = (android.widget.FrameLayout.LayoutParams) yourUI.getLayoutParams();
params.width = metrics.widthPixels;
params.height = metrics.heightPixels;
params.leftMargin = 0;
yourUI.setLayoutParams(params);
答案 3 :(得分:0)
我通过以编程方式设置布局高度等于显示高度来解决此问题。
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int height = size.y;
int statusBarHeight = 0;
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
statusBarHeight = getResources().getDimensionPixelSize(resourceId);
}
RelativeLayout relativeLayout =(RelativeLayout)findViewById(R.id.relativeLayout);
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams)relativeLayout.getLayoutParams();
lp.height = height - statusBarHeight;
relativeLayout.setLayoutParams(lp);
答案 4 :(得分:0)
你好@gprathour试试这个
<LinearLayout
android:id="@+id/bottomLinear"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="?attr/actionBarSize"
android:orientation="horizontal" >
</LinearLayout>
希望这有帮助。