【问题标题】:How to make an AppCompat Activity as a Dialog?如何将 AppCompat Activity 设为对话框?
【发布时间】:2016-03-09 05:10:34
【问题描述】:

我需要将我的 AppCompat Activity 用作对话框。为此,我尝试了我在 StackOverflow 中回答的解决方案。但没有任何效果。请回答我。我正在以对话的形式获得活动。但它的高度和宽度都显示得很窄。

我使用了以下主题:

<style name="AppDialogTheme" parent="Theme.AppCompat.Light.Dialog">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="windowNoTitle">true</item>
    <item name="android:background">@android:color/transparent</item>
</style>

【问题讨论】:

标签: android android-alertdialog android-appcompat


【解决方案1】:

您可以使用DialogFragment 并相应地自定义布局。

public class CustomDialogFrag extends DialogFragment{
static FragmentManager fragmentManager;
    public static CustomDialogFrag showDialog(FragmentManager fm){
        CustomDialogFrag customDialogFrag=new CustomDialogFrag();
        fragmentManager=fm;
        return customDialogFrag;
    }
@Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
           AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
        View view = getActivity().getLayoutInflater().inflate(R.layout.dialogfrag_layout, null);
        alertDialogBuilder.setView(view);
        setupUI(view);
        alertDialogBuilder.setTitle("Notification Message");
        alertDialogBuilder.setIcon(R.drawable.notificationicon);
        alertDialogBuilder.setPositiveButton("Close", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        return alertDialogBuilder.create();
    }
void setupUI(View view){
        TextView textViewOne=(TextView)view.findViewById(R.id.txtEventAlias);
        TextView textViewTwo=(TextView)view.findViewById(R.id.txtTime);
        TextView textViewThree=(TextView)view.findViewById(R.id.txtLogMessage);
        textViewOne.setText("Text 1");
        textViewTwo.setText("Text 2");
        textViewThree.setText("Text 3");
    }
}


而 dialogfrag_layout.xml 将是

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="@dimen/margin_10"
    >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/txtEventAlias"
        android:text="Sample"
        android:textColor="@android:color/darker_gray"
        android:textSize="@dimen/textSizeMedium"
        android:padding="@dimen/margin_10"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/txtTime"
        android:text="Sample"
        android:textColor="@android:color/darker_gray"
        android:textSize="@dimen/textSizeMedium"
        android:padding="@dimen/margin_10"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/txtLogMessage"
        android:text="Sample"
        android:textColor="@android:color/darker_gray"
        android:textSize="@dimen/textSizeMedium"
        android:padding="@dimen/margin_10"
        />
</LinearLayout>

Fragment 调用此对话框:

DialogFragment dialogFragment=CustomDialogFrag.showDialog(getFragmentManager());
dialogFragment.show(getActivity().getFragmentManager(), "tag");

【讨论】:

    【解决方案2】:

    在您的活动的 onCreate 中放入以下行:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_your);
    
        // Make the window's width full sized
        WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
        Window window = getWindow();
    
        layoutParams.copyFrom(window.getAttributes());
        layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
        layoutParams.height = WindowManager.LayoutParams.MATCH_PARENT;
    
        window.setAttributes(layoutParams);
    }
    

    经过测试并且有效。如果需要,您可以将宽度和高度都设置为WRAP_CONTENT

    【讨论】:

      猜你喜欢
      • 2016-01-11
      • 2014-11-05
      • 1970-01-01
      • 1970-01-01
      • 2021-01-10
      • 1970-01-01
      • 2010-12-31
      • 1970-01-01
      相关资源
      最近更新 更多