<as- java =“”>浮动活动:始终居中

时间:2016-02-14 22:08:43

标签: java android android-studio

我有一个浮动活动覆盖在用户屏幕上:这个叠加始终居中,我无法理解为什么。

在我的XML中,我有:

<style name="PopupTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowSoftInputMode">adjustResize</item>
    <item name="windowActionModeOverlay">true</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="windowNoTitle">true</item>
    <item name="android:windowCloseOnTouchOutside">true</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
    <item name="android:backgroundDimEnabled">true</item>
    <item name="colorAccent">@color/colorPrimary</item>
    <item name="android:gravity">bottom</item>
    <item name="android:adjustViewBounds">true</item>
</style>

正如您所看到的,Gravity对样式没有影响:我也尝试了对齐标记,但​​也没有用。

接下来我们有了onCreate方法,虽然不需要,但我添加了requestWindowFeature(),只需要声明它来获取编辑默认设置的权限:

@Override
protected void onCreate(Bundle savedInstanceState) {
    WindowManager.LayoutParams params = new WindowManager.LayoutParams();
    params.y = 80;
    getWindow().setAttributes(params);
    requestWindowFeature(Window.FEATURE_NO_TITLE);        
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    }

最后(好吧它实际上是第一个)我有覆盖方法:

@Override
public void onAttachedToWindow() {
    DisplayMetrics displayMetrics = new DisplayMetrics();
    WindowManager wm = (WindowManager)  getApplicationContext().getSystemService(this.WINDOW_SERVICE); // the results will be higher than using the activity context object or the getWindowManager() shortcut
    wm.getDefaultDisplay().getMetrics(displayMetrics);
    int screenWidth = displayMetrics.widthPixels;
    int screenHeight = displayMetrics.heightPixels;        
    WindowManager.LayoutParams params = getWindow().getAttributes();
    params.y = 80;
    this.getWindow().setAttributes(params);
    this.getWindow().setLayout(screenWidth, screenHeight /2);
    }

(顺便说一句,setLayout工作正常,并且完全调整了屏幕:这只是增加了混乱)params.y = 80;其中80表示y与底部对齐。

所有这些浮动活动只需要坐在设备底部并占据屏幕的一半空间即可。然而,它坚持不断集中。

一切顺利, 安东尼

1 个答案:

答案 0 :(得分:0)

对于那些来这里遇到同样问题的人:覆盖方法中的params.y = 80。它需要是8388611 - 虽然这没有意义,因为它是params.x的值:无论哪种方式,只要确保你在之后执行setAttributes!