0

在此处输入图像描述我有一个需要全屏打开对话框的屏幕,但它应该位于底部标签栏的上方。

用于使对话框出现在整个屏幕中的代码如下:

WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(dialog.getWindow().getAttributes());
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.MATCH_PARENT;
dialog.show();
dialog.getWindow().setAttributes(lp);

但是这段代码为我提供了整个屏幕中隐藏底部标签栏的对话框。可以请任何人帮助我吗?

如裁剪图像所示,我想要全屏底部标签栏上方的对话框。

4

2 回答 2

1

尝试这个,

在 onCreate 中使用 [这将为您提供屏幕高度]:-

    Display display = getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    int screenHeight = size.y;

在 onResume 中使用 [这将为您提供标签栏高度]

 ViewTreeObserver observer = tabBar.getViewTreeObserver();
        observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                int tabBarHeight= tabBar.getHeight();
            tabBar.getViewTreeObserver().removeGlobalOnLayoutListener(
                        this);
            }
        });

现在对于我们的对话框高度,使用 [为 screenHeight 和 tabBarHeight 创建类变量]:-

WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(dialog.getWindow().getAttributes());
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = screenHeight -tabBarHeight;
dialog.show();
dialog.getWindow().setAttributes(lp);
于 2017-01-05T14:35:03.957 回答
0

如果您想完全控制对话框,这很容易,只需创建一个自定义对话框。您将需要一个 XML 文件和一个方法,无论您想要使用自定义对话框的任何活动,这里是 XML 的代码和下面的方法。新建 XML 文件右键单击 res -> 新建 -> XML(靠近底部)-> 布局 XML 文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_lightGray"
tools:context="com.example.dwight.pwkeeper.MainActivity">

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="84dp"
    android:background="@color/color_darkGray"
    android:minHeight="?attr/actionBarSize">

    <ImageView
        android:id="@+id/imageTB"
        android:layout_width="70dp"
        android:layout_height="wrap_content"
        android:paddingBottom="2dp"
        android:paddingLeft="2dp"
        android:paddingRight="2dp"
        android:paddingTop="4dp"
        android:src="@drawable/lockgold" />

    <TextView
        android:text="@string/app_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/toolbar"
        android:layout_alignParentStart="true"
        android:layout_marginStart="30dp"
        android:layout_marginBottom="20dp"
        android:id="@+id/tvMA"
        android:textStyle="bold"
        android:textColor="@color/color_White"
        android:textSize="28sp" />

</android.support.v7.widget.Toolbar>

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/toolbar"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:id="@+id/RLscreen">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Password"
        android:layout_marginLeft="100dp"
        android:layout_marginTop="60dp"
        android:id="@+id/tvPW"
        android:textColor="@android:color/black"
        android:textStyle="bold"
        android:textSize="26sp"/>

    <EditText
        android:id="@+id/etPW"
        android:layout_width="260dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="220dp"
        android:layout_marginTop="50dp"
        android:backgroundTint="@color/color_Black"
        android:cursorVisible="true"
        android:ems="10"
        android:gravity="bottom"
        android:inputType="text"
        android:textColor="@android:color/black"
        android:textSize="26sp"
        android:textStyle="bold" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Confirm Password"
        android:layout_marginTop="140dp"
        android:id="@+id/tvCPW"
        android:textColor="@android:color/black"
        android:textStyle="bold"
        android:textSize="26sp"/>

    <EditText
        android:id="@+id/etCPW"
        android:layout_width="260dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="220dp"
        android:layout_marginTop="130dp"
        android:backgroundTint="@color/color_Black"
        android:ems="10"
        android:inputType="text"
        android:textColor="@android:color/black"
        android:textSize="26sp"
        android:textStyle="bold" />

    <Button
        android:id="@+id/btnSave"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="220dp"
        android:layout_marginTop="220dp"
        android:text="SAVE"
        android:textColor="@color/color_lightGray"
        android:textSize="30sp"
        android:textStyle="bold" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="220dp"
        android:layout_marginTop="220dp"
        android:id="@+id/btnEnter"
        android:textColor="@color/color_lightGray"
        android:textStyle="bold"
        android:textSize="30sp"
        android:visibility="invisible"
        android:onClick="onEnter"
        android:text="ENTER" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="false"
        android:layout_alignParentStart="false"
        android:layout_marginTop="350dp"
        android:src="@drawable/pwkeyb600" />

</RelativeLayout>

    private void doCustom(){
    /* This method uses the custom_dialog.xml file created for greater control over
       the styling of the Custom Alert Dialog for various screen sizes and to be
       able to set the text size of the dialog message text
     */

    final Dialog openDialog = new Dialog(context);
    openDialog.setContentView(R.layout.custom_dialog);
    Button btnYES = (Button)openDialog.findViewById(R.id.btnYES);
    Button btnNO = (Button)openDialog.findViewById(R.id.btnNO);

    // if YES delete Master Password from TABLE_MPW
    btnYES.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Write your code here to invoke YES event
            db = helper.getReadableDatabase();

            String q = "SELECT * FROM masterPW";
            Cursor cursor = db.rawQuery(q,null);
            // Above query gets TABLE_PW data from Col_IDI
            // TABLE_PW will only ever have one row of data

            int rowID = 99;
            if(cursor.moveToFirst()){
                rowID = cursor.getInt(cursor.getColumnIndex(Col_IDI));
                str = cursor.getString(cursor.getColumnIndex(Col_MPW));
            }
            cursor.close();

            // Line of code below WORKS deletes entire TABLE <=====
            // Not a recommended way to re-set the master password
            // db.delete(TABLE_PW, null, null);

            String num = Integer.toString(rowID);

            db.delete(TABLE_PW, Col_IDI + " = ?", new String[] { num });
            db.close();
            openDialog.dismiss();

            Intent intentYY = new Intent(DetailsActivity.this, MainActivity.class );
            startActivity( intentYY );

            Toast.makeText(getApplicationContext(), "Change the Password", Toast.LENGTH_SHORT).show();
        }
    });

    btnNO.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            openDialog.dismiss();

            Intent intent = new Intent( DetailsActivity.this, ListActivity.class );
            startActivity( intent );

            Toast.makeText(getApplicationContext(), "Password NOT Changed", Toast.LENGTH_SHORT).show();
        }
    });

    openDialog.show();
}
于 2017-09-22T21:28:35.667 回答