Android对话框布局如何修复?

时间:2016-10-22 16:10:12

标签: android android-layout dialog

我编程的时候遇到了这个问题。我以为我通过为对话框的主体指定固定的百分比高度来治愈它。我认为这是一个糟糕的形式,因为用户可能有一个纤薄的显示,或设置大字体,这将削减EditText框。

无论如何,该解决方案已经失败,超出了模拟器。

看起来Android正在为对话框分配一个固定的高度,如果我的自定义标题吞噬了太多这个高度,那就把其他所有东西都挤掉了。这是正确的,我该如何解决? 问题 enter image description here

public class GetUserNameDialogFragment extends DialogFragment {

    final String TAG = "GetUserNameDialog";
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.MyAlertDialogStyle);
        //TODO getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);

        LayoutInflater inflater = getActivity().getLayoutInflater();
        final View sunburst =inflater.inflate(R.layout.dialog_user_name, null);
        builder.setView(sunburst);


        builder.setCancelable(false)
                .setPositiveButton("Let's go!", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {

                        Log.wtf(TAG, "button press");
                        EditText name = (EditText) sunburst.findViewById(R.id.nameEditText);
                        String userName = name.getText().toString().trim();
                        //TODO needs to be validated
                        SharedPreferences sharedPref = getActivity().getSharedPreferences("userDetails", Context.MODE_PRIVATE);
                        SharedPreferences.Editor editor = sharedPref.edit();
                        editor.putString("userName", userName );
                        editor.commit();
                    }
                });
        // Create the AlertDialog object and return it
        return builder.create();
    }
}

这是xml

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:scaleType="fitCenter"
        android:adjustViewBounds="true"
        app:srcCompat="@drawable/ic_ball_sunburst_classic"
        android:background="@color/colorAccent"
        />
    <LinearLayout
        android:layout_width="250dp"
        android:paddingLeft="16dp"
        android:paddingRight="16dp"
        android:layout_height="125dp">
    <EditText
        android:id="@+id/nameEditText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="8dp"
        android:hint="Enter your first name"/>
    </LinearLayout>
</LinearLayout>

所有帮助非常感谢,我的应用程序的第一印象 - 真是一场灾难!

1 个答案:

答案 0 :(得分:0)

为什么不使用Dialog代替AlertDialog

我使用Dialog构建了示例,它运行良好

enter image description here

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_gravity="center_horizontal"
android:layout_width=" 290dp"
android:layout_height="wrap_content"
android:background="#4CAF50">


<ImageView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:scaleType="fitCenter"
    android:adjustViewBounds="true"
    android:src="@drawable/base"
    android:background="@color/colorAccent"
    />

    <EditText
        android:textColor="#fff"
        android:textColorHint="#fff"
        android:layout_marginTop="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginLeft="10dp"
        android:id="@+id/nameEditText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Enter your first name"/>

<Button
    android:layout_marginRight="10dp"
    android:layout_marginEnd="10dp"
    android:id="@+id/letsGo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="right"
    android:text="Let's Go"
    android:textColor="#fff"
    android:background="@android:color/transparent"/>

    final Dialog dialog = new Dialog(context);
    if(dialog.getWindow() != null){
        dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    }
    dialog.setContentView(R.layout.dialog);

    Button letsGO = (Button) dialog.findViewById(R.id.letsGo);
    EditText nameEditText = (EditText) dialog.findViewById(R.id.nameEditText);

    letsGO.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(context, "Lets GO!", Toast.LENGTH_SHORT).show();
            dialog.dismiss();
        }
    });
    dialog.show();