我在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上得到了回答)。
我已经坚持这个问题几个星期了,非常感谢任何帮助。
答案 0 :(得分:4)
这个对我有用,只需将它添加到你的v21 / styles.xml
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
答案 1 :(得分:1)
我可以想象三种不同的场景:
(不太可能)您使用LayoutParams
的{{1}}旗帜(如Window
)和/或主题的风格
(不太可能。虽然这是我最初的,但是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
处理它。
(最有可能)你在layout_alignParentBottom="true"
(特别是像Activity
这样的东西)中有一些边距/填充,其中包含android:layout_marginBottom="-XXdp"
。因此片段正确呈现,但活动将其移动到屏幕下方。
更准确地说,让Fragment
在这里,活动的布局以及如果你对@style/AppBaseTheme
做一些可疑的事情 - 这段代码是很好的。
如果有帮助,请告诉我!