【问题标题】:How to wrap Dialog Window to Content?如何将对话框窗口包装到内容?
【发布时间】:2014-09-16 19:16:43
【问题描述】:

我正在开发一个对话框,它应该缩小到它的内容,所以,我想在普通视图中获得类似wrap_content 的行为,但对于普通的Dialog。 这就是我想在对话框窗口中显示的内容

在对话框窗口中应该是这样的

但这是我实际得到的

你能告诉我我做错了什么吗?

提前谢谢你。

这是我的代码

...
final Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
dialog.setContentView(R.layout.advanced_options);
dialog.setTitle(titleId);

// Stuff referred to builder
AlertDialog.Builder builder ...
...

int type = WindowManager.LayoutParams.TYPE_INPUT_METHOD;
WindowManager.LayoutParams w_layout_params = new WindowManager.LayoutParams(type);

dialog.getWindow().setAttributes(w_layout_params );
...
builder.create();
dialog.show();

advanced_options.xml 布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relLayout_advancedOptions"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:background="@drawable/border_advanced_options"
    android:divider="?android:listSeparatorTextViewStyle"
    android:showDividers="" >    

    <TextView
        android:id="@+id/speed_limit"
        style="?android:attr/listSeparatorTextViewStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="20dp"
        android:text="@string/speed_limit"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textColor="@color/black"
        android:textSize="14dp" />

    <TextView
        android:id="@+id/speed_limit_alert"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/speed_limit"
        android:layout_marginLeft="15dp"
        android:layout_marginTop="20dp"
        android:text="@string/speed_limit_alert"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:textColor="@color/black" />


    <TextView
        android:id="@+id/percent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/speed_limit_alert"
        android:layout_toRightOf="@+id/speed_limit_alert_edit_text"
        android:text="@string/percentage_symbol"
        android:textColor="@color/black" />

    <TextView
        android:id="@+id/minimum_speed"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/speed_limit_alert"
        android:layout_below="@+id/speed_limit_alert_edit_text"
        android:layout_marginTop="15dp"
        android:text="@string/minimum_speed"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:textColor="@color/black" />

    <EditText
        android:id="@+id/minimum_speed_edit_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/minimum_speed"
        android:layout_alignBottom="@+id/minimum_speed"
        android:layout_alignLeft="@+id/speed_limit_alert_edit_text"
        android:ems="3"
        android:inputType="number"
        android:textColor="@color/black"
        android:text="6" />

    <TextView
        android:id="@+id/minimum_speed_unit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/minimum_speed"
        android:layout_alignLeft="@+id/percent"
        android:text="@string/metric_speed_unit"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:textColor="@color/black" />

    <TextView
        android:id="@+id/maximum_speed"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/minimum_speed"
        android:layout_below="@+id/minimum_speed_edit_text"
        android:layout_marginTop="15dp"
        android:text="@string/maximum_speed"
        android:textAppearance="?android:attr/textAppearanceSmall" 
        android:textColor="@color/black"/>

    <EditText
        android:id="@+id/maximum_speed_edit_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/maximum_speed"
        android:layout_alignBottom="@+id/maximum_speed"
        android:layout_alignLeft="@+id/minimum_speed_edit_text"
        android:ems="3"
        android:inputType="number"
        android:textColor="@color/black"
        android:text="18" />

    <TextView
        android:id="@+id/maximum_speed_unit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/maximum_speed"
        android:layout_toRightOf="@+id/maximum_speed_edit_text"
        android:text="@string/metric_speed_unit"
        android:textAppearance="?android:attr/textAppearanceSmall" 
        android:textColor="@color/black"/>

    <TextView
        android:id="@+id/mobile_device_performance"
        style="?android:attr/listSeparatorTextViewStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/maximum_speed_edit_text"
        android:layout_marginTop="20dp"
        android:gravity="center_vertical"
        android:text="@string/mobile_device_performance"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textColor="@color/black"
        android:textSize="14dp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/maximum_number_objects"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/maximum_speed"
        android:layout_below="@+id/mobile_device_performance"
        android:layout_marginTop="20dp"
        android:text="@string/maximum_objects_in_view"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:textColor="@color/black" />

    <EditText
        android:id="@+id/maximum_number_objects_edit_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/maximum_number_objects"
        android:layout_alignBottom="@+id/maximum_number_objects"
        android:layout_marginLeft="10dp"
        android:layout_toRightOf="@+id/maximum_number_objects"
        android:ems="3"
        android:inputType="number"
        android:text="450"
        android:textColor="@color/black" />

    <EditText
        android:id="@+id/speed_limit_alert_edit_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/percent"
        android:layout_alignBottom="@+id/percent"
        android:layout_alignLeft="@+id/maximum_number_objects_edit_text"
        android:ems="3"
        android:inputType="number"
        android:text="42"
        android:textColor="@color/black" >

        <requestFocus />
    </EditText>

    <View
        android:id="@+id/void_view"
        android:layout_width="match_parent"
        android:layout_height="20dp"
        android:layout_alignParentLeft="true"
        android:layout_alignRight="@+id/maximum_speed_unit"
        android:layout_below="@+id/maximum_number_objects" />

