Android 软键按钮隐藏视图的内容
Android Soft-Key-Buttons hide view's content
我遇到了 Android 上带有软键按钮的设备布局太大的问题:
总结一下,我的问题是为什么配置为 "match_parent" 的布局扩展了视图边界到 "real" 底部 window 边界,而不是刚好在软键按钮上方?
现在解决我的具体问题:
同时显示带有视图的 RelativeLayout(在 Fragment 中,如果有必要知道的话)layout_alignParentBottom="true" 在任何带有软键按钮的设备上,视图显示 "behind" 软键按钮。
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 做过任何事情,错误也可能出在片段管理中,所以我要 post这也是:
显示片段的Activity配置在AndroidManifest:
<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;
}
}
问题是软键按钮在不同设备上有不同的高度,所以我也必须检查软键按钮的高度(这是可能的并且已经在 Whosebug 上回答了).
我被这个问题困了几个星期了,非常感谢任何帮助。
我可以想象三种不同的场景:
(不太可能)你用 LayoutParams
Flags of your Window
(like getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
)and/or Theme's styles
(不太可能。虽然这是我的首字母,但 layout_alignParentBottom="true"
应该会为您处理)屏幕上的 space 不够。你能把你的 RelativeLayout
包装成 ScrollView
(这需要你将 RelativeLayout
的高度更改为 wrap_content
)并查看结果吗? (如果您将 match_parent
设置为 RelativeLayout
并不意味着它将所有内容都适合屏幕尺寸。内容很容易从屏幕上消失,就像您提供的屏幕截图一样。但是同样, layout_alignParentBottom="true"
处理它。
(最有可能)您在 Activity
中有一些 margins/paddings(尤其是 android:layout_marginBottom="-XXdp"
之类的东西),它托管 Fragment
。所以片段渲染正确,但 Activity 将其移动到屏幕下方。
更准确地说,这里有 @style/AppBaseTheme
会很好,Activity 的布局,如果您对 getWindow()
做了一些可疑的事情 - 这段代码。
如果有帮助,请告诉我!
这个对我有用,只需将它添加到您的 v21/styles。xml
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
我遇到了 Android 上带有软键按钮的设备布局太大的问题:
总结一下,我的问题是为什么配置为 "match_parent" 的布局扩展了视图边界到 "real" 底部 window 边界,而不是刚好在软键按钮上方?
现在解决我的具体问题:
同时显示带有视图的 RelativeLayout(在 Fragment 中,如果有必要知道的话)layout_alignParentBottom="true" 在任何带有软键按钮的设备上,视图显示 "behind" 软键按钮。
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 做过任何事情,错误也可能出在片段管理中,所以我要 post这也是:
显示片段的Activity配置在AndroidManifest:
<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;
}
}
问题是软键按钮在不同设备上有不同的高度,所以我也必须检查软键按钮的高度(这是可能的并且已经在 Whosebug 上回答了).
我被这个问题困了几个星期了,非常感谢任何帮助。
我可以想象三种不同的场景:
(不太可能)你用
LayoutParams
Flags of yourWindow
(likegetWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
)and/or Theme's styles(不太可能。虽然这是我的首字母,但
layout_alignParentBottom="true"
应该会为您处理)屏幕上的 space 不够。你能把你的RelativeLayout
包装成ScrollView
(这需要你将RelativeLayout
的高度更改为wrap_content
)并查看结果吗? (如果您将match_parent
设置为RelativeLayout
并不意味着它将所有内容都适合屏幕尺寸。内容很容易从屏幕上消失,就像您提供的屏幕截图一样。但是同样,layout_alignParentBottom="true"
处理它。(最有可能)您在
Activity
中有一些 margins/paddings(尤其是android:layout_marginBottom="-XXdp"
之类的东西),它托管Fragment
。所以片段渲染正确,但 Activity 将其移动到屏幕下方。
更准确地说,这里有 @style/AppBaseTheme
会很好,Activity 的布局,如果您对 getWindow()
做了一些可疑的事情 - 这段代码。
如果有帮助,请告诉我!
这个对我有用,只需将它添加到您的 v21/styles。xml
<item name="android:windowDrawsSystemBarBackgrounds">false</item>