Как установить диалог в полноэкранном режиме над нижней панелью вкладок?

введите описание изображения здесь У меня есть экран, на котором мне нужно открыть диалоговое окно в полноэкранном режиме, но оно должно быть над нижней панелью вкладок.

Код, используемый для отображения диалогового окна на всем экране, выглядит следующим образом:

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

Но этот код предоставляет мне диалоговое окно на весь экран, скрывающее нижнюю панель вкладок. Может кто-нибудь помочь мне в этом?

Как показано на обрезанном изображении, я хочу диалог над нижней панелью вкладок в полноэкранном режиме.

2 ответа

Попробуй это,

При использовании 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);

Это легко, если вы хотите полностью контролировать диалог, просто создайте его. Вам понадобится XML-файл и метод для любого действия, которое вы хотите использовать в настраиваемом диалоге. Вот код для XML и метод ниже. Новый XML-файл ВПРАВО щелкните res -> New -> XML (внизу)-> Layout 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();
}
Другие вопросы по тегам