【问题讨论】:

    标签: android android-layout android-alertdialog android-dialog android-windowmanager


    【解决方案1】:

    RelativeView 的宽度更改为match_parent

    您要查找的是match_parent 的行为。

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relLayout_advancedOptions"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:background="@drawable/border_advanced_options"
    android:divider="?android:listSeparatorTextViewStyle"
    android:showDividers="" > 
    

    注意: android 中的wrap_content 指定视图根据需要使用尽可能少的空间,这就是您得到的行为。

    【讨论】:

    • 不,我想,你很困惑,我想要,对话框窗口,父级,获取其内容的维度,= 子级,advanced_options.xml 布局。请看一下在图片。问候
    • 我的建议将通过将内容扩展到对话框来消除差距。我知道您想要的是减小对话框的大小。这不起作用?
    • Dheeraj,我可以做“match_parent”,但我想要的是窗口采用我的布局的尺寸而不是相反。我知道,我必须执行对话框的WindowManager.LayoutParams,但它不起作用。顺便说一句,我忘记在我的第一篇文章中写 w_layout_params.width = WindowManager.LayoutParams.WRAP_CONTENTw_layout_params.height= WindowManager.LayoutParams.WRAP_CONTENT,但我已经尝试过,但也没有用。
    【解决方案2】:

    我可以将对话框(不是 AlertDialog!)调整为我的自定义布局,但我无法*设置标题或按钮,因此我得到了在 requestFeature 之前设置内容的异常原因,然后我决定自定义我的对话框,并在我的自定义布局中包含按钮和标题。

    *我已经研究过,如果我们在 OnCreate 中定义对话框,甚至在 OnCreateDialog 中定义对话框,就有可能克服这个问题,但我有一个额外的类仅用于静态对话框方法,对我来说没有解决方案。

    另外我发布了对我有用的东西,也许有人也有用。

    现在我的自定义对话框如下所示

    这里是要测试的代码。

    /**
     * @param c
     *            the Context
     * @return the about dialog
     */
    public static void getAdvancedOptions(final Activity activity) {
    
        Log.i("TAG", "Dialogs::getAdvancedOptions:: 0");
        //settings            = session.getSettings();
    
        // Creation of a Dialog with Frame and title Characteristics
        final Dialog dialog = new Dialog(activity);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setContentView(R.layout.advanced_options_expanded);
    
    
        // Here we control the validity of "edit_text" Fields
        speed_limit_alert   = (EditText)dialog.findViewById(R.id.speed_limit_alert_edit_text);                                          
        minimum_speed       = (EditText)dialog.findViewById(R.id.minimum_speed_edit_text);                
        maximum_speed       = (EditText)dialog.findViewById(R.id.maximum_speed_edit_text);               
        max_objects_in_view = (EditText)dialog.findViewById(R.id.maximum_number_objects_edit_text);
    
        //showAdvancedOptions("getAdvancedOptions 1::");
    
        // First we set the "SharedPreferences"-saved values on EditText Fields                
        performEditText(speed_limit_alert,Constants.MIN_PERCENTAGE, Constants.MAX_PERCENTAGE,"speed_limit_alert"); 
        performEditText(minimum_speed, "","", "minimum_speed"); 
        performEditText(maximum_speed, "","","maximum_speed"); 
        performEditText(max_objects_in_view, "","","max_objects_in_view");  
    
        //showAdvancedOptions("getAdvancedOptions 4::");
    
        ok_button     = (Button)dialog.findViewById(R.id.ok_button);                                        
        cancel_button = (Button)dialog.findViewById(R.id.cancel_button);  
    
    
        // Definition of "OK" Button for the Dialog     
        ok_button.setOnClickListener(new OnClickListener(){
    
            @Override
            public void onClick(View v) {
                Log.i("TAG", "Dialogs::getAdvancedOptions::onClick");
                if ( dialog != null && dialog.isShowing()) {
                    dialog.dismiss();
                }
    
            }
        });     
    
        cancel_button.setOnClickListener(new OnClickListener(){
    
            @Override
            public void onClick(View v) {
                Log.i("TAG", "Dialogs::getAdvancedOptions::onClick");
                if ( dialog != null && dialog.isShowing()) {
                    dialog.dismiss();
                }
    
            }
        }); 
    
        dialog.show();
    
    }
    
    private static void performEditText(EditText edit_text, final String min_value, final String max_value, final String id) {
    
        String edit_text_value = edit_text.getText().toString();
        Log.i("TAG", "Dialogs::performEditText:: id: "+ id +" edit_text_value: "+edit_text_value+ " (min_value,max_value)=("+min_value+","+max_value+")");
    
        TextWatcher textWatcher = new TextWatcher() {
            public void afterTextChanged(Editable s) {
                int i = 0;
                Log.i("TAG","Dialogs::performEditText::afterTextChanged:id: "+ id +" - 0 : s: "+s.toString());
    
                int length = s.length();
    
                if ( length == 0 )
                    i = 0;
                else if ( length < 3 ) {
                        if ( s.charAt(0) == '0')
                            s.delete(1, length );
    
                        i = Integer.parseInt(s.toString());
                        Log.i("TAG","Dialogs::performEditText::afterTextChanged:id: "+ id +" - 1a : s: "+s+", i:"+i);
                } else {
                    //String hundred = "100";
    
                    String s_value = s.toString();
                    Log.i("TAG","Dialogs::performEditText::afterTextChanged: id: "+ id +" - 1b : s: "+s+", i:"+i);
    
                    if ( ( min_value != null ) && ( min_value.length() != 0 ) && ( max_value != null) && ( max_value.length() != 0 )) {
    
    
                        if ( !s_value.equalsIgnoreCase(max_value))
                            s.delete(2, length );
    
                    }
    
                    i = Integer.parseInt(s.toString());
                    Log.i("TAG","Dialogs::performEditText::afterTextChanged: id: "+ id +" - 2b : i: "+i);                   
                }
                if (i >= 0 && i <= 100) {
                    Log.i("TAG","Dialogs::performEditText::afterTextChanged: id: "+ id +" - 3 : (i >= 0 && i <= 100): i: "+i);
                    //speed_limit_alert.setText(s); // This ensures 0-100 value for speed_limit_alert
                }               
                Log.i("TAG","Dialogs::performEditText::afterTextChanged: id: "+ id +" - 4 : i: "+i);
    
            }
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                Log.i("TAG","Dialogs::performEditText::beforeTextChanged: id: "+ id +" s: "+s); 
            }
    
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                Log.i("TAG","Dialogs::performEditText::onTextChanged: id: "+ id +" s: "+s);
            }
        };
    
    
        edit_text.addTextChangedListener(textWatcher);  
    
    
    }
    
    
    
    private static void showAdvancedOptions(String entryPoint) {
        String s_l_a = speed_limit_alert.getText().toString();  
        Log.i("TAG", entryPoint + "Dialogs::setAdvancedOptions:: s_l_a: "+s_l_a);
        String mi_s = minimum_speed.getText().toString();   
        Log.i("TAG", entryPoint + "Dialogs::setAdvancedOptions:: mi_s: "+mi_s);
        String ma_s = maximum_speed.getText().toString();   
        Log.i("TAG", entryPoint + "Dialogs::setAdvancedOptions:: ma_s: "+ma_s);
        String m_o_i_v = max_objects_in_view.getText().toString();  
        Log.i("TAG", entryPoint + "Dialogs::setAdvancedOptions:: m_o_i_v: "+m_o_i_v);       
    
    }
    

    还有布局

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:background="@drawable/border_advanced_options"
        android:divider="?android:listSeparatorTextViewStyle"
        android:showDividers="middle" >  
    
    <RelativeLayout
        android:id="@+id/relLayout_advancedOptions"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/white"
        android:divider="?android:listSeparatorTextViewStyle"
        android:orientation="vertical"
        android:showDividers="" >
    
        <TextView
            android:id="@+id/speed_limit"
            style="?android:attr/listSeparatorTextViewStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/void_view_0"
            android:layout_marginTop="10dp"
            android:text="@string/speed_limit"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:textColor="@color/black"
            android:textSize="14dp" />
    
        <TextView
            android:id="@+id/speed_limit_alert"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/speed_limit"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"
            android:text="@string/speed_limit_alert"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textColor="@color/black" />
    
        <TextView
            android:id="@+id/percent"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/speed_limit_alert"
            android:layout_toRightOf="@+id/speed_limit_alert_edit_text"
            android:text="@string/percentage_symbol"
            android:textColor="@color/black" />
    
        <TextView
            android:id="@+id/minimum_speed"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/speed_limit_alert"
            android:layout_below="@+id/speed_limit_alert_edit_text"
            android:layout_marginTop="15dp"
            android:text="@string/minimum_speed"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textColor="@color/black" />
    
        <EditText
            android:id="@+id/minimum_speed_edit_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/minimum_speed"
            android:layout_alignBottom="@+id/minimum_speed"
            android:layout_alignLeft="@+id/speed_limit_alert_edit_text"
            android:ems="3"
            android:inputType="number"
            android:text="6"
            android:textColor="@color/black" />
    
        <TextView
            android:id="@+id/minimum_speed_unit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/minimum_speed"
            android:layout_alignLeft="@+id/percent"
            android:paddingRight="5dp"
            android:text="@string/metric_speed_unit"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textColor="@color/black" />
    
        <TextView
            android:id="@+id/maximum_speed"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/minimum_speed"
            android:layout_below="@+id/minimum_speed_edit_text"
            android:layout_marginTop="15dp"
            android:text="@string/maximum_speed"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textColor="@color/black" />
    
        <EditText
            android:id="@+id/maximum_speed_edit_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/maximum_speed"
            android:layout_alignBottom="@+id/maximum_speed"
            android:layout_alignLeft="@+id/minimum_speed_edit_text"
            android:ems="3"
            android:inputType="number"
            android:text="18"
            android:textColor="@color/black" />
    
        <TextView
            android:id="@+id/maximum_speed_unit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/maximum_speed"
            android:layout_alignRight="@+id/minimum_speed_unit"
            android:layout_toRightOf="@+id/maximum_speed_edit_text"
            android:paddingRight="5dp"
            android:text="@string/metric_speed_unit"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textColor="@color/black" />
    
        <TextView
            android:id="@+id/mobile_device_performance"
            style="?android:attr/listSeparatorTextViewStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/maximum_speed_edit_text"
            android:layout_marginTop="20dp"
            android:gravity="center_vertical"
            android:text="@string/mobile_device_performance"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:textColor="@color/black"
            android:textSize="14dp"
            android:textStyle="bold" />
    
        <TextView
            android:id="@+id/maximum_number_objects"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/maximum_speed"
            android:layout_below="@+id/mobile_device_performance"
            android:layout_marginBottom="10dp"
            android:layout_marginTop="10dp"
            android:text="@string/maximum_objects_in_view"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textColor="@color/black" />
    
        <EditText
            android:id="@+id/maximum_number_objects_edit_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/maximum_number_objects"
            android:layout_alignBottom="@+id/maximum_number_objects"
            android:layout_marginLeft="10dp"
            android:layout_toRightOf="@+id/maximum_number_objects"
            android:ems="3"
            android:inputType="number"
            android:text="450"
            android:textColor="@color/black" />
    
        <EditText
            android:id="@+id/speed_limit_alert_edit_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/percent"
            android:layout_alignBottom="@+id/percent"
            android:layout_alignLeft="@+id/maximum_number_objects_edit_text"
            android:digits="0123456789"
            android:ems="3"
            android:inputType="number"
            android:text="42"
            android:textColor="@color/black" >
    
            <requestFocus />
        </EditText>
    
        <View
            android:id="@+id/void_view"
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:layout_alignParentLeft="true"
            android:layout_alignRight="@+id/lin_layout_buttons"
            android:layout_below="@+id/maximum_number_objects"
            android:background="@color/black" />
    
        <TextView
            android:id="@+id/title_advanced_options"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_alignRight="@+id/minimum_speed_unit"
            android:drawableLeft="@drawable/ic_launcher_48"
            android:drawableRight="@drawable/ic_action_settings_48"
            android:gravity="center|center_vertical"
            android:paddingLeft="5dp"
            android:text="Advanced Options"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:textColor="@color/blue" />
    
        <View
            android:id="@+id/void_view_0"
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:layout_alignParentLeft="true"
            android:layout_alignRight="@+id/title_advanced_options"
            android:layout_below="@+id/title_advanced_options"
            android:background="@color/black" />
        <LinearLayout
            android:id="@+id/lin_layout_buttons"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignRight="@+id/minimum_speed_unit"
            android:layout_alignTop="@+id/void_view"
            android:weightSum="3" >
    
            <Button
                android:id="@+id/ok_button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/maximum_number_objects"
                android:layout_alignRight="@+id/speed_limit_alert"
                android:layout_below="@+id/maximum_number_objects_edit_text"
                android:layout_weight="1.5"
                android:text="OK" />
    
            <Button
                android:id="@+id/cancel_button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignBaseline="@+id/button1"
                android:layout_alignBottom="@+id/button1"
                android:layout_toRightOf="@+id/button1"
                android:layout_weight="1.5"
                android:text="Cancel" />
        </LinearLayout>     
    </RelativeLayout>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多