Android对齐按钮编程



我有一个Android按钮在RelativeLayout,我想动画。动画目前使用ObjectAnimator在滚动事件上上下移动按钮50dp来完成。

按钮的位置目前是用

编程计算的。
height = context.getResources().getDisplayMetrics().heightPixels
y = height - buttonheight - bottomMargin

我的问题是,计算在纵向模式下工作得很好,但一旦我切换到横向模式,底部和按钮之间的距离比纵向模式大。

我错过了什么?

在将按钮放到布局之前尝试convert pixels to dp:

public static float convertPxToDp(int px, Context context) {
    final float scale = context.getResources().getDisplayMetrics().density;
    float dp = (float) ((px - 0.5f) / scale);
    return dp;
}

这应该可以工作!

这是正确和明显的,当你将改变你的方向,你的高度计算值也将改变显示矩阵。在横向模式下,highightpixel将返回更多的高度。

height = context.getResources().getDisplayMetrics().heightPixels

它将返回更多的值,并相应地重新计算。如果你只想给按钮和底部之间的空间固定值,那么你必须重新检查你的高度计算方法

首先尝试像这样将像素转换为dp:

Display display = getWindowManager().getDefaultDisplay();
    DisplayMetrics outMetrics = new DisplayMetrics ();
    display.getMetrics(outMetrics);
    float density  = getResources().getDisplayMetrics().density;
    float dpHeight = outMetrics.heightPixels / density;
    float dpWidth  = outMetrics.widthPixels/density;

那么我认为你必须在横屏模式下修改算法

无法转换为dp。

所以我的解决方案是在我的按钮周围包裹一个RelativeLayout,并使按钮相对于它的父按钮动画,这是固定的。

  <RelativeLayout android:layout_width="56dp"
                android:layout_height="85dp"
                android:layout_alignParentBottom="true"
                android:layout_alignParentRight="true"
                android:layout_marginRight="13dp">
    <Button
            android:id="@+id/button"
            android:layout_marginTop="10dp"
            android:layout_width="56dp"
            android:layout_height="56dp"/>
</RelativeLayout>

最新更新