触摸任何地方继续

时间:2013-10-15 07:49:21

标签: android

如何制作此类功能?

enter image description here

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

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

2 个答案:

答案 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设置为布局。