2013-07-24 194 views
7

Android的活动我想创建一个活动看起来像一个弹出窗口透明布局

即与活动ALS透明背景我想以显示它在卵石自定义位置,也就是说,在设备屏幕的右上角

我所做的就是内流行过的onCreate像activty

Display display = getWindow().getWindowManager().getDefaultDisplay(); 
    WindowManager.LayoutParams params = getWindow().getAttributes(); 
    // params.x = -20; 
    params.height = (display.getHeight())/2; 
    params.width = (display.getWidth())/2; 
    // params.y = -10; 
    params.gravity = Gravity.RIGHT; 
    getWindow().setAttributes(params); 

在maifest

<activity android:name=".DialogAct" 
      android:theme="@android:style/Theme.Holo.Light.NoActionBar"></activity> 

这是我的发射活动看起来像

enter image description here

所以,当我的行动吧我送意图我的新的活动。我在搜索点击想使它看起来像流行略低于搜索图标 这是我得到的是 enter image description here

您可以看到以前的活动的搜索被点击和新的活动加载(蓝色部分)。正如你所看到的,新的活动移动到屏幕的中心。但我想要它在操作栏图标下方。我试过params.gravity = Gravity.TOP | Gravity.RIGHT;。然后我得到这个

enter image description here

我希望把它仅仅低于此前活动的操作栏。我尝试了很多方法来实现它,但失败了。所以任何人都可以提出一个梅索德

回答

0

在您的清单你写

<activity android:name=".DialogAct" 
      android:theme="@android:style/Theme.Holo.Light.NoActionBar"> 

你应该删除NoActionBar部分

<activity android:name=".DialogAct" 
      android:theme="@android:style/Theme.Holo.Light"> 
+0

如果给它,它会在我的活动中显示标题栏。我不想显示 – edwin

+0

,但在您的问题中,您说您希望它位于操作栏下方,如果您不使用操作栏,如何检测它是否低于操作栏? –

+0

那么这就是我的问题蓝屏在屏幕截图中是一项活动。没有标题栏/动作栏,以及您在后面看到的是之前导航到此活动的活动。 – edwin

0

我能想到的两件事情,可能会有帮助。首先,您可以尝试将manifest中的Theme更改为android:theme="@android:style/Theme.Dialog,这应该会给您想要的外观。

编辑

您可以隐藏与

this.requestWindowFeature(Window.FEATURE_NO_TITLE); 

标题栏,只要确保调用setContentView()

而且之前调用它,如果它并不需要是一个单独的Activity你可以使用PopupWindow。有了这个,您可以使用isAboveAnchor并使用ActionBar作为锚,并将其放置在下方或使用其他关联方法之一。我不知道这些是否能满足你的需求,但他们可能会为你工作。

+0

我尝试改变我的主题,但它没有帮助它带出标题栏。这应该避免在我的情况。我不能去popover,因为有很多片段交易将发生在我的活动。所以我需要完全控制它。 Thant就是为什么我采用这种方法 – edwin

+0

如果标题栏是第一个解决方案的唯一问题,那么请参阅我的编辑。这将允许你隐藏标题栏 – codeMagic

+0

我试过了,但仍然无法实现我所需要的。可以请检查编辑。 – edwin

-1

尝试重心而不是右上..

+0

我希望这是在屏幕的右侧,这就是为什么我给。如果给中心它将移动到屏幕的中心 – edwin

+0

你想要它在右上角? –

+0

如果是的话,给顶部边缘参数,看看它是如何反应? –

0

@edwin你可以做的是使

params.gravity = Gravity.TOP | Gravity.RIGHT; 

后,您只需提供一些利润率从上,类似这样的:

LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    params.setMargins(left, top, right, bottom); 
    yourCustomPopOveractivity.setLayoutParams(params); 

,我认为这样做后,你可以得到你需要的位置而你刚才所做的一切都是正确的。

请尝试然后告诉我

+0

首先感谢您的努力。实际上,我发现了解决方案,以便通过XML中的小变通方法以其他方式提出问题。 – edwin

+0

@edwin噢太棒了!你找到了答案。所以请在这里提供您的解决方案,如果我的答案也是正确的和有用的,那么请投票答复或接受答案,以便如果任何人面临同样的问题,可以在这里找到答案。 :) –