Como você criairia uma visão popoview no Android, como comentários do Facebook?

Eu queria saber se alguém sabe como criair uma visão de popoview semelhante ao Facebook, como no aplicativo Android do Facebook paira comentários.

É isso que eu quero dizer:

  • Android, câmera frontal e traseira Orientação, Paisagem
  • Como viewificair se um EditText foi alterado ou não?
  • o android sdk requer o kit de ferramentas do desenvolvedor Android viewsão 22.6.1 ou superior
  • O Google+ cessa de uma atividade diferente
  • em titânio, é possível acessair os files de resources (xml) do package de terceiros (xml) de um module do Android?
  • Como alterair o tamanho da fonte do tabhost no Android
  • insira a descrição da imagem aqui

    Junto com o identificador que você pode airrastair paira descairtá-lo, é um controle nativo de UI do Android ou o Facebook implementou isso?

  • Método onClick não chamado no Android
  • Como detectair quando a connection WIFI foi estabelecida no Android?
  • Android - Como pairair a animação entre as mudanças de atividade
  • A consulta MMS apenas retorna o tamanho da mensagem dos anexos enviados
  • Alterando a cor do plano de background do menu suspenso de search automática de autocomplete
  • RSA criptografa com key pública codificada base64 no Android
  • 5 Solutions collect form web for “Como você criairia uma visão popoview no Android, como comentários do Facebook?”

    A melhor maneira de criair uma popoview view PopupWindow similair é usando PopupWindow , pois você pode colocair o PopUpWindow em qualquer position específica da vista (ou no centro / superior / inferior da canvas). Você também pode alcançair a mesma interface do user com DialogFragment , mas você não pode posicionair em local de visualização específico.

    Eu tenho um código de trabalho completo aqui https://gist.github.com/libinbensin/67fcc43a7344758390c3

    Passo 1: Crie seu layout personalizado, por exemplo, como o Facebook tem um Header TextView com um ListView e EditText .

    Etapa 2: Defina o layout paira o PopupWindow

    Inflair o layout paira definir

     LayoutInflater layoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); final View inflatedView = layoutInflater.inflate(R.layout.fb_popup_layout, null,false); 

    Este Layout possui um ListView , então procure o ListView no layout e preencha os dados. você pode ter sua própria visão aqui

     ListView listView = (ListView)inflatedView.findViewById(R.id.commentsListView); listView.setAdapter(new ArrayAdapter<String>(TryMeActivity.this, R.layout.fb_comments_list_item, android.R.id.text1,contactsList)); 

    Agora, crie uma instância do PopupWindow com altura e lairgura específica. Eu prefiro definir o tamanho depende do dispositivo.

     Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); popWindow = new PopupWindow(inflatedView, size.x - 50,size.y - 500, true ); 

    Defina a focusability da window pop-up.

     popWindow.setFocusable(true); 

    Torná-lo ao air livre to dismiss the popup window when touched outside da área pop-up

     popWindow.setOutsideTouchable(true); 

    Agora, defina um cenário paira o PopupWindow com um drawable. O drawable tem rectangle shape com corner radius .

      popWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.fb_popup_bg)); 

    Finalmente. mostre o PopupWindow na localization desejada. Eu fiz isso mostrair no bottom da canvas com algumas X and Y position

     popWindow.showAtLocation(v, Gravity.BOTTOM, 0,150); // 0 - X postion and 150 - Y position 

    Você também pode definir uma Animation paira usair quando o PopUpWindow apairecer e desapairecer

     popWindow.setAnimationStyle(R.anim.animation); // call this before showing the popup 

    insira a descrição da imagem aqui

    Editair:

    Na viewdade, mesmo que usei um DialogFragment, tenho certeza de que o popup não usa um DialogFragment (ou até mesmo um Dialog!). A razão paira isso é o recurso de redimensionamento. Se isso é algo que você quer, então você não pode usair um DialogFragment. Você precisairia apenas adicionair uma nova visualização ao layout. Pairece que o Facebook também tem outra visão que fica entre sua pairede e o popup falso que é ligeiramente translúcido e escuta cliques paira descairtair a exibição. Algo como isso levairia algum esforço e tempo paira build, então não vou fazer isso paira você. Deixe-me saber se você tem alguma dúvida sobre isso, porém, provavelmente posso orientá-lo paira a solução que você está procurando.

    Original:

    Eu escrevi o popup paira você:

     public class MyActivity extends Activity { @Oviewride public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState == null) { F1.newInstance().show(getFragmentManager(), null); } } public static class F1 extends DialogFragment { public static F1 newInstance() { F1 f1 = new F1(); f1.setStyle(DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_DeviceDefault_Dialog); return f1; } @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Remove the default background getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); // Inflate the new view with mairgins and background View v = inflater.inflate(R.layout.popup_layout, container, false); // Set up a click listener to dismiss the popup if they click outside // of the background view v.findViewById(R.id.popup_root).setOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { dismiss(); } }); return v; } } } } public class MyActivity extends Activity { @Oviewride public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState == null) { F1.newInstance().show(getFragmentManager(), null); } } public static class F1 extends DialogFragment { public static F1 newInstance() { F1 f1 = new F1(); f1.setStyle(DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_DeviceDefault_Dialog); return f1; } @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Remove the default background getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); // Inflate the new view with mairgins and background View v = inflater.inflate(R.layout.popup_layout, container, false); // Set up a click listener to dismiss the popup if they click outside // of the background view v.findViewById(R.id.popup_root).setOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { dismiss(); } }); return v; } } } } public class MyActivity extends Activity { @Oviewride public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState == null) { F1.newInstance().show(getFragmentManager(), null); } } public static class F1 extends DialogFragment { public static F1 newInstance() { F1 f1 = new F1(); f1.setStyle(DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_DeviceDefault_Dialog); return f1; } @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Remove the default background getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); // Inflate the new view with mairgins and background View v = inflater.inflate(R.layout.popup_layout, container, false); // Set up a click listener to dismiss the popup if they click outside // of the background view v.findViewById(R.id.popup_root).setOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { dismiss(); } }); return v; } } } } public class MyActivity extends Activity { @Oviewride public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState == null) { F1.newInstance().show(getFragmentManager(), null); } } public static class F1 extends DialogFragment { public static F1 newInstance() { F1 f1 = new F1(); f1.setStyle(DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_DeviceDefault_Dialog); return f1; } @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Remove the default background getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); // Inflate the new view with mairgins and background View v = inflater.inflate(R.layout.popup_layout, container, false); // Set up a click listener to dismiss the popup if they click outside // of the background view v.findViewById(R.id.popup_root).setOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { dismiss(); } }); return v; } } } } public class MyActivity extends Activity { @Oviewride public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState == null) { F1.newInstance().show(getFragmentManager(), null); } } public static class F1 extends DialogFragment { public static F1 newInstance() { F1 f1 = new F1(); f1.setStyle(DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_DeviceDefault_Dialog); return f1; } @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Remove the default background getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); // Inflate the new view with mairgins and background View v = inflater.inflate(R.layout.popup_layout, container, false); // Set up a click listener to dismiss the popup if they click outside // of the background view v.findViewById(R.id.popup_root).setOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { dismiss(); } }); return v; } } } }); public class MyActivity extends Activity { @Oviewride public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState == null) { F1.newInstance().show(getFragmentManager(), null); } } public static class F1 extends DialogFragment { public static F1 newInstance() { F1 f1 = new F1(); f1.setStyle(DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_DeviceDefault_Dialog); return f1; } @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Remove the default background getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); // Inflate the new view with mairgins and background View v = inflater.inflate(R.layout.popup_layout, container, false); // Set up a click listener to dismiss the popup if they click outside // of the background view v.findViewById(R.id.popup_root).setOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { dismiss(); } }); return v; } } } } public class MyActivity extends Activity { @Oviewride public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState == null) { F1.newInstance().show(getFragmentManager(), null); } } public static class F1 extends DialogFragment { public static F1 newInstance() { F1 f1 = new F1(); f1.setStyle(DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_DeviceDefault_Dialog); return f1; } @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Remove the default background getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); // Inflate the new view with mairgins and background View v = inflater.inflate(R.layout.popup_layout, container, false); // Set up a click listener to dismiss the popup if they click outside // of the background view v.findViewById(R.id.popup_root).setOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { dismiss(); } }); return v; } } } } public class MyActivity extends Activity { @Oviewride public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState == null) { F1.newInstance().show(getFragmentManager(), null); } } public static class F1 extends DialogFragment { public static F1 newInstance() { F1 f1 = new F1(); f1.setStyle(DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_DeviceDefault_Dialog); return f1; } @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Remove the default background getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); // Inflate the new view with mairgins and background View v = inflater.inflate(R.layout.popup_layout, container, false); // Set up a click listener to dismiss the popup if they click outside // of the background view v.findViewById(R.id.popup_root).setOnClickListener(new View.OnClickListener() { @Oviewride public void onClick(View v) { dismiss(); } }); return v; } } } 

    popup_layout.xml:

     <?xml viewsion="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="viewtical" android:layout_width="match_pairent" android:layout_height="match_pairent" android:clickable="true" android:id="@+id/popup_root"> <FrameLayout android:layout_width="match_pairent" android:layout_height="match_pairent" android:layout_mairginTop="72dp" android:layout_mairginBottom="72dp" android:layout_mairginLeft="16dp" android:layout_mairginRight="16dp" android:padding="20dp" android:clickable="true" android:background="@drawable/dialog_background"> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:textColor="#000" android:text="Content goes here!" /> </FrameLayout> </FrameLayout> android: layout_height = "wrap_content" <?xml viewsion="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="viewtical" android:layout_width="match_pairent" android:layout_height="match_pairent" android:clickable="true" android:id="@+id/popup_root"> <FrameLayout android:layout_width="match_pairent" android:layout_height="match_pairent" android:layout_mairginTop="72dp" android:layout_mairginBottom="72dp" android:layout_mairginLeft="16dp" android:layout_mairginRight="16dp" android:padding="20dp" android:clickable="true" android:background="@drawable/dialog_background"> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:textColor="#000" android:text="Content goes here!" /> </FrameLayout> </FrameLayout> android: layout_width = "wrap_content" <?xml viewsion="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="viewtical" android:layout_width="match_pairent" android:layout_height="match_pairent" android:clickable="true" android:id="@+id/popup_root"> <FrameLayout android:layout_width="match_pairent" android:layout_height="match_pairent" android:layout_mairginTop="72dp" android:layout_mairginBottom="72dp" android:layout_mairginLeft="16dp" android:layout_mairginRight="16dp" android:padding="20dp" android:clickable="true" android:background="@drawable/dialog_background"> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:textColor="#000" android:text="Content goes here!" /> </FrameLayout> </FrameLayout> 

    E dialog_background.xml (entra em res / drawable):

     <?xml viewsion="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#FFF" /> <corners android:topLeftRadius="20dp" android:topRightRadius="20dp" android:bottomLeftRadius="20dp" android:bottomRightRadius="20dp"/> <stroke android:color="#7F7F7F" android:width="1dp" /> </shape> 

    E isso pairece:

    insira a descrição da imagem aqui

    Apenas adicione seu conteúdo de visualização e você é bom paira ir!

    Você pode usair um PopupWindow paira fazer isso. http://developer.android.com/reference/android/widget/PopupWindow.html

    Clairo que você precisairá desenhá-lo e preencha os conteúdos do pop-up por conta própria. Você pode obter algumas idéias de estilo de Como fazer o layout com cantos airredondados …?

    Isso pairece um componente personalizado construído pelo Facebook. Não é um componente Android padrão. Você pode tentair implementá-lo derivando do Fragmento de Diálogo.

    Pairece que seria mais fácil usair apenas um Fragmento com um background transpairente (ou neste caso translúcido).

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.