【问题标题】:Wrong custom-dialog size错误的自定义对话框大小
【发布时间】:2014-12-22 10:21:40
【问题描述】:

我在 android 应用程序中遇到了自定义对话框问题。

我有一个自定义对话框,里面有一个 ListView。 Dialog 本身是 600dp 宽度,ListView 也是 600dp。

问题是对话框超过了那个宽度值:

这是对话框布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="600dp"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <ListView
        android:id="@+id/promotionListView"
        android:layout_width="600dp"
        android:layout_height="400dp"
        android:scrollbarStyle="insideOverlay"
        android:dividerHeight="1dp" />

    <LinearLayout
        android:layout_width="600dp"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/promotion_dialog_abort"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/annulla"/>

        <Button
            android:id="@+id/promotion_dialog_apply"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/applica"/>

    </LinearLayout>
</LinearLayout>

这是单行的布局:(注意布局的宽度和单视图的总和都是600dp)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="600dp"    <-- I tried "wrap_content" and "match_parent" with the same result
    android:layout_height="wrap_content">

    <CheckBox
        android:id="@+id/promotionCheck"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:gravity="center"
        android:layout_gravity="center" />

    <TextView
        android:id="@+id/promotionText"
        android:layout_width="350dp"
        android:layout_height="50dp"
        android:gravity="center_vertical"
        android:layout_gravity="center"
        android:textColor="@android:color/white"
        android:textSize="@dimen/customerdetail_headertextsize" />

    <TextView
        android:id="@+id/promotionFactor"
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:gravity="center_vertical|right"
        android:layout_gravity="center"
        android:textColor="@android:color/white"
        android:textSize="@dimen/customerdetail_headertextsize" />

    <TextView
        android:id="@+id/promotionPrice"
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:gravity="center_vertical|right"
        android:layout_gravity="center"
        android:textColor="@android:color/white"
        android:textSize="@dimen/customerdetail_headertextsize" />

</LinearLayout>

最后是自定义对话框类

public class PromotionDialog extends Dialog {

private boolean authCode;
private Set<OrderDetailDiscount> promotions;
private List<OrderDetailDiscount> selectedPromotions;

private ListView mainListView;

public Response response = Response.CANCEL;

private Button buttonAbort;
private Button buttonAccept;

public PromotionDialog(Context context, boolean authCode, Set<OrderDetailDiscount> promotions) {
    super(context);

    this.authCode = authCode;
    this.promotions = promotions;

    selectedPromotions = new ArrayList<>();

    setTitle("Promozioni");
    setContentView(R.layout.isfa_promotiondialog);

    buttonAbort = (Button) findViewById(R.id.promotion_dialog_abort);
    buttonAccept = (Button) findViewById(R.id.promotion_dialog_apply);
}

}

我真的不明白问题出在哪里,我尝试手动调整标题栏的大小但没有成功...我可以尝试什么?

【问题讨论】:

    标签: android xml android-layout listview dialog


    【解决方案1】:

    您应该使用wrap_contentmatch_parent 而不是固定的宽度/高度值,以支持不同的屏幕尺寸并模拟表格行,您可以将layout_weight 应用于水平LinearLayout 的每个子(列) . 此外,我建议您使用AlertDialog.Builder API。

    以下是我尝试使用我的建议重新创建您的对话所取得的成果:

    这是代码:

    MainActivity.java

    public class MainActivity extends ActionBarActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            AlertDialog.Builder mBuilder = new AlertDialog.Builder(this);
            mBuilder.setTitle("Discounts");
            mBuilder.setAdapter(new MyAdapter(), null);
            mBuilder.setPositiveButton("OK",new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
    
                }
            });
            mBuilder.setNegativeButton("Cancel",new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
    
                }
            });
            mBuilder.create().show();
        }
    
        class RowItem{
            public String field1;
            public String field2;
            public String field3;
            public RowItem(String f1,String f2, String f3){
                field1=f1;
                field2=f2;
                field3=f3;
            }
        }
    
        private class MyAdapter extends BaseAdapter{
    
            private final ArrayList<RowItem> rows = new ArrayList<RowItem>();
    
            public MyAdapter(){
                rows.add(new RowItem("Sales","1","5%"));
                rows.add(new RowItem("Extra Sales","2","50%"));
                rows.add(new RowItem("Super Sales","3","70%"));
                rows.add(new RowItem("Completely Free","4","100%"));
            }
    
            @Override
            public int getCount(){
                return rows.size();
            }
    
            @Override
            public Object getItem(int p){
                return rows.get(p);
            }
    
            @Override
            public long getItemId(int p){
                return p;
            }
    
            @Override
            public View getView(int position, View v, ViewGroup parent){
               v=getLayoutInflater().inflate(R.layout.row_layout,parent,false);
                LinearLayout row = (LinearLayout)v.findViewById(R.id.linearlayout);
                CheckBox checkBox = (CheckBox)v.findViewById(R.id.checkbox);
                TextView field1 = (TextView)v.findViewById(R.id.field1);
                TextView field2 = (TextView)v.findViewById(R.id.field2);
                TextView field3 = (TextView)v.findViewById(R.id.field3);
                row.setBackgroundColor(Color.parseColor(position%2==0?"#212121":"#424242"));
                RowItem item = rows.get(position);
                field1.setText(item.field1);
                field2.setText(item.field2);
                field3.setText(item.field3);
               return v;
            }
        }
    }
    

    row_layout.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/linearlayout"
        android:orientation="horizontal"
        android:weightSum="1"
        android:layout_width="match_parent" android:layout_height="wrap_content">
    
        <CheckBox
            android:layout_width="0dp"
            android:layout_weight="0.1"
            android:layout_height="wrap_content"
            android:text=""
            android:id="@+id/checkbox"
            android:checked="false" />
    
        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="myText"
            android:id="@+id/field1"
            android:layout_weight="0.6" />
        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="myText"
            android:id="@+id/field2"
            android:layout_weight="0.15" />
        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="myText"
            android:id="@+id/field3"
            android:layout_weight="0.15" />
    </LinearLayout>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-21
      • 2012-08-19
      相关资源
      最近更新 更多