Android Serial 5: escribe una interfaz de chat WeChat

1.Haz una foto de nueve parches

1. Significado: Una imagen png especialmente procesada que puede especificar qué áreas se pueden estirar y qué áreas no se pueden estirar.

2. Primero haz un diseño

 

< LinearLayout 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: background = "# d8e0e8" 

    android: orientación = "vertical"  > 

   

    < ListView 

        android: id = "@ + id / msg_list_view" 

        android: layout_width = "match_parent" 

        android: layout_height = "0dp" 

        android: layout_weight = "1" 

        android:divider = "# 0000"  > 

    </ ListView> < LinearLayout androide: layout_width = "match_parent" 
      android: layout_height = "wrap_content" > < EditarTexto androide: id = "@ + / Identificación del input_text" 
          android: layout_width = "0DP" 
          android: layout_height = "wrap_content" 
          android: layout_weight = "1" 
          android: hint = "Escriba algo aquí" 
          android: maxLines = "2" /> < Button android: id = "@ + id / send" 
          android: layout_width = "wrap_content " 
          android: layout_height

   


  

      


     

      

          






     

      

          

= "wrap_content" 

          android: texto = "Enviar" /> 

     

  </ LinearLayout > </ LinearLayout >


 

La estructura básica aquí es construir un escritorio lineal y luego agregar cuadros de diálogo, cuadros de entrada y un botón

 


La imagen de fondo del diálogo que creamos es usar un estilo similar a WeChat

 

 

Luego, antes de diseñar el programa principal, vuelva a escribir un adaptador

 

empaquetar com.example.uibestpractice; 


importación android.widget.ArrayAdapter; 

importar android.widget.LinearLayout; 

importar android.widget.TextView; 

importar android.view.LayoutInflater; 

importar android.content.Context; 

import java.util. * ; 

importar android.view.ViewGroup; 

importación android.view.View; 



pública  clase MsgAdapter extiende ArrayAdapter <msg> { 

 

  privada  int resourceId; 

 

  public MsgAdapter (contexto de contexto, inttextViewResourceId, List <Msg> objetos) { 

    super (contexto, textViewResourceId, objetos); 

    resourceId = textViewResourceId; 

  } 

 

  @Override 

  public View getView ( int position, View convertView, ViewGroup parent) { 

    Msg msg = getItem (position); 

    Ver vista; 

    ViewHolder viewHolder; 

    if (convertView == null ) { 

      view = LayoutInflater.from (getContext ()). inflate (resourceId, null ); 

      viewHolder = new ViewHolder (); 

      viewHolder.leftLayout =(LinearLayout) view.findViewById (R.id.left_layout); 

      viewHolder.rightLayout = (LinearLayout) view.findViewById (R.id.right_layout); 

      viewHolder.leftMsg = (TextView) view.findViewById (R.id.left_msg); 

      viewHolder.rightMsg = (TextView) view.findViewById (R.id.right_msg); 

      view.setTag (viewHolder); 

    } else { 

      view = convertView; 

      viewHolder = viewHolder) view.getTag (); 

     

    } 

    if (msg.getType ( ) == Msg.TYPE_RECEICED) { 

      // Si es un mensaje recibido, muestre el diseño del mensaje a la izquierda y oculte el diseño del mensaje a la derecha

      viewHolder.leftLayout.setVisibility (View.VISIBLE); 

      viewHolder.rightLayout.setVisibility (View.GONE); 

      viewHolder.leftMsg.setText (msg.getContent ()); 

    } else  if (msg.getType () == Msg.TYPE_SENT) { 

      // Si es un mensaje saliente, muestre el diseño del mensaje a la derecha y oculte el diseño del mensaje a la izquierda 

      viewHolder.rightLayout.setVisibility (View.VISIBLE); 

      viewHolder.leftLayout.setVisibility (View.GONE); 

      viewHolder.rightMsg.setText ( msg.getContent ()); 

    } 

    return view; 

   

  } 

 

 

  class ViewHolder { 

    LinearLayout leftLayout; 

   

    LinearLayout rightLayout; 

   

    TextView leftMsg; 

   

    TextView rightMsg;

  } 

}

 

El significado general de este adaptador es que la información enviada por la otra parte está alineada a la izquierda, y la información enviada por sí misma está alineada a la derecha. Se puede ver que las dos primeras constantes se usan para indicar si la información se envió o se pasó; clase interna Representa el código para la alineación izquierda y derecha.

 

Luego escribe el programa principal para adaptar

empaquetar com.example.uibestpractice; 


importación android.app.Activity; 


importación android.os.Bundle; 

importar android.view.Menu; 

importar android.view.MenuItem; 

importar android.view.View; 

importar android.view.View.OnClickListener; 

importar android.view.Window; 

importar android.widget.Button; 

importar android.widget.ListView; 

importar android.widget.EditText; 

importación java.util. * ; 


pública  clase MainActivity extiende Actividad { 

 

  privadoListView msgListView; 

 

  EditText privado inputText; 

 

  botón privado enviar; 

 

  adaptador privado MsgAdapter; 

 

  Lista privada <Msg> msgList = new ArrayList <Msg> (); 

 

  @Override 

  protected  void onCreate (Bundle savedInstanceState) { 

    super .onCreate (savedInstanceState); 

    requestWindowFeature (Window.FEATURE_NO_TITLE); 

    setContentView (R.layout.activity_main); 

    initMsgs (); // 初始化消息数据

    adaptador = nuevo MsgAdapter (MainActivity. Este , R.layout.msg_item, msglist); 

    inputText =(EditText) findViewById (R.id.input_text); 

    enviar = (Botón) findViewById (R.id.send); 

    msgListView.setAdapter (adaptador); 

    send.setOnClickListener ( new OnClickListener () { 

      @Override 

      public  void onClick (View v) { 

        String content = inputText.getText (). toString (); 

        if (! "" .contentEquals (content)) { 

          Msg msg = new Msg ( content, Msg.TYPE_SENT); 

          msgList.add (msg); 

          adapter.notifyDataSetChanged (); // 当 有 新消息 时候 , 刷新 ListView 中 的 显示

          msgListView.setSelection (msgList.size ());// Localice ListView en la última línea 

          inputText.setText ( ""); // Vacíe el contenido en el cuadro de entrada 

        } 

      } 

    });    

  } 

  private  void initMsgs () { 

    Msg msg1 = new Msg ("Hello guy." , Msg. TYPE_RECEICED); 

    msgList.add (msg1); 

    Msg msg2 = nuevo Msg ("Hola. Quién identificó eso" , Msg.TYPE_SENT); 

    msgList.add (msg2); 

    Msg msg3 = nuevo Msg ("jsdlf" , Msg.TYPE_RECEIC ; 

    msgList.add (la Msg3);    

  } 

}

 

 

 

Segundo, el código fuente:

1. Dirección del proyecto

https://github.com/ruigege66/Android/tree/master/UIBestPractice

2.CSDN : https: //blog.csdn.net/weixin_44630050

3. Blog Park: https://www.cnblogs.com/ruigege0000/

4. Bienvenido a prestar atención al número público de WeChat: transformación de Fourier, número público personal, solo utilizado para el aprendizaje y la comunicación, responder "paquete de regalo" en segundo plano, obtener materiales de aprendizaje de big data

 

 

Supongo que te gusta

Origin www.cnblogs.com/ruigege0000/p/12709809.html
Recomendado
Clasificación