设置视图时,Android警报对话框空格

时间:2014-08-15 12:47:48

标签: android alertdialog

我有一个问题。我做了一个警告对话框,显示一条消息和视图,其中包含"不再显示"复选框。当我在Android KK上运行这个应用程序时,它显示正常,但是当我在Android JB上运行时它会向我显示一个空白区域,就像在这个图像上一样(当视图只包含一个线性时,我也得到这个空白区域高度为0dp的布局): http://foto.modelbouwforum.nl/images/2014/08/15/Screenshot2014-08-15-14-33-40.png

警报对话框的代码:

final SharedPreferences sharedPreferences=getSharedPreferences("appPrefs", Context.MODE_PRIVATE);
        if(!sharedPreferences.getBoolean("isTutorialMainScreenChecked", false)){
            View checkBoxView = View.inflate(MainScreenHandler.this, R.layout.checkbox_alert_dialog,null);
            checkBox = (CheckBox) checkBoxView.findViewById(R.id.checkbox);
            AlertDialog.Builder builder=new AlertDialog.Builder(this);
            builder.setMessage(getString(R.string.alertDialog_main_screen_tutorial));
            builder.setCancelable(false);
            builder.setView(checkBoxView);
            builder.setPositiveButton("Ok",
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            if(checkBox.isChecked()){
                                SharedPreferences.Editor editor=sharedPreferences.edit();
                                editor.putBoolean("isTutorialMainScreenChecked", true);
                                editor.commit();
                            }
                            dialogInterface.dismiss();
                        }
                    });
            builder.setNegativeButton(getString(R.string.alertDialog_cancel),
                    new DialogInterface.OnClickListener(){
                        public void onClick(DialogInterface dialogInterface, int i){
                            dialogInterface.cancel();
                        }
                    });
            alertDialog = builder.create();
            alertDialog.show();

这是我的复选框布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:orientation="vertical"
             android:baselineAligned="false">
    <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="#ffff3bb2"/>

    <CheckBox
            style="@android:style/TextAppearance.Small"
            android:textColor="#ff000000"
            android:text="@string/alertDialog_checkbox_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/checkbox"/>
</LinearLayout>

提前致谢

P.S:

这就是它在Android KK上的样子: http://foto.modelbouwforum.nl/images/2014/08/15/QuickMemo2014-08-15-14-42-41.png

3 个答案:

答案 0 :(得分:3)

我查看了API 19中alert_dialog.xml布局的来源,并找到了以下用于插入自定义视图的布局:

<FrameLayout android:id="@+id/customPanel"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1">
    <FrameLayout android:id="@+android:id/custom"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="5dip"
        android:paddingBottom="5dip" />
</FrameLayout>

然后我尝试设置背景以查看哪个视图占用空间。 customPanel为红色,自定义视图为绿色。

AlertDialog d = builder.create();
d.show();

View v = (View)d.getWindow().findViewById(android.R.id.custom).getParent();
v.setBackgroundColor(Color.RED);

enter image description here

此图片表示customPanel应该有一些填充,或custom应该有非零布局参数或其他内容。在检查了那些等于零的属性后,我尝试测试minimumHeight的{​​{1}}并在xxhdpi或64dp上得到192。 此设置会导致框架大于嵌套的自定义视图

我还没弄清楚应用此设置的位置,但这是解决方法:

customPanel

在API 18,19上进行测试。

答案 1 :(得分:0)

您是否尝试过使用填充和边距? 您可以在res / layout-vXX中复制布局并设置特定(负)边距。

答案 2 :(得分:0)

除了v​​okilam的答案:

如果您使用的是android.support.v7.app.AlertDialog。

在API 27上进行了测试(肯定也可以在API 28上使用)

布局:

BackgroundGeolocation.configure({
...
debug: false,
startForeground: false,
...
});

contentPanel和customPanel的<FrameLayout android:id="@+id/contentPanel" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="48dp"> <ScrollView android:id="@+id/scrollView" android:layout_width="match_parent" android:layout_height="wrap_content" android:clipToPadding="false"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <Space android:id="@+id/textSpacerNoTitle" android:visibility="gone" android:layout_width="match_parent" android:layout_height="@dimen/dialog_padding_top_material" /> <TextView android:id="@+id/message" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingEnd="?attr/dialogPreferredPadding" android:paddingStart="?attr/dialogPreferredPadding" style="@style/TextAppearance.Material.Subhead" /> <Space android:id="@+id/textSpacerNoButtons" android:visibility="gone" android:layout_width="match_parent" android:layout_height="@dimen/dialog_padding_top_material" /> </LinearLayout> </ScrollView> </FrameLayout> <FrameLayout android:id="@+id/customPanel" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="48dp"> <FrameLayout android:id="@+id/custom" android:layout_width="match_parent" android:layout_height="wrap_content" /> </FrameLayout> 导致了不必要的空白。

Unwanted space dialog

我所做的是:

android:minHeight="48dp"

结果:

Blank space removed