0

Я бы хотел показать, когда нажал кнопку всплывающее окно на мою активность. Я был вдохновлен by this questionКак создать всплывающее оверлейное представление в действии без фрагмента?

Таким образом, я использую элемент управления «merge» в содержимом xml активности и вставляю в него 2 разных макета, проблема явно возникает в этой строке (код, взятый из вопроса, связанного выше):

FragmentManager fragmentManager = getFragmentManager(); 
fragmentManager.beginTransaction() 
    .add(R.id.overlay_fragment_container, yourFragment) 
    .commit(); 

из-за c FragmentManager работает для фрагментов.

Моя проблема заключается в том, что моя активность не «фрагментирована», но ее LinearLayout накачивается непосредственно в Activity, а не в фрагменте в Activity.

Могу ли я получить аналогичный эффект, подобный этому вопросу в Управлении, или я должен принудительно внедрить все его элементы управления во Фрагмент?

Заранее спасибо

+0

Взгляните на [DialogFragment's] (http://developer.android.com/reference/android/app/DialogFragment.html) –

+0

Должен ли я использовать его также, если мой вид shoudln't будет просто несколькими кнопками, спросите выбор ? Мне нужен просмотр курса с RatingBar и EditText, чтобы выбрать комментарий. Будет ли DialogFragment хорошо для этого? (Возможно, да, потому что я добавлю еще две кнопки, чтобы либо оценить, либо отменить) – BlackBox

+0

Да, [AlertDialog] (http://developer.android.com/reference/android/app/AlertDialog.html) - это стандартный диалог для подтверждения и т. д., но 'DialogFragment' намного более гибкий (что вам нужно). –

ответ

4

Ok так что это может показаться, как много кода, но это очень легко.

Во-первых, вы создадите диалоговое расположение, которое вы хотите в XML. (не в том же XML, что и представление активности) Вот пример.

custom_dialog.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="52dp" 
     android:text="New Text" 
     android:id="@+id/txtTitle" /> 

    <ListView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/listView" 
     android:layout_weight="1" /> 

    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="52dp"> 

     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="New Button" 
      android:id="@+id/btnBtmLeft" 
      android:layout_weight="1" /> 

     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="New Button" 
      android:id="@+id/btnBtmRight" 
      android:layout_weight="1" /> 
    </LinearLayout> 
</LinearLayout> 

Тогда в вашей деятельности сделать следующее:

private void showMyDialog(Context context) { 
    final Dialog dialog = new Dialog(context); 
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    dialog.setContentView(R.layout.custom_dialog); 
    dialog.setCanceledOnTouchOutside(false); 
    dialog.setCancelable(true); 

    TextView textView = (TextView) dialog.findViewById(R.id.txtTitle); 
    ListView listView = (ListView) dialog.findViewById(R.id.listView); 
    Button btnBtmLeft = (Button) dialog.findViewById(R.id.btnBtmLeft); 
    Button btnBtmRight = (Button) dialog.findViewById(R.id.btnBtmRight); 

    btnBtmLeft.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      dialog.dismiss(); 
     } 
    }); 

    btnBtmRight.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // do whatever you want here 
     } 
    }); 

    /** 
    * if you want the dialog to be specific size, do the following 
    * this will cover 85% of the screen (85% width and 85% height) 
    */ 
    DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); 
    int dialogWidth = (int)(displayMetrics.widthPixels * 0.85); 
    int dialogHeight = (int)(displayMetrics.heightPixels * 0.85); 
    dialog.getWindow().setLayout(dialogWidth, dialogHeight); 

    dialog.show(); 
} 

И, наконец, в OnCreate вашей деятельности, вызвать этот метод

myButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     showMyDialog(context); 
    } 
}); 

Надеюсь, это поможет!

+0

Это великолепно! – BlackBox

Смежные вопросы