Android Soft-Key-Buttons隐藏视图的内容

时间:2016-01-03 14:28:01

标签: android android-layout android-fragments softkeys

我在Android上带有软键按钮的设备上布局太大时遇到了麻烦:

总结一下,我的问题是为什么配置为 “match_parent” 的布局将其视图边界扩展到“实际”底部窗口​​绑定,而是在软键按钮之上?

现在针对我的具体问题:

在任何带有软键按钮的设备上,使用View layout_alignParentBottom =“true” 显示RelativeLayout(在片段中,如果需要知道),视图显示在软键按钮的“后面”。

Image of the View on a Device without Soft-Key-Buttons (as it should be)

Image of the View on a Device with Soft-Key-Buttons (the Button is "hiding" behind the Soft-Keys)

RelativeLayout看起来像这样:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:custom="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/bg2">

    <LinearLayout
        android:layout_marginTop="@dimen/settings_container_margin_top"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:orientation="vertical">

        <!-- Some views -->

    </LinearLayout>

    <at.eventdrivers.android.ui.MenuButton
        android:layout_width="250dp"
        android:layout_height="50dp"
        android:layout_gravity="center_horizontal"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        custom:btnText="@string/..." />

</RelativeLayout>

由于我对Android开发很陌生,而且之前没有使用Fragments做过任何事情,错误也可能出现在片段管理中,所以我也要发布这个:

在AndroidManifest中配置显示片段的Activity:

<activity
    android:name=".slidingmenu.SlidingHomeActivity"
    android:label="@string/app_name"
    android:logo="@mipmap/ic_launcher"
    android:theme="@style/AppBaseTheme"
    android:windowSoftInputMode="adjustResize"
    android:screenOrientation="portrait" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

使用过的FrameLayouts都将layout_width和layout_height设置为match_parent。

现在我正在使用某种解决方法,以编程方式检查设备是否显示软键按钮,如果是,则将此按钮的边距设置为更高的值:

public static boolean hasSoftKeys(Context c) {
    if(Build.VERSION.SDK_INT <= 10 || (Build.VERSION.SDK_INT >= 14 &&
            ViewConfiguration.get(c).hasPermanentMenuKey())) {
        //menu key is present
        return false;
    } else {
        //No menu key
        return true;
    }
}

问题在于,软键按钮在不同的设备上具有不同的高度,因此我必须检查软键按钮的高度(这是可能的并且已经在StackOverflow上得到了回答)。

我已经坚持这个问题几个星期了,非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

这个对我有用,只需将它添加到你的v21 / styles.xml

<item name="android:windowDrawsSystemBarBackgrounds">false</item>

答案 1 :(得分:1)

我可以想象三种不同的场景:

  1. (不太可能)您使用LayoutParams的{​​{1}}旗帜(如Window)和/或主题的风格

  2. 执行某些操作
  3. (不太可能。虽然这是我最初的,但是getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);应该为你处理它)你的屏幕上没有足够的空间。你能否将layout_alignParentBottom="true"包裹到ScrollView(这需要你将RelativeLayout的身高改为RelativeLayout)并查看结果? (如果您将wrap_content设置为match_parent,并不意味着它适合屏幕大小的所有内容。内容很容易离开屏幕,就像您提供的屏幕截图一样。但是, RelativeLayout处理它。

  4. (最有可能)你在layout_alignParentBottom="true"(特别是像Activity这样的东西)中有一些边距/填充,其中包含android:layout_marginBottom="-XXdp"。因此片段正确呈现,但活动将其移动到屏幕下方。

  5. 更准确地说,让Fragment在这里,活动的布局以及如果你对@style/AppBaseTheme做一些可疑的事情 - 这段代码是很好的。

    如果有帮助,请告诉我!