如何将覆盖视图放在操作栏上 Sherlock
Posted
技术标签:
【中文标题】如何将覆盖视图放在操作栏上 Sherlock【英文标题】:How to put overlay View over action bar Sherlock 【发布时间】:2013-03-15 03:42:27 【问题描述】:我想在操作栏上设置一些视图,以显示教程文本(例如单击此处并发送电子邮件...)。这可能吗?我问是因为我知道操作栏使用布局的顶部空间,而片段或活动使用剩余空间。 我的第二个问题是如何在操作栏上显示所有操作项。我使用 ActionBarSherlock 库,我发现我还有空间容纳另一个操作项,但它没有显示在操作栏上。我在项目的 xml ifRoom 选项中设置...
谢谢!!!
【问题讨论】:
我建议您将第二个问题作为单独的帖子提出(并将其从该帖子中删除),因为它与主题中所述的问题没有直接关系。 【参考方案1】:有多种方法可以实现类似教程的叠加。可能最简单的方法是使用专门准备的Dialog 窗口,透明背景,没有暗光。
使用自定义 Dialog
进行教程叠加
首先我们要为Dialog
准备内容。在此示例中,RelativeLayout
内将有一个 TextView
,这是此处最有用的布局。
info_overlay.xml
文件内容:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_>
<TextView
android:id="@+id/textView1"
android:layout_
android:layout_
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:background="@android:color/darker_gray"
android:padding="3dp"
android:text="TextView"
android:textColor="@android:color/white" />
</RelativeLayout>
现在,我们可以使用这个布局来创建我们的Dialog
:
public class MainActivity extends Activity
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Dialog overlayInfo = new Dialog(MainActivity.this);
// Making sure there's no title.
overlayInfo.requestWindowFeature(Window.FEATURE_NO_TITLE);
// Making dialog content transparent.
overlayInfo.getWindow().setBackgroundDrawable(
new ColorDrawable(Color.TRANSPARENT));
// Removing window dim normally visible when dialog are shown.
overlayInfo.getWindow().clearFlags(
WindowManager.LayoutParams.FLAG_DIM_BEHIND);
// Setting position of content, relative to window.
WindowManager.LayoutParams params = overlayInfo.getWindow().getAttributes();
params.gravity = Gravity.TOP | Gravity.LEFT;
params.x = 100;
params.y = 20;
// If user taps anywhere on the screen, dialog will be cancelled.
overlayInfo.setCancelable(true);
// Setting the content using prepared XML layout file.
overlayInfo.setContentView(R.layout.info_overlay);
overlayInfo.show();
结果
以下是上述解决方案的屏幕截图。注意TextView
超过ActionBar
。
关于解决方案的几点说明
如果您有一个专门的按钮来关闭教程,您可以使用setCancelable(false)
来避免教程意外关闭。
此解决方案适用于任何主题和任何操作栏解决方案(操作系统提供的Android 支持库 或 ActionBar Sherlock)
其他解决方案/帮助者
看看Showcase View library,它专注于以简单的方式创建类似教程的屏幕。但是我不确定它是否可以轻松覆盖操作栏。
【讨论】:
我刚看到..我明天会测试它,但我认为这是正确的!感谢您对我的问题的全面回复。 @Jovan 希望对您有所帮助。请将关于操作栏中项目可见性的第二个问题移至单独发布。它肯定会得到 SO 用户的更多关注。 @vArDo 非常感谢您的解决方案 也可以与普通的 ActionBar 一起使用,并允许进行全屏覆盖。以上是关于如何将覆盖视图放在操作栏上 Sherlock的主要内容,如果未能解决你的问题,请参考以下文章