如何制作此类功能?
我有两个想法,但两个都不知道如何完全实现。
1)在某个操作之后将一个布局显示在另一个布局之上(我不知道该怎么做,也许它不对,因为第一个布局中没有可见元素)然后实现OnClickListener for第二种布局。
2)在布局的顶部画一个矩形,我也做不对。就像我这样做:放入RelativeLayout
<ImageView
android:id="@+id/rectangleIv"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
借鉴活动
ShapeDrawable line = new ShapeDrawable(new RectShape());
line.setIntrinsicHeight(200);
line.setIntrinsicWidth(150);
line.getPaint().setColor(Color.BLACK);
image.setBackgroundDrawable(line);
但是在所有RelativeLayout元素中,高度和宽度都是fill_parent,这个矩形不会覆盖它们,结果只是改变了背景颜色。问题是不推荐使用setBackgroundDrawable。
UPD 自定义对话框解决问题
protected void showCustomDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
LayoutInflater inflater = this.getLayoutInflater();
customDialog = builder.setView(inflater.inflate(R.layout.custom_dialog, null)).create();
WindowManager.LayoutParams lp = customDialog.getWindow().getAttributes();
lp.width = WindowManager.LayoutParams.FILL_PARENT;
lp.height = WindowManager.LayoutParams.FILL_PARENT;
lp.dimAmount = 0.4f;
customDialog.getWindow().setAttributes(lp);
customDialog.show();
}
答案 0 :(得分:2)
使用此设计创建自定义对话框(http://developer.android.com/guide/topics/ui/dialogs.html#CustomLayout),然后将true设置为setCanceledOnTouchOutside(true)
和setCanceledOnTouchOutside(true)
希望有所帮助
<强>更新强>:
首先在style.xml文件中创建名称为 CustomDialogTheme 的样式,并添加颜色 TransparentGrey ,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="TransparentGrey">#7F000000</color>
<style name="CustomDialogTheme" parent="@android:style/Theme.Dialog">
<item name="android:windowBackground">@color/TransparentGrey</item>
<item name="android:windowIsFloating">false</item>
<item name="android:windowNoTitle">true</item>
</style>
</resources>
第二次创建对话框的布局( R.layout.customdialog ):
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/iTouchEveryWhere"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:orientation="vertical">
<!-- ImageView or TextView with "Touch everywhere to continue..." -->
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:clickable="false"
/>
</RelativeLayout>
然后按如下方式对对话框进行编码:
final Dialog dialog = new Dialog(YourCurrentActivity.this,
R.style.CustomDialogTheme);
dialog.setContentView(R.layout.dialog_fichaarticle);
dialog.setCancelable(true);
dialog.setCanceledOnTouchOutside(true);
RelativeLayout rlTouchEveryWhere = (RelativeLayout) dialog.findViewById(R.id.iTouchEveryWhere)
rlTouchEveryWhere.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
dialog.show();
答案 1 :(得分:1)
在XML中为您的Root布局指定一个id,如下所示:
<LinearLayout android:id="@+id/root_layout" //relative layout
在你的活动的onCreate中,
LinearLayout layout=(LinearLayout)findViewById(R.id.root_layout);
并将OnClickListener
设置为布局。