Java Android棒棒糖设计问题

Java Android棒棒糖设计问题,java,android,android-activity,android-5.0-lollipop,android-5.1.1-lollipop,Java,Android,Android Activity,Android 5.0 Lollipop,Android 5.1.1 Lollipop,我有一个带有高度参数的RelativeLayout,其中有另一个LinearLayout,属性为layout\u alignParentBottom=true 我使用此布局来显示MediaController按钮 下面是我希望在MediaController 但下面是我在《棒棒糖5.1》中得到的内容(我刚刚在布局中添加了硬编码的底部边距,这根本不是任何解决方案,因为它不会在所有设备上都很好地工作。) 布局隐藏在后下方按钮栏的后面 由于这种布局在其他Android版本和早期带有硬件后退按钮的A

我有一个带有高度参数的
RelativeLayout
,其中有另一个
LinearLayout
,属性为
layout\u alignParentBottom=true

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

下面是我希望在
MediaController

但下面是我在《棒棒糖5.1》中得到的内容(我刚刚在布局中添加了硬编码的底部边距,这根本不是任何解决方案,因为它不会在所有设备上都很好地工作。)

布局隐藏在后下方按钮栏的后面

由于这种布局在其他Android版本和早期带有硬件后退按钮的Android手机中运行良好,因此最好的方式是根据底部栏的高度从底部提供必要的边距

我的XML文件如下所示


应用程序主题


真的
@空的

您的活动似乎以某种方式使用了透明的导航栏主题或类似的东西,允许在可见区域之外渲染视图

也许提供一些关于你的活动的背景信息将有助于了解到底发生了什么


也就是说,您应该在XML布局的根目录中使用此属性
android:fitsystemwindows
,强制视图仅在窗口的可见区域中渲染。

您的活动似乎以某种方式使用了透明导航栏主题或类似的东西,允许在可见区域之外渲染视图

也许提供一些关于你的活动的背景信息将有助于了解到底发生了什么


也就是说,您应该在XML布局的根目录中使用此属性
android:fitsystemwindows
,以强制视图仅在窗口的可见区域中呈现。

如果您希望保持所有其他内容不变,只需添加一个底部边距,描述通过减去getRealMetrics()和getMetrics()并使用差值表示高度维度来获取底部软键栏高度的方法


我自己没有测试过该方法,但反馈似乎是肯定的。

如果您想保持其他一切不变,只需添加一个底部边距,则描述了一种通过减去getRealMetrics()和getMetrics()并使用差值来表示高度维度来获取底部软键栏高度的方法


我自己没有测试过该方法,但反馈似乎是肯定的。

您可以在布局中使用默认的显示高度和宽度,如下所示: 对你来说,这是相对的

    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);

您可以在布局中使用默认显示高度和宽度,如下所示: 对你来说,这是相对的

    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);

通过编程设置布局高度等于显示高度,我解决了这个问题

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);

通过编程设置布局高度等于显示高度,我解决了这个问题

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);
嗨@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>

希望这有帮助。

Hi@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>



希望这有帮助。

这没有什么意义,按钮栏不是正常屏幕的一部分,对齐父底部不受此影响。你确定没有负的底边距或类似的底边距吗?或者可能是播放器上方的容器将其推出屏幕?@breakline最近我面临着一些奇怪的问题。是的,我确信没有负边际或类似的。我已经发布了我的XML文件。你试过布局>重心吗?顺便说一句,发布包含所有组件的完整xml,更容易分析您的问题。@Xplouder我发布了完整的xml文件。重心?为什么我需要在底部显示它。你找到解决方案了吗?这没有什么意义,按钮栏不是普通屏幕的一部分,对齐父底部不受此影响。你确定没有负的底边距或类似的底边距吗?或者可能是播放器上方的容器将其推出屏幕?@breakline最近我面临着一些奇怪的问题。是的,我确信没有负边际或类似的。我已经发布了我的XML文件。你试过布局>重心吗?顺便说一句,发布包含所有组件的完整xml,更容易分析您的问题。@Xplouder我发布了完整的xml文件。重心?为什么我需要在底部显示它。你们找到解决方案了吗?我刚刚在前面提到的XML中添加了
context
。我还尝试将
android:fitsystemwindows=“true”
赋予根元素,但没有运气。@gprathour我不是在谈论
tools:context
,而是持有此视图的活动的样式/主题/配置(
MyActivity
)只是将应用程序的主题添加到了问题中。这是您要求的吗?是的,但活动配置将是一个加号。是否为“活动装饰”视图设置可见性标志?或者像这样做?我刚刚添加了
requestWindowFeature(Window.FEATURE\u NO\u TITLE)除此之外,什么都不是。我在哪里可以找到活动配置?我刚刚在前面提到的XML中添加了
context
。我还尝试将
android:fitsystemwindows=“true”
赋予根元素,但没有运气。@gprathour我不是在谈论
tools:context
,而是持有此视图的活动的样式/主题/配置(
MyActivity
)只是将应用程序的主题添加到了问题中。这是您要求的吗?是的,但活动配置将是一个加号。是否为“活动装饰”视图设置可见性标志?或者像这样做?我刚刚添加了
requestWindowFeature(Window.FEATURE\u NO\u TITLE)除此之外,什么都不是。在哪里可以找到活动配置?嗯。。谢谢我也经历过这样的选择,但我想知道我们是否能找到为什么会发生这样的事情,以及解决这个问题的真正方法,而不仅仅是黑客