4

如何制作这样的功能?

在此处输入图像描述

我有两个想法,但都不知道如何完全实现。

1)在某个动作之后显示一个布局在另一个之上(我不知道该怎么做,也许它不正确,因为第一个布局没有可见元素),然后为第二个布局实现 OnClickListener .

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();
}
4

2 回答 2

3

使用此设计制作一个自定义对话框(http://developer.android.com/guide/topics/ui/dialogs.html#CustomLayout),然后设置为 truesetCanceledOnTouchOutside(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();
于 2013-10-15T08:39:31.470 回答
2

在 XML 中为您的 Root 布局提供一个 id,如下所示:

<LinearLayout android:id="@+id/root_layout" //relative layout

在您的活动的 onCreate 中,

LinearLayout layout=(LinearLayout)findViewById(R.id.root_layout);

并设置OnClickListener为布局。

于 2013-10-15T07:55:59.063 回答