使用 FrameLayout 遮蔽和重叠 AppBarLayout
Shade and overlap AppBarLayout with FrameLayout
我正在为我的毕业考试制作一个应用程序。
我有一个具有 60% alpha 的黑色背景的框架布局(以遮蔽它下面的所有内容)。我希望框架布局与应用栏布局和浮动按钮重叠。
我发现的唯一一个类似的问题是 this one,但它对我的项目不起作用,因为据我了解,他只想重叠一个 FrameLayout。
这是带有浮动按钮的 AppBarLayout:
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
<RelativeLayout
android:id="@+id/header"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:elevation="4dp">
[...]
</RelativeLayout>
</android.support.design.widget.AppBarLayout>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
app:srcCompat="@drawable/ic_add_white" />
上面的相对布局里面有我需要的一点文字
这里是 FrameLayout:
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/blackBackground"
android:id="@+id/addJobFrame"
android:visibility="visible"
app:behavior_overlapTop="100dp">
[...]
</FrameLayout>
请注意,所有内容都在 CoordinatorLayout 中。
我想要的效果是this picture右边的效果,其实在frame布局中我已经包含了一个外部xml布局。
作为替代方案,您知道其他方法吗?
根据您所附的图片,这似乎是一种习惯 AlartDialog
。
创建自定义对话框:
- 为自定义对话框设计自定义布局XML
dialog_layout.xml
。
- 使用
AlertDialog.Builder.setView()
方法将此自定义布局设置为 AlertDialog
。
这是一个完整的例子:
dialog_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/editText_dateStart"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/colorPrimaryDark"
android:textColorHint="@color/colorPrimary"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:padding="20dp"
android:hint="Start Date"
android:inputType="date" />
<EditText
android:id="@+id/editText_dateEnd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/colorPrimaryDark"
android:textColorHint="@color/colorPrimary"
android:layout_below="@id/editText_dateStart"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:padding="20dp"
android:hint="End Date"
android:inputType="date" />
<Button
android:id="@+id/button_ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:layout_marginBottom="15dp"
android:text="ACCETTO"
android:textColor="#ffffff"
android:background="#34ff00"
android:layout_below="@id/editText_dateEnd"
android:layout_alignParentRight="true"/>
</RelativeLayout>
YourActivity.java
AlertDialog.Builder dialogBuilder;
AlertDialog dialog;
LayoutInflater inflater = activity.getLayoutInflater();
View dialogLayout = inflater.inflate(R.layout.dialog_layout, null);
// Views
Button button = (Button) dialogLayout.findViewById(R.id.button_ok);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Do something
}
});
dialogBuilder = new AlertDialog.Builder(activity);
dialogBuilder.setView(dialogLayout);
dialog = dialogBuilder.create();
dialog.show();
我正在为我的毕业考试制作一个应用程序。
我有一个具有 60% alpha 的黑色背景的框架布局(以遮蔽它下面的所有内容)。我希望框架布局与应用栏布局和浮动按钮重叠。
我发现的唯一一个类似的问题是 this one,但它对我的项目不起作用,因为据我了解,他只想重叠一个 FrameLayout。
这是带有浮动按钮的 AppBarLayout:
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
<RelativeLayout
android:id="@+id/header"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:elevation="4dp">
[...]
</RelativeLayout>
</android.support.design.widget.AppBarLayout>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
app:srcCompat="@drawable/ic_add_white" />
上面的相对布局里面有我需要的一点文字
这里是 FrameLayout:
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/blackBackground"
android:id="@+id/addJobFrame"
android:visibility="visible"
app:behavior_overlapTop="100dp">
[...]
</FrameLayout>
请注意,所有内容都在 CoordinatorLayout 中。
我想要的效果是this picture右边的效果,其实在frame布局中我已经包含了一个外部xml布局。
作为替代方案,您知道其他方法吗?
根据您所附的图片,这似乎是一种习惯 AlartDialog
。
创建自定义对话框:
- 为自定义对话框设计自定义布局XML
dialog_layout.xml
。 - 使用
AlertDialog.Builder.setView()
方法将此自定义布局设置为AlertDialog
。
这是一个完整的例子:
dialog_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/editText_dateStart"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/colorPrimaryDark"
android:textColorHint="@color/colorPrimary"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:padding="20dp"
android:hint="Start Date"
android:inputType="date" />
<EditText
android:id="@+id/editText_dateEnd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/colorPrimaryDark"
android:textColorHint="@color/colorPrimary"
android:layout_below="@id/editText_dateStart"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:padding="20dp"
android:hint="End Date"
android:inputType="date" />
<Button
android:id="@+id/button_ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:layout_marginBottom="15dp"
android:text="ACCETTO"
android:textColor="#ffffff"
android:background="#34ff00"
android:layout_below="@id/editText_dateEnd"
android:layout_alignParentRight="true"/>
</RelativeLayout>
YourActivity.java
AlertDialog.Builder dialogBuilder;
AlertDialog dialog;
LayoutInflater inflater = activity.getLayoutInflater();
View dialogLayout = inflater.inflate(R.layout.dialog_layout, null);
// Views
Button button = (Button) dialogLayout.findViewById(R.id.button_ok);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Do something
}
});
dialogBuilder = new AlertDialog.Builder(activity);
dialogBuilder.setView(dialogLayout);
dialog = dialogBuilder.create();
dialog.show();