Android Lollipop设计问题

时间:2015-06-28 12:43:52

标签: java android android-activity android-5.0-lollipop android-5.1.1-lollipop

我有一个RelativeLayout高度参数match_parent,我在这里有另一个LinearLayout,其属性为layout_alignParentBottom=true

我使用此布局来显示MediaController按钮。

以下是我期望在MediaController

中提供的内容

enter image description here

但下面是我Lollipop 5.1的内容(我刚刚在布局中添加了硬编码的底部边距,这根本不是任何解决方案,因为它在所有设备上都无法正常工作。)

enter image description here

布局隐藏在底部后退按钮栏后面

根据底栏的高度,从底部提供必要的边距的最佳方法是什么,因为这种布局在其他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>

5 个答案:

答案 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>

希望这有帮助。