2016-03-16 3 views
0

У меня есть макет внизу. Попытка открыть диалог над этим макетом. См. Снимок экрана enter image description here Может кто-нибудь мне помочь?Как отобразить пользовательское диалоговое окно выше определенного макета в android

Это моя деятельность

package com.example.dynamicviews; 

    import android.app.Dialog; 
    import android.graphics.Color; 
    import android.os.Bundle; 
    import android.support.design.widget.FloatingActionButton; 
    import android.support.design.widget.Snackbar; 
    import android.support.v4.view.ViewPager; 
    import android.support.v7.app.AppCompatActivity; 
    import android.support.v7.widget.Toolbar; 
    import android.view.Gravity; 
    import android.view.View; 
    import android.view.Menu; 
    import android.view.MenuItem; 
    import android.view.ViewGroup; 
    import android.view.WindowManager; 
    import android.widget.EditText; 
    import android.widget.ImageView; 
    import android.widget.RelativeLayout; 
    import android.widget.TextView; 

    public class MainActivity extends AppCompatActivity { 

    RelativeLayout relativeLayoutSend; 
    TextView txt_attach; 
    EditText edit_reply; 
    TextView txt_send; 
    TextView txt_showattach; 
    ViewPager pager; 
    Dialog attachmentDialog; 
    ImageView img_attachment; 
    ImageView img_emailtemplate; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     pager=(ViewPager)findViewById(R.id.pager); 


     relativeLayoutSend=(RelativeLayout)findViewById(R.id.relativeLayoutSend); 

     RelativeLayout.LayoutParams params_attach=new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
     params_attach.leftMargin=20; 
     txt_attach=new TextView(this); 
     txt_attach.setId(R.id.relativeLayoutSend+1); 
     txt_attach.setBackgroundResource(R.mipmap.ic_launcher); 
     txt_attach.setLayoutParams(params_attach); 
     params_attach.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
     params_attach.addRule(RelativeLayout.CENTER_VERTICAL); 
     relativeLayoutSend.addView(txt_attach); 

     RelativeLayout.LayoutParams params_reply=new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
     edit_reply=new EditText(this); 
     edit_reply.setEms(13); 
     edit_reply.setLayoutParams(params_reply); 
     params_reply.addRule(RelativeLayout.CENTER_IN_PARENT); 
     relativeLayoutSend.addView(edit_reply); 

     RelativeLayout.LayoutParams params_send=new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
     params_send.rightMargin=20; 
     txt_send=new TextView(this); 
     txt_send.setBackgroundResource(R.mipmap.ic_launcher); 
     txt_send.setLayoutParams(params_send); 
     params_send.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
     params_send.addRule(RelativeLayout.CENTER_VERTICAL); 
     relativeLayoutSend.addView(txt_send); 

     RelativeLayout.LayoutParams params_showattach=new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
     params_showattach.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
     params_attach.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
     txt_showattach=new TextView(this); 
     params_showattach.leftMargin=40; 
     txt_showattach.setLayoutParams(params_showattach); 
     relativeLayoutSend.addView(txt_showattach); 


     txt_attach.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       attachmentDialog = new Dialog(MainActivity.this, R.style.PauseDialog); 
       attachmentDialog.setContentView(R.layout.custom_attachment); 
       attachmentDialog.setCancelable(true); 
       img_attachment = (ImageView) attachmentDialog.findViewById(R.id.img_attachment); 
       img_emailtemplate = (ImageView) attachmentDialog.findViewById(R.id.img_template); 

       attachmentDialog.getWindow().getAttributes().gravity=Gravity.BOTTOM|Gravity.LEFT; 

       WindowManager.LayoutParams params=attachmentDialog.getWindow().getAttributes(); 
       params.y=300; 
       attachmentDialog.getWindow().setAttributes(params); 
       attachmentDialog.show(); 

      } 
     }); 


    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 

Это мой XML

custom_attachment.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/popup_element" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:background="#0054ae" 
android:layout_marginLeft="16sp"> 

<ImageView 
    android:id="@+id/img_attachment" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@mipmap/ic_launcher" 
    /> 

<ImageView 
    android:id="@+id/img_template" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@mipmap/ic_launcher" 
    android:layout_toRightOf="@+id/img_attachment" 
    android:layout_marginLeft="16sp" /> 

</RelativeLayout> 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true" 
tools:context="com.example.dynamicviews.MainActivity"> 

<RelativeLayout 
    android:id="@+id/relativeLayoutSend" 
    android:layout_width="match_parent" 
    android:layout_height="75sp" 
    android:layout_alignParentBottom="true" 
    android:background="#0054ae"> 

</RelativeLayout> 

Вместо настройки params.y = 300, в котором выравнивание варьируется для разных устройств, мне нужно установить params.выше relativeLayoutSend. Как я могу это сделать?

ответ

0

Класс строителя поможет вам в этом.

Пример:

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
builder.setView(urlayout); 
builder.setTitle("urtitle"); 
alertDialog = builder.create(); 
alertDialog.getWindow().setLayout(600, 400); //Controlling width and height. 
alertDialog.show(); 

Как вы получаете окно и затем установить ширину и высоту макета, это не должно повлиять.

Чтобы отобразить диалоговое окно в нижней части экрана.

Пример:

Dialog dialogue = <your custom dialog>; 

Window window = dialogue.getWindow(); 
WindowManager.LayoutParams layoutparam = window.getAttributes(); 

layoutparam .gravity = Gravity.BOTTOM; 
layoutparam .flags &= ~WindowManager.LayoutParams.FLAG_DIM_BEHIND; 
window.setAttributes(layoutparam); 
+0

Спасибо за вашу помощь. Но проблема в том, что если мы дадим setLayout (600, 400), он будет отображаться в позиции post 6 в другой и другой позиции y в некоторых других устройствах. Есть ли способ разместить диалог над относительным расположением в нижней части по краю дно? Тогда только диалог будет отображаться в одной позиции на всех устройствах – Dilipchandar