Создайте полностью настраиваемый AlertDialog в DialogFragment

Ниже мои FragmentActivity и DialogFragment. Я пытаюсь создать собственный AlertDialog. Я частично достиг этого, как на изображении ниже. Как я могу избавиться от этих белых областей вокруг моего собственного AlertDialog?

public class MainActivity extends FragmentActivity {    
public int mStackLevel = 0; 
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    showDialog();    
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
public void showDialog(){
    mStackLevel++;
    FragmentTransaction ft = getSupportFragmentManager  ().beginTransaction();
    Fragment prev = getSupportFragmentManager().findFragmentByTag   ("dialogg");
    if(prev != null)
    {
        ft.remove(prev);
    }
    ft.addToBackStack(null);
    DialogFragment df = AppWizard.newInstance(mStackLevel);
    df.show(ft, "dialogg");
}  
public void doPositiveClick() {
    // Do stuff here.
    showDialog();
}
public void doNegativeClick() {
    // Do stuff here. 
}
public static class AppWizard extends DialogFragment {
    int mNum;   
    static AppWizard newInstance(int num){
        AppWizard aw = new AppWizard();
        Bundle args = new Bundle();
        args.putInt("num", num);
        aw.setArguments(args);
        return aw;  
    }   
    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        mNum = getArguments().getInt("num");    
    }
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        int title = getArguments().getInt("num");
        LayoutInflater lo = getActivity().getLayoutInflater();
        View view = lo.inflate(R.layout.fragment_dialog, null);   
        final CharSequence[] items = {"Bir daha gösterme!"};
        final boolean[] _selections = null;
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());   
                builder.setView(view);            
                return builder.create();
    }
}

введите здесь описание изображения

вот мой макет alertdialog xml fragment_dialog.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment_dialog"
    style="@style/AlertDialogCustom"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="top|center"
    android:orientation="vertical"
    android:background="@android:drawable/alert_dark_frame" >

 <TextView 
     android:id="@+id/dialog_header"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="BLABLABLA"
     android:textColor="@android:color/black"
     />
  <TextView 
     android:id="@+id/dialog_header2"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="BLABLABLA2"
     android:textColor="@android:color/black"
     />
  <Button
        android:id="@+id/dialog_button"
        android:layout_width="125dp"
        android:layout_height="50dp"
        android:text="Click"
        android:textColor="@android:color/background_dark"
        android:textSize="8sp"
        android:textStyle="bold|italic"
        />

</LinearLayout>

person mctuna    schedule 20.05.2013    source источник


Ответы (2)


Попробуйте использовать это:

public static class AppWizard extends DialogFragment {

    public static AppWizard newInstance(int num) {
        AppWizard f = new AppWizard();

        // Supply num input as an argument.
        Bundle args = new Bundle();
        args.putInt("num", num);
        f.setArguments(args);

        return f;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setStyle(STYLE_NORMAL, android.R.style.Theme_Light_Panel);
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        return super.onCreateDialog(savedInstanceState);;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_dialog,
                container, false);

        // declare your UI elements here
        // For example: 
        // Button mButton =  view.findViewById(R.id.dialog_button);
        // mButton.setOnClickListener(this);

        return view;
    }

}

Это изменит стиль вашего диалога и удалит фон по умолчанию.

person hardartcore    schedule 20.05.2013
comment
Я пробовал, но, к сожалению, ничего не менял. Я изменил TAG на dialogg, или я должен был сохранить его как TAG? Выдает ошибку, так как TAG не виден. я совершенно новый - person mctuna; 20.05.2013
comment
Вы можете удалить Log. Он показывает только сообщение в LogCat. Можете ли вы объяснить, какую часть вы пытаетесь удалить из своего диалога? - person hardartcore; 20.05.2013
comment
те белые части (фон) вокруг моего черного AlertDialog. - person mctuna; 20.05.2013
comment
Вы уверены, что они не являются частью вашего XML-макета? - person hardartcore; 20.05.2013
comment
Я почти уверен, что обновляю свой вопрос с помощью моего макета alertdialog fragment_dialog, вы можете взглянуть на него - person mctuna; 20.05.2013
comment
Спасибо. Это работает, но я немного запутался, поэтому, если мы хотим создать собственный AlertDialog, мы не используем AlertDialog.Builder, а используем собственный макет. Итак, полностью настроенный макет для ерунды alertdialog? - person mctuna; 20.05.2013
comment
Dialog — это базовый класс для диалогов пользовательского интерфейса в Android, поэтому, если вы хотите создать собственный диалог, вам следует использовать класс Dialog вместо AlertDialog. Никогда не пытался расширить AlertDialog и создать собственный макет, поэтому, возможно, его можно создать с помощью пользовательского макета. Я должен попробовать это. И еще одно... когда вы используете DialogFragment, помните, что пользовательский интерфейс должен быть установлен в onCreateView, а не в onCreateDialog. - person hardartcore; 20.05.2013

изменить эту строку:

new AlertDialog.Builder(getActivity());

к этому:

new AlertDialog.Builder(getActivity() , android.R.style.Theme_Translucent_NoTitleBar);
person Rotem    schedule 20.05.2013
comment
Я поместил это именно здесь; строитель.setView(представление); .setBackgroundDrawable (новый ColorDrawable (android.graphics.Color.TRANSPARENT)); вернуть строитель.создать(); но выдает ошибку, поскольку метод setBackgroundDrawable(ColorDrawable) не определен для типа AlertDialog.Builder - person mctuna; 20.05.2013
comment
эмулятор не может запустить приложение пишет К сожалению остановлено. Кстати, я переопределил onCreateDialog, так как у меня нет onCreateView. - person mctuna; 20.05.2